* [PATCH v7 09/13] LoongArch: Add ABI Lists @ 2022-07-19 1:22 caiyinyu 2022-07-19 1:22 ` [PATCH v7 10/13] LoongArch: Build Infastructure caiyinyu ` (3 more replies) 0 siblings, 4 replies; 9+ messages in thread From: caiyinyu @ 2022-07-19 1:22 UTC (permalink / raw) To: adhemerval.zanella, libc-alpha, joseph_myers, carlos, i.swmail; +Cc: caiyinyu --- .../sysv/linux/loongarch/lp64/c++-types.data | 67 + .../unix/sysv/linux/loongarch/lp64/ld.abilist | 8 + .../loongarch/lp64/libBrokenLocale.abilist | 1 + .../sysv/linux/loongarch/lp64/libc.abilist | 2153 +++++++++++++++++ .../loongarch/lp64/libc_malloc_debug.abilist | 26 + .../linux/loongarch/lp64/libcrypt.abilist | 2 + .../sysv/linux/loongarch/lp64/libm.abilist | 1030 ++++++++ .../linux/loongarch/lp64/libpthread.abilist | 0 .../linux/loongarch/lp64/libresolv.abilist | 55 + .../sysv/linux/loongarch/lp64/librt.abilist | 0 .../linux/loongarch/lp64/libthread_db.abilist | 40 + 11 files changed, 3382 insertions(+) create mode 100644 sysdeps/unix/sysv/linux/loongarch/lp64/c++-types.data create mode 100644 sysdeps/unix/sysv/linux/loongarch/lp64/ld.abilist create mode 100644 sysdeps/unix/sysv/linux/loongarch/lp64/libBrokenLocale.abilist create mode 100644 sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist create mode 100644 sysdeps/unix/sysv/linux/loongarch/lp64/libc_malloc_debug.abilist create mode 100644 sysdeps/unix/sysv/linux/loongarch/lp64/libcrypt.abilist create mode 100644 sysdeps/unix/sysv/linux/loongarch/lp64/libm.abilist create mode 100644 sysdeps/unix/sysv/linux/loongarch/lp64/libpthread.abilist create mode 100644 sysdeps/unix/sysv/linux/loongarch/lp64/libresolv.abilist create mode 100644 sysdeps/unix/sysv/linux/loongarch/lp64/librt.abilist create mode 100644 sysdeps/unix/sysv/linux/loongarch/lp64/libthread_db.abilist diff --git a/sysdeps/unix/sysv/linux/loongarch/lp64/c++-types.data b/sysdeps/unix/sysv/linux/loongarch/lp64/c++-types.data new file mode 100644 index 0000000000..ac925ccb36 --- /dev/null +++ b/sysdeps/unix/sysv/linux/loongarch/lp64/c++-types.data @@ -0,0 +1,67 @@ +blkcnt64_t:l +blkcnt_t:l +blksize_t:i +caddr_t:Pc +clockid_t:i +clock_t:l +daddr_t:i +dev_t:m +fd_mask:l +fsblkcnt64_t:m +fsblkcnt_t:m +fsfilcnt64_t:m +fsfilcnt_t:m +fsid_t:8__fsid_t +gid_t:j +id_t:j +ino64_t:m +ino_t:m +int16_t:s +int32_t:i +int64_t:l +int8_t:a +intptr_t:l +key_t:i +loff_t:l +mode_t:j +nlink_t:j +off64_t:l +off_t:l +pid_t:i +pthread_attr_t:14pthread_attr_t +pthread_barrier_t:17pthread_barrier_t +pthread_barrierattr_t:21pthread_barrierattr_t +pthread_cond_t:14pthread_cond_t +pthread_condattr_t:18pthread_condattr_t +pthread_key_t:j +pthread_mutex_t:15pthread_mutex_t +pthread_mutexattr_t:19pthread_mutexattr_t +pthread_once_t:i +pthread_rwlock_t:16pthread_rwlock_t +pthread_rwlockattr_t:20pthread_rwlockattr_t +pthread_spinlock_t:i +pthread_t:m +quad_t:l +register_t:l +rlim64_t:m +rlim_t:m +sigset_t:10__sigset_t +size_t:m +socklen_t:j +ssize_t:l +suseconds_t:l +time_t:l +u_char:h +uid_t:j +uint:j +u_int:j +u_int16_t:t +u_int32_t:j +u_int64_t:m +u_int8_t:h +ulong:m +u_long:m +u_quad_t:m +useconds_t:j +ushort:t +u_short:t diff --git a/sysdeps/unix/sysv/linux/loongarch/lp64/ld.abilist b/sysdeps/unix/sysv/linux/loongarch/lp64/ld.abilist new file mode 100644 index 0000000000..93fcd64eee --- /dev/null +++ b/sysdeps/unix/sysv/linux/loongarch/lp64/ld.abilist @@ -0,0 +1,8 @@ +GLIBC_2.36 __libc_stack_end D 0x8 +GLIBC_2.36 __rseq_flags D 0x4 +GLIBC_2.36 __rseq_offset D 0x8 +GLIBC_2.36 __rseq_size D 0x4 +GLIBC_2.36 __stack_chk_guard D 0x8 +GLIBC_2.36 __tls_get_addr F +GLIBC_2.36 _dl_mcount F +GLIBC_2.36 _r_debug D 0x28 diff --git a/sysdeps/unix/sysv/linux/loongarch/lp64/libBrokenLocale.abilist b/sysdeps/unix/sysv/linux/loongarch/lp64/libBrokenLocale.abilist new file mode 100644 index 0000000000..404afa3683 --- /dev/null +++ b/sysdeps/unix/sysv/linux/loongarch/lp64/libBrokenLocale.abilist @@ -0,0 +1 @@ +GLIBC_2.36 __ctype_get_mb_cur_max F diff --git a/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist b/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist new file mode 100644 index 0000000000..b02bc6ddc8 --- /dev/null +++ b/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist @@ -0,0 +1,2153 @@ +GLIBC_2.36 _Exit F +GLIBC_2.36 _Fork F +GLIBC_2.36 _IO_2_1_stderr_ D 0xe0 +GLIBC_2.36 _IO_2_1_stdin_ D 0xe0 +GLIBC_2.36 _IO_2_1_stdout_ D 0xe0 +GLIBC_2.36 _IO_adjust_column F +GLIBC_2.36 _IO_adjust_wcolumn F +GLIBC_2.36 _IO_default_doallocate F +GLIBC_2.36 _IO_default_finish F +GLIBC_2.36 _IO_default_pbackfail F +GLIBC_2.36 _IO_default_uflow F +GLIBC_2.36 _IO_default_xsgetn F +GLIBC_2.36 _IO_default_xsputn F +GLIBC_2.36 _IO_do_write F +GLIBC_2.36 _IO_doallocbuf F +GLIBC_2.36 _IO_fclose F +GLIBC_2.36 _IO_fdopen F +GLIBC_2.36 _IO_feof F +GLIBC_2.36 _IO_ferror F +GLIBC_2.36 _IO_fflush F +GLIBC_2.36 _IO_fgetpos F +GLIBC_2.36 _IO_fgetpos64 F +GLIBC_2.36 _IO_fgets F +GLIBC_2.36 _IO_file_attach F +GLIBC_2.36 _IO_file_close F +GLIBC_2.36 _IO_file_close_it F +GLIBC_2.36 _IO_file_doallocate F +GLIBC_2.36 _IO_file_finish F +GLIBC_2.36 _IO_file_fopen F +GLIBC_2.36 _IO_file_init F +GLIBC_2.36 _IO_file_jumps D 0xa8 +GLIBC_2.36 _IO_file_open F +GLIBC_2.36 _IO_file_overflow F +GLIBC_2.36 _IO_file_read F +GLIBC_2.36 _IO_file_seek F +GLIBC_2.36 _IO_file_seekoff F +GLIBC_2.36 _IO_file_setbuf F +GLIBC_2.36 _IO_file_stat F +GLIBC_2.36 _IO_file_sync F +GLIBC_2.36 _IO_file_underflow F +GLIBC_2.36 _IO_file_write F +GLIBC_2.36 _IO_file_xsputn F +GLIBC_2.36 _IO_flockfile F +GLIBC_2.36 _IO_flush_all F +GLIBC_2.36 _IO_flush_all_linebuffered F +GLIBC_2.36 _IO_fopen F +GLIBC_2.36 _IO_fprintf F +GLIBC_2.36 _IO_fputs F +GLIBC_2.36 _IO_fread F +GLIBC_2.36 _IO_free_backup_area F +GLIBC_2.36 _IO_free_wbackup_area F +GLIBC_2.36 _IO_fsetpos F +GLIBC_2.36 _IO_fsetpos64 F +GLIBC_2.36 _IO_ftell F +GLIBC_2.36 _IO_ftrylockfile F +GLIBC_2.36 _IO_funlockfile F +GLIBC_2.36 _IO_fwrite F +GLIBC_2.36 _IO_getc F +GLIBC_2.36 _IO_getline F +GLIBC_2.36 _IO_getline_info F +GLIBC_2.36 _IO_gets F +GLIBC_2.36 _IO_init F +GLIBC_2.36 _IO_init_marker F +GLIBC_2.36 _IO_init_wmarker F +GLIBC_2.36 _IO_iter_begin F +GLIBC_2.36 _IO_iter_end F +GLIBC_2.36 _IO_iter_file F +GLIBC_2.36 _IO_iter_next F +GLIBC_2.36 _IO_least_wmarker F +GLIBC_2.36 _IO_link_in F +GLIBC_2.36 _IO_list_all D 0x8 +GLIBC_2.36 _IO_list_lock F +GLIBC_2.36 _IO_list_resetlock F +GLIBC_2.36 _IO_list_unlock F +GLIBC_2.36 _IO_marker_delta F +GLIBC_2.36 _IO_marker_difference F +GLIBC_2.36 _IO_padn F +GLIBC_2.36 _IO_peekc_locked F +GLIBC_2.36 _IO_popen F +GLIBC_2.36 _IO_printf F +GLIBC_2.36 _IO_proc_close F +GLIBC_2.36 _IO_proc_open F +GLIBC_2.36 _IO_putc F +GLIBC_2.36 _IO_puts F +GLIBC_2.36 _IO_remove_marker F +GLIBC_2.36 _IO_seekmark F +GLIBC_2.36 _IO_seekoff F +GLIBC_2.36 _IO_seekpos F +GLIBC_2.36 _IO_seekwmark F +GLIBC_2.36 _IO_setb F +GLIBC_2.36 _IO_setbuffer F +GLIBC_2.36 _IO_setvbuf F +GLIBC_2.36 _IO_sgetn F +GLIBC_2.36 _IO_sprintf F +GLIBC_2.36 _IO_sputbackc F +GLIBC_2.36 _IO_sputbackwc F +GLIBC_2.36 _IO_sscanf F +GLIBC_2.36 _IO_str_init_readonly F +GLIBC_2.36 _IO_str_init_static F +GLIBC_2.36 _IO_str_overflow F +GLIBC_2.36 _IO_str_pbackfail F +GLIBC_2.36 _IO_str_seekoff F +GLIBC_2.36 _IO_str_underflow F +GLIBC_2.36 _IO_sungetc F +GLIBC_2.36 _IO_sungetwc F +GLIBC_2.36 _IO_switch_to_get_mode F +GLIBC_2.36 _IO_switch_to_main_wget_area F +GLIBC_2.36 _IO_switch_to_wbackup_area F +GLIBC_2.36 _IO_switch_to_wget_mode F +GLIBC_2.36 _IO_un_link F +GLIBC_2.36 _IO_ungetc F +GLIBC_2.36 _IO_unsave_markers F +GLIBC_2.36 _IO_unsave_wmarkers F +GLIBC_2.36 _IO_vfprintf F +GLIBC_2.36 _IO_vsprintf F +GLIBC_2.36 _IO_wdefault_doallocate F +GLIBC_2.36 _IO_wdefault_finish F +GLIBC_2.36 _IO_wdefault_pbackfail F +GLIBC_2.36 _IO_wdefault_uflow F +GLIBC_2.36 _IO_wdefault_xsgetn F +GLIBC_2.36 _IO_wdefault_xsputn F +GLIBC_2.36 _IO_wdo_write F +GLIBC_2.36 _IO_wdoallocbuf F +GLIBC_2.36 _IO_wfile_jumps D 0xa8 +GLIBC_2.36 _IO_wfile_overflow F +GLIBC_2.36 _IO_wfile_seekoff F +GLIBC_2.36 _IO_wfile_sync F +GLIBC_2.36 _IO_wfile_underflow F +GLIBC_2.36 _IO_wfile_xsputn F +GLIBC_2.36 _IO_wmarker_delta F +GLIBC_2.36 _IO_wsetb F +GLIBC_2.36 __adjtimex F +GLIBC_2.36 __argz_count F +GLIBC_2.36 __argz_next F +GLIBC_2.36 __argz_stringify F +GLIBC_2.36 __asprintf F +GLIBC_2.36 __asprintf_chk F +GLIBC_2.36 __assert F +GLIBC_2.36 __assert_fail F +GLIBC_2.36 __assert_perror_fail F +GLIBC_2.36 __backtrace F +GLIBC_2.36 __backtrace_symbols F +GLIBC_2.36 __backtrace_symbols_fd F +GLIBC_2.36 __bsd_getpgrp F +GLIBC_2.36 __bzero F +GLIBC_2.36 __check_rhosts_file D 0x4 +GLIBC_2.36 __chk_fail F +GLIBC_2.36 __clone F +GLIBC_2.36 __close F +GLIBC_2.36 __cmsg_nxthdr F +GLIBC_2.36 __confstr_chk F +GLIBC_2.36 __connect F +GLIBC_2.36 __ctype_b_loc F +GLIBC_2.36 __ctype_get_mb_cur_max F +GLIBC_2.36 __ctype_tolower_loc F +GLIBC_2.36 __ctype_toupper_loc F +GLIBC_2.36 __curbrk D 0x8 +GLIBC_2.36 __cxa_at_quick_exit F +GLIBC_2.36 __cxa_atexit F +GLIBC_2.36 __cxa_finalize F +GLIBC_2.36 __cxa_thread_atexit_impl F +GLIBC_2.36 __cyg_profile_func_enter F +GLIBC_2.36 __cyg_profile_func_exit F +GLIBC_2.36 __daylight D 0x4 +GLIBC_2.36 __dcgettext F +GLIBC_2.36 __dgettext F +GLIBC_2.36 __dprintf_chk F +GLIBC_2.36 __dup2 F +GLIBC_2.36 __duplocale F +GLIBC_2.36 __endmntent F +GLIBC_2.36 __environ D 0x8 +GLIBC_2.36 __errno_location F +GLIBC_2.36 __explicit_bzero_chk F +GLIBC_2.36 __fbufsize F +GLIBC_2.36 __fcntl F +GLIBC_2.36 __fdelt_chk F +GLIBC_2.36 __fdelt_warn F +GLIBC_2.36 __ffs F +GLIBC_2.36 __fgets_chk F +GLIBC_2.36 __fgets_unlocked_chk F +GLIBC_2.36 __fgetws_chk F +GLIBC_2.36 __fgetws_unlocked_chk F +GLIBC_2.36 __finite F +GLIBC_2.36 __finitef F +GLIBC_2.36 __finitel F +GLIBC_2.36 __flbf F +GLIBC_2.36 __fork F +GLIBC_2.36 __fpending F +GLIBC_2.36 __fprintf_chk F +GLIBC_2.36 __fpu_control D 0x4 +GLIBC_2.36 __fpurge F +GLIBC_2.36 __fread_chk F +GLIBC_2.36 __fread_unlocked_chk F +GLIBC_2.36 __freadable F +GLIBC_2.36 __freading F +GLIBC_2.36 __freelocale F +GLIBC_2.36 __fsetlocking F +GLIBC_2.36 __fwprintf_chk F +GLIBC_2.36 __fwritable F +GLIBC_2.36 __fwriting F +GLIBC_2.36 __getauxval F +GLIBC_2.36 __getcwd_chk F +GLIBC_2.36 __getdelim F +GLIBC_2.36 __getdomainname_chk F +GLIBC_2.36 __getgroups_chk F +GLIBC_2.36 __gethostname_chk F +GLIBC_2.36 __getlogin_r_chk F +GLIBC_2.36 __getmntent_r F +GLIBC_2.36 __getpagesize F +GLIBC_2.36 __getpgid F +GLIBC_2.36 __getpid F +GLIBC_2.36 __gets_chk F +GLIBC_2.36 __gettimeofday F +GLIBC_2.36 __getwd_chk F +GLIBC_2.36 __gmtime_r F +GLIBC_2.36 __h_errno_location F +GLIBC_2.36 __isalnum_l F +GLIBC_2.36 __isalpha_l F +GLIBC_2.36 __isascii_l F +GLIBC_2.36 __isblank_l F +GLIBC_2.36 __iscntrl_l F +GLIBC_2.36 __isctype F +GLIBC_2.36 __isdigit_l F +GLIBC_2.36 __isgraph_l F +GLIBC_2.36 __isinf F +GLIBC_2.36 __isinff F +GLIBC_2.36 __isinfl F +GLIBC_2.36 __islower_l F +GLIBC_2.36 __isnan F +GLIBC_2.36 __isnanf F +GLIBC_2.36 __isnanl F +GLIBC_2.36 __isoc99_fscanf F +GLIBC_2.36 __isoc99_fwscanf F +GLIBC_2.36 __isoc99_scanf F +GLIBC_2.36 __isoc99_sscanf F +GLIBC_2.36 __isoc99_swscanf F +GLIBC_2.36 __isoc99_vfscanf F +GLIBC_2.36 __isoc99_vfwscanf F +GLIBC_2.36 __isoc99_vscanf F +GLIBC_2.36 __isoc99_vsscanf F +GLIBC_2.36 __isoc99_vswscanf F +GLIBC_2.36 __isoc99_vwscanf F +GLIBC_2.36 __isoc99_wscanf F +GLIBC_2.36 __isprint_l F +GLIBC_2.36 __ispunct_l F +GLIBC_2.36 __isspace_l F +GLIBC_2.36 __isupper_l F +GLIBC_2.36 __iswalnum_l F +GLIBC_2.36 __iswalpha_l F +GLIBC_2.36 __iswblank_l F +GLIBC_2.36 __iswcntrl_l F +GLIBC_2.36 __iswctype F +GLIBC_2.36 __iswctype_l F +GLIBC_2.36 __iswdigit_l F +GLIBC_2.36 __iswgraph_l F +GLIBC_2.36 __iswlower_l F +GLIBC_2.36 __iswprint_l F +GLIBC_2.36 __iswpunct_l F +GLIBC_2.36 __iswspace_l F +GLIBC_2.36 __iswupper_l F +GLIBC_2.36 __iswxdigit_l F +GLIBC_2.36 __isxdigit_l F +GLIBC_2.36 __ivaliduser F +GLIBC_2.36 __libc_allocate_rtsig F +GLIBC_2.36 __libc_calloc F +GLIBC_2.36 __libc_current_sigrtmax F +GLIBC_2.36 __libc_current_sigrtmin F +GLIBC_2.36 __libc_free F +GLIBC_2.36 __libc_freeres F +GLIBC_2.36 __libc_init_first F +GLIBC_2.36 __libc_mallinfo F +GLIBC_2.36 __libc_malloc F +GLIBC_2.36 __libc_mallopt F +GLIBC_2.36 __libc_memalign F +GLIBC_2.36 __libc_pvalloc F +GLIBC_2.36 __libc_realloc F +GLIBC_2.36 __libc_sa_len F +GLIBC_2.36 __libc_single_threaded D 0x1 +GLIBC_2.36 __libc_start_main F +GLIBC_2.36 __libc_valloc F +GLIBC_2.36 __longjmp_chk F +GLIBC_2.36 __lseek F +GLIBC_2.36 __mbrlen F +GLIBC_2.36 __mbrtowc F +GLIBC_2.36 __mbsnrtowcs_chk F +GLIBC_2.36 __mbsrtowcs_chk F +GLIBC_2.36 __mbstowcs_chk F +GLIBC_2.36 __memcmpeq F +GLIBC_2.36 __memcpy_chk F +GLIBC_2.36 __memmove_chk F +GLIBC_2.36 __mempcpy F +GLIBC_2.36 __mempcpy_chk F +GLIBC_2.36 __memset_chk F +GLIBC_2.36 __monstartup F +GLIBC_2.36 __mq_open_2 F +GLIBC_2.36 __nanosleep F +GLIBC_2.36 __newlocale F +GLIBC_2.36 __nl_langinfo_l F +GLIBC_2.36 __nss_configure_lookup F +GLIBC_2.36 __nss_hostname_digits_dots F +GLIBC_2.36 __obstack_printf_chk F +GLIBC_2.36 __obstack_vprintf_chk F +GLIBC_2.36 __open F +GLIBC_2.36 __open64 F +GLIBC_2.36 __open64_2 F +GLIBC_2.36 __open_2 F +GLIBC_2.36 __openat64_2 F +GLIBC_2.36 __openat_2 F +GLIBC_2.36 __overflow F +GLIBC_2.36 __pipe F +GLIBC_2.36 __poll F +GLIBC_2.36 __poll_chk F +GLIBC_2.36 __posix_getopt F +GLIBC_2.36 __ppoll_chk F +GLIBC_2.36 __pread64 F +GLIBC_2.36 __pread64_chk F +GLIBC_2.36 __pread_chk F +GLIBC_2.36 __printf_chk F +GLIBC_2.36 __printf_fp F +GLIBC_2.36 __profile_frequency F +GLIBC_2.36 __progname D 0x8 +GLIBC_2.36 __progname_full D 0x8 +GLIBC_2.36 __pthread_cleanup_routine F +GLIBC_2.36 __pthread_key_create F +GLIBC_2.36 __pthread_register_cancel F +GLIBC_2.36 __pthread_register_cancel_defer F +GLIBC_2.36 __pthread_rwlock_unlock F +GLIBC_2.36 __pthread_unregister_cancel F +GLIBC_2.36 __pthread_unregister_cancel_restore F +GLIBC_2.36 __pthread_unwind_next F +GLIBC_2.36 __ptsname_r_chk F +GLIBC_2.36 __pwrite64 F +GLIBC_2.36 __rawmemchr F +GLIBC_2.36 __rcmd_errstr D 0x8 +GLIBC_2.36 __read F +GLIBC_2.36 __read_chk F +GLIBC_2.36 __readlink_chk F +GLIBC_2.36 __readlinkat_chk F +GLIBC_2.36 __realpath_chk F +GLIBC_2.36 __recv_chk F +GLIBC_2.36 __recvfrom_chk F +GLIBC_2.36 __register_atfork F +GLIBC_2.36 __res_init F +GLIBC_2.36 __res_nclose F +GLIBC_2.36 __res_ninit F +GLIBC_2.36 __res_randomid F +GLIBC_2.36 __res_state F +GLIBC_2.36 __sbrk F +GLIBC_2.36 __sched_cpualloc F +GLIBC_2.36 __sched_cpucount F +GLIBC_2.36 __sched_cpufree F +GLIBC_2.36 __sched_get_priority_max F +GLIBC_2.36 __sched_get_priority_min F +GLIBC_2.36 __sched_getparam F +GLIBC_2.36 __sched_getscheduler F +GLIBC_2.36 __sched_setscheduler F +GLIBC_2.36 __sched_yield F +GLIBC_2.36 __select F +GLIBC_2.36 __send F +GLIBC_2.36 __setmntent F +GLIBC_2.36 __setpgid F +GLIBC_2.36 __sigaction F +GLIBC_2.36 __signbit F +GLIBC_2.36 __signbitf F +GLIBC_2.36 __signbitl F +GLIBC_2.36 __sigpause F +GLIBC_2.36 __sigsetjmp F +GLIBC_2.36 __sigsuspend F +GLIBC_2.36 __snprintf_chk F +GLIBC_2.36 __sprintf_chk F +GLIBC_2.36 __stack_chk_fail F +GLIBC_2.36 __statfs F +GLIBC_2.36 __stpcpy F +GLIBC_2.36 __stpcpy_chk F +GLIBC_2.36 __stpncpy F +GLIBC_2.36 __stpncpy_chk F +GLIBC_2.36 __strcasecmp F +GLIBC_2.36 __strcasecmp_l F +GLIBC_2.36 __strcasestr F +GLIBC_2.36 __strcat_chk F +GLIBC_2.36 __strcoll_l F +GLIBC_2.36 __strcpy_chk F +GLIBC_2.36 __strdup F +GLIBC_2.36 __strerror_r F +GLIBC_2.36 __strfmon_l F +GLIBC_2.36 __strftime_l F +GLIBC_2.36 __strncasecmp_l F +GLIBC_2.36 __strncat_chk F +GLIBC_2.36 __strncpy_chk F +GLIBC_2.36 __strndup F +GLIBC_2.36 __strsep_g F +GLIBC_2.36 __strtod_internal F +GLIBC_2.36 __strtod_l F +GLIBC_2.36 __strtof_internal F +GLIBC_2.36 __strtof_l F +GLIBC_2.36 __strtok_r F +GLIBC_2.36 __strtol_internal F +GLIBC_2.36 __strtol_l F +GLIBC_2.36 __strtold_internal F +GLIBC_2.36 __strtold_l F +GLIBC_2.36 __strtoll_internal F +GLIBC_2.36 __strtoll_l F +GLIBC_2.36 __strtoul_internal F +GLIBC_2.36 __strtoul_l F +GLIBC_2.36 __strtoull_internal F +GLIBC_2.36 __strtoull_l F +GLIBC_2.36 __strverscmp F +GLIBC_2.36 __strxfrm_l F +GLIBC_2.36 __swprintf_chk F +GLIBC_2.36 __sysconf F +GLIBC_2.36 __syslog_chk F +GLIBC_2.36 __sysv_signal F +GLIBC_2.36 __timezone D 0x8 +GLIBC_2.36 __toascii_l F +GLIBC_2.36 __tolower_l F +GLIBC_2.36 __toupper_l F +GLIBC_2.36 __towctrans F +GLIBC_2.36 __towctrans_l F +GLIBC_2.36 __towlower_l F +GLIBC_2.36 __towupper_l F +GLIBC_2.36 __ttyname_r_chk F +GLIBC_2.36 __tzname D 0x10 +GLIBC_2.36 __uflow F +GLIBC_2.36 __underflow F +GLIBC_2.36 __uselocale F +GLIBC_2.36 __vasprintf_chk F +GLIBC_2.36 __vdprintf_chk F +GLIBC_2.36 __vfork F +GLIBC_2.36 __vfprintf_chk F +GLIBC_2.36 __vfscanf F +GLIBC_2.36 __vfwprintf_chk F +GLIBC_2.36 __vprintf_chk F +GLIBC_2.36 __vsnprintf F +GLIBC_2.36 __vsnprintf_chk F +GLIBC_2.36 __vsprintf_chk F +GLIBC_2.36 __vsscanf F +GLIBC_2.36 __vswprintf_chk F +GLIBC_2.36 __vsyslog_chk F +GLIBC_2.36 __vwprintf_chk F +GLIBC_2.36 __wait F +GLIBC_2.36 __waitpid F +GLIBC_2.36 __wcpcpy_chk F +GLIBC_2.36 __wcpncpy_chk F +GLIBC_2.36 __wcrtomb_chk F +GLIBC_2.36 __wcscasecmp_l F +GLIBC_2.36 __wcscat_chk F +GLIBC_2.36 __wcscoll_l F +GLIBC_2.36 __wcscpy_chk F +GLIBC_2.36 __wcsftime_l F +GLIBC_2.36 __wcsncasecmp_l F +GLIBC_2.36 __wcsncat_chk F +GLIBC_2.36 __wcsncpy_chk F +GLIBC_2.36 __wcsnrtombs_chk F +GLIBC_2.36 __wcsrtombs_chk F +GLIBC_2.36 __wcstod_internal F +GLIBC_2.36 __wcstod_l F +GLIBC_2.36 __wcstof_internal F +GLIBC_2.36 __wcstof_l F +GLIBC_2.36 __wcstol_internal F +GLIBC_2.36 __wcstol_l F +GLIBC_2.36 __wcstold_internal F +GLIBC_2.36 __wcstold_l F +GLIBC_2.36 __wcstoll_internal F +GLIBC_2.36 __wcstoll_l F +GLIBC_2.36 __wcstombs_chk F +GLIBC_2.36 __wcstoul_internal F +GLIBC_2.36 __wcstoul_l F +GLIBC_2.36 __wcstoull_internal F +GLIBC_2.36 __wcstoull_l F +GLIBC_2.36 __wcsxfrm_l F +GLIBC_2.36 __wctomb_chk F +GLIBC_2.36 __wctrans_l F +GLIBC_2.36 __wctype_l F +GLIBC_2.36 __wmemcpy_chk F +GLIBC_2.36 __wmemmove_chk F +GLIBC_2.36 __wmempcpy_chk F +GLIBC_2.36 __wmemset_chk F +GLIBC_2.36 __woverflow F +GLIBC_2.36 __wprintf_chk F +GLIBC_2.36 __write F +GLIBC_2.36 __wuflow F +GLIBC_2.36 __wunderflow F +GLIBC_2.36 __xpg_basename F +GLIBC_2.36 __xpg_sigpause F +GLIBC_2.36 __xpg_strerror_r F +GLIBC_2.36 _dl_find_object F +GLIBC_2.36 _dl_mcount_wrapper F +GLIBC_2.36 _dl_mcount_wrapper_check F +GLIBC_2.36 _environ D 0x8 +GLIBC_2.36 _exit F +GLIBC_2.36 _flushlbf F +GLIBC_2.36 _libc_intl_domainname D 0x5 +GLIBC_2.36 _longjmp F +GLIBC_2.36 _mcleanup F +GLIBC_2.36 _mcount F +GLIBC_2.36 _nl_default_dirname D 0x12 +GLIBC_2.36 _nl_domain_bindings D 0x8 +GLIBC_2.36 _nl_msg_cat_cntr D 0x4 +GLIBC_2.36 _obstack_allocated_p F +GLIBC_2.36 _obstack_begin F +GLIBC_2.36 _obstack_begin_1 F +GLIBC_2.36 _obstack_free F +GLIBC_2.36 _obstack_memory_used F +GLIBC_2.36 _obstack_newchunk F +GLIBC_2.36 _pthread_cleanup_pop F +GLIBC_2.36 _pthread_cleanup_push F +GLIBC_2.36 _res D 0x238 +GLIBC_2.36 _res_hconf D 0x48 +GLIBC_2.36 _setjmp F +GLIBC_2.36 _tolower F +GLIBC_2.36 _toupper F +GLIBC_2.36 a64l F +GLIBC_2.36 abort F +GLIBC_2.36 abs F +GLIBC_2.36 accept F +GLIBC_2.36 accept4 F +GLIBC_2.36 access F +GLIBC_2.36 acct F +GLIBC_2.36 addmntent F +GLIBC_2.36 addseverity F +GLIBC_2.36 adjtime F +GLIBC_2.36 adjtimex F +GLIBC_2.36 aio_cancel F +GLIBC_2.36 aio_cancel64 F +GLIBC_2.36 aio_error F +GLIBC_2.36 aio_error64 F +GLIBC_2.36 aio_fsync F +GLIBC_2.36 aio_fsync64 F +GLIBC_2.36 aio_init F +GLIBC_2.36 aio_read F +GLIBC_2.36 aio_read64 F +GLIBC_2.36 aio_return F +GLIBC_2.36 aio_return64 F +GLIBC_2.36 aio_suspend F +GLIBC_2.36 aio_suspend64 F +GLIBC_2.36 aio_write F +GLIBC_2.36 aio_write64 F +GLIBC_2.36 alarm F +GLIBC_2.36 aligned_alloc F +GLIBC_2.36 alphasort F +GLIBC_2.36 alphasort64 F +GLIBC_2.36 argp_err_exit_status D 0x4 +GLIBC_2.36 argp_error F +GLIBC_2.36 argp_failure F +GLIBC_2.36 argp_help F +GLIBC_2.36 argp_parse F +GLIBC_2.36 argp_program_bug_address D 0x8 +GLIBC_2.36 argp_program_version D 0x8 +GLIBC_2.36 argp_program_version_hook D 0x8 +GLIBC_2.36 argp_state_help F +GLIBC_2.36 argp_usage F +GLIBC_2.36 argz_add F +GLIBC_2.36 argz_add_sep F +GLIBC_2.36 argz_append F +GLIBC_2.36 argz_count F +GLIBC_2.36 argz_create F +GLIBC_2.36 argz_create_sep F +GLIBC_2.36 argz_delete F +GLIBC_2.36 argz_extract F +GLIBC_2.36 argz_insert F +GLIBC_2.36 argz_next F +GLIBC_2.36 argz_replace F +GLIBC_2.36 argz_stringify F +GLIBC_2.36 asctime F +GLIBC_2.36 asctime_r F +GLIBC_2.36 asprintf F +GLIBC_2.36 atof F +GLIBC_2.36 atoi F +GLIBC_2.36 atol F +GLIBC_2.36 atoll F +GLIBC_2.36 backtrace F +GLIBC_2.36 backtrace_symbols F +GLIBC_2.36 backtrace_symbols_fd F +GLIBC_2.36 basename F +GLIBC_2.36 bcmp F +GLIBC_2.36 bcopy F +GLIBC_2.36 bind F +GLIBC_2.36 bind_textdomain_codeset F +GLIBC_2.36 bindresvport F +GLIBC_2.36 bindtextdomain F +GLIBC_2.36 brk F +GLIBC_2.36 bsd_signal F +GLIBC_2.36 bsearch F +GLIBC_2.36 btowc F +GLIBC_2.36 bzero F +GLIBC_2.36 c16rtomb F +GLIBC_2.36 c32rtomb F +GLIBC_2.36 c8rtomb F +GLIBC_2.36 call_once F +GLIBC_2.36 calloc F +GLIBC_2.36 canonicalize_file_name F +GLIBC_2.36 capget F +GLIBC_2.36 capset F +GLIBC_2.36 catclose F +GLIBC_2.36 catgets F +GLIBC_2.36 catopen F +GLIBC_2.36 cfgetispeed F +GLIBC_2.36 cfgetospeed F +GLIBC_2.36 cfmakeraw F +GLIBC_2.36 cfsetispeed F +GLIBC_2.36 cfsetospeed F +GLIBC_2.36 cfsetspeed F +GLIBC_2.36 chdir F +GLIBC_2.36 chflags F +GLIBC_2.36 chmod F +GLIBC_2.36 chown F +GLIBC_2.36 chroot F +GLIBC_2.36 clearenv F +GLIBC_2.36 clearerr F +GLIBC_2.36 clearerr_unlocked F +GLIBC_2.36 clock F +GLIBC_2.36 clock_adjtime F +GLIBC_2.36 clock_getcpuclockid F +GLIBC_2.36 clock_getres F +GLIBC_2.36 clock_gettime F +GLIBC_2.36 clock_nanosleep F +GLIBC_2.36 clock_settime F +GLIBC_2.36 clone F +GLIBC_2.36 close F +GLIBC_2.36 close_range F +GLIBC_2.36 closedir F +GLIBC_2.36 closefrom F +GLIBC_2.36 closelog F +GLIBC_2.36 cnd_broadcast F +GLIBC_2.36 cnd_destroy F +GLIBC_2.36 cnd_init F +GLIBC_2.36 cnd_signal F +GLIBC_2.36 cnd_timedwait F +GLIBC_2.36 cnd_wait F +GLIBC_2.36 confstr F +GLIBC_2.36 connect F +GLIBC_2.36 copy_file_range F +GLIBC_2.36 copysign F +GLIBC_2.36 copysignf F +GLIBC_2.36 copysignl F +GLIBC_2.36 creat F +GLIBC_2.36 creat64 F +GLIBC_2.36 ctermid F +GLIBC_2.36 ctime F +GLIBC_2.36 ctime_r F +GLIBC_2.36 cuserid F +GLIBC_2.36 daemon F +GLIBC_2.36 daylight D 0x4 +GLIBC_2.36 dcgettext F +GLIBC_2.36 dcngettext F +GLIBC_2.36 delete_module F +GLIBC_2.36 dgettext F +GLIBC_2.36 difftime F +GLIBC_2.36 dirfd F +GLIBC_2.36 dirname F +GLIBC_2.36 div F +GLIBC_2.36 dl_iterate_phdr F +GLIBC_2.36 dladdr F +GLIBC_2.36 dladdr1 F +GLIBC_2.36 dlclose F +GLIBC_2.36 dlerror F +GLIBC_2.36 dlinfo F +GLIBC_2.36 dlmopen F +GLIBC_2.36 dlopen F +GLIBC_2.36 dlsym F +GLIBC_2.36 dlvsym F +GLIBC_2.36 dn_comp F +GLIBC_2.36 dn_expand F +GLIBC_2.36 dn_skipname F +GLIBC_2.36 dngettext F +GLIBC_2.36 dprintf F +GLIBC_2.36 drand48 F +GLIBC_2.36 drand48_r F +GLIBC_2.36 dup F +GLIBC_2.36 dup2 F +GLIBC_2.36 dup3 F +GLIBC_2.36 duplocale F +GLIBC_2.36 dysize F +GLIBC_2.36 eaccess F +GLIBC_2.36 ecvt F +GLIBC_2.36 ecvt_r F +GLIBC_2.36 endaliasent F +GLIBC_2.36 endfsent F +GLIBC_2.36 endgrent F +GLIBC_2.36 endhostent F +GLIBC_2.36 endmntent F +GLIBC_2.36 endnetent F +GLIBC_2.36 endnetgrent F +GLIBC_2.36 endprotoent F +GLIBC_2.36 endpwent F +GLIBC_2.36 endrpcent F +GLIBC_2.36 endservent F +GLIBC_2.36 endsgent F +GLIBC_2.36 endspent F +GLIBC_2.36 endttyent F +GLIBC_2.36 endusershell F +GLIBC_2.36 endutent F +GLIBC_2.36 endutxent F +GLIBC_2.36 environ D 0x8 +GLIBC_2.36 envz_add F +GLIBC_2.36 envz_entry F +GLIBC_2.36 envz_get F +GLIBC_2.36 envz_merge F +GLIBC_2.36 envz_remove F +GLIBC_2.36 envz_strip F +GLIBC_2.36 epoll_create F +GLIBC_2.36 epoll_create1 F +GLIBC_2.36 epoll_ctl F +GLIBC_2.36 epoll_pwait F +GLIBC_2.36 epoll_pwait2 F +GLIBC_2.36 epoll_wait F +GLIBC_2.36 erand48 F +GLIBC_2.36 erand48_r F +GLIBC_2.36 err F +GLIBC_2.36 error F +GLIBC_2.36 error_at_line F +GLIBC_2.36 error_message_count D 0x4 +GLIBC_2.36 error_one_per_line D 0x4 +GLIBC_2.36 error_print_progname D 0x8 +GLIBC_2.36 errx F +GLIBC_2.36 ether_aton F +GLIBC_2.36 ether_aton_r F +GLIBC_2.36 ether_hostton F +GLIBC_2.36 ether_line F +GLIBC_2.36 ether_ntoa F +GLIBC_2.36 ether_ntoa_r F +GLIBC_2.36 ether_ntohost F +GLIBC_2.36 euidaccess F +GLIBC_2.36 eventfd F +GLIBC_2.36 eventfd_read F +GLIBC_2.36 eventfd_write F +GLIBC_2.36 execl F +GLIBC_2.36 execle F +GLIBC_2.36 execlp F +GLIBC_2.36 execv F +GLIBC_2.36 execve F +GLIBC_2.36 execveat F +GLIBC_2.36 execvp F +GLIBC_2.36 execvpe F +GLIBC_2.36 exit F +GLIBC_2.36 explicit_bzero F +GLIBC_2.36 faccessat F +GLIBC_2.36 fallocate F +GLIBC_2.36 fallocate64 F +GLIBC_2.36 fanotify_init F +GLIBC_2.36 fanotify_mark F +GLIBC_2.36 fchdir F +GLIBC_2.36 fchflags F +GLIBC_2.36 fchmod F +GLIBC_2.36 fchmodat F +GLIBC_2.36 fchown F +GLIBC_2.36 fchownat F +GLIBC_2.36 fclose F +GLIBC_2.36 fcloseall F +GLIBC_2.36 fcntl F +GLIBC_2.36 fcntl64 F +GLIBC_2.36 fcvt F +GLIBC_2.36 fcvt_r F +GLIBC_2.36 fdatasync F +GLIBC_2.36 fdopen F +GLIBC_2.36 fdopendir F +GLIBC_2.36 feof F +GLIBC_2.36 feof_unlocked F +GLIBC_2.36 ferror F +GLIBC_2.36 ferror_unlocked F +GLIBC_2.36 fexecve F +GLIBC_2.36 fflush F +GLIBC_2.36 fflush_unlocked F +GLIBC_2.36 ffs F +GLIBC_2.36 ffsl F +GLIBC_2.36 ffsll F +GLIBC_2.36 fgetc F +GLIBC_2.36 fgetc_unlocked F +GLIBC_2.36 fgetgrent F +GLIBC_2.36 fgetgrent_r F +GLIBC_2.36 fgetpos F +GLIBC_2.36 fgetpos64 F +GLIBC_2.36 fgetpwent F +GLIBC_2.36 fgetpwent_r F +GLIBC_2.36 fgets F +GLIBC_2.36 fgets_unlocked F +GLIBC_2.36 fgetsgent F +GLIBC_2.36 fgetsgent_r F +GLIBC_2.36 fgetspent F +GLIBC_2.36 fgetspent_r F +GLIBC_2.36 fgetwc F +GLIBC_2.36 fgetwc_unlocked F +GLIBC_2.36 fgetws F +GLIBC_2.36 fgetws_unlocked F +GLIBC_2.36 fgetxattr F +GLIBC_2.36 fileno F +GLIBC_2.36 fileno_unlocked F +GLIBC_2.36 finite F +GLIBC_2.36 finitef F +GLIBC_2.36 finitel F +GLIBC_2.36 flistxattr F +GLIBC_2.36 flock F +GLIBC_2.36 flockfile F +GLIBC_2.36 fmemopen F +GLIBC_2.36 fmtmsg F +GLIBC_2.36 fnmatch F +GLIBC_2.36 fopen F +GLIBC_2.36 fopen64 F +GLIBC_2.36 fopencookie F +GLIBC_2.36 fork F +GLIBC_2.36 forkpty F +GLIBC_2.36 fpathconf F +GLIBC_2.36 fprintf F +GLIBC_2.36 fputc F +GLIBC_2.36 fputc_unlocked F +GLIBC_2.36 fputs F +GLIBC_2.36 fputs_unlocked F +GLIBC_2.36 fputwc F +GLIBC_2.36 fputwc_unlocked F +GLIBC_2.36 fputws F +GLIBC_2.36 fputws_unlocked F +GLIBC_2.36 fread F +GLIBC_2.36 fread_unlocked F +GLIBC_2.36 free F +GLIBC_2.36 freeaddrinfo F +GLIBC_2.36 freeifaddrs F +GLIBC_2.36 freelocale F +GLIBC_2.36 fremovexattr F +GLIBC_2.36 freopen F +GLIBC_2.36 freopen64 F +GLIBC_2.36 frexp F +GLIBC_2.36 frexpf F +GLIBC_2.36 frexpl F +GLIBC_2.36 fscanf F +GLIBC_2.36 fsconfig F +GLIBC_2.36 fseek F +GLIBC_2.36 fseeko F +GLIBC_2.36 fseeko64 F +GLIBC_2.36 fsetpos F +GLIBC_2.36 fsetpos64 F +GLIBC_2.36 fsetxattr F +GLIBC_2.36 fsmount F +GLIBC_2.36 fsopen F +GLIBC_2.36 fspick F +GLIBC_2.36 fstat F +GLIBC_2.36 fstat64 F +GLIBC_2.36 fstatat F +GLIBC_2.36 fstatat64 F +GLIBC_2.36 fstatfs F +GLIBC_2.36 fstatfs64 F +GLIBC_2.36 fstatvfs F +GLIBC_2.36 fstatvfs64 F +GLIBC_2.36 fsync F +GLIBC_2.36 ftell F +GLIBC_2.36 ftello F +GLIBC_2.36 ftello64 F +GLIBC_2.36 ftime F +GLIBC_2.36 ftok F +GLIBC_2.36 ftruncate F +GLIBC_2.36 ftruncate64 F +GLIBC_2.36 ftrylockfile F +GLIBC_2.36 fts64_children F +GLIBC_2.36 fts64_close F +GLIBC_2.36 fts64_open F +GLIBC_2.36 fts64_read F +GLIBC_2.36 fts64_set F +GLIBC_2.36 fts_children F +GLIBC_2.36 fts_close F +GLIBC_2.36 fts_open F +GLIBC_2.36 fts_read F +GLIBC_2.36 fts_set F +GLIBC_2.36 ftw F +GLIBC_2.36 ftw64 F +GLIBC_2.36 funlockfile F +GLIBC_2.36 futimens F +GLIBC_2.36 futimes F +GLIBC_2.36 futimesat F +GLIBC_2.36 fwide F +GLIBC_2.36 fwprintf F +GLIBC_2.36 fwrite F +GLIBC_2.36 fwrite_unlocked F +GLIBC_2.36 fwscanf F +GLIBC_2.36 gai_cancel F +GLIBC_2.36 gai_error F +GLIBC_2.36 gai_strerror F +GLIBC_2.36 gai_suspend F +GLIBC_2.36 gcvt F +GLIBC_2.36 get_avphys_pages F +GLIBC_2.36 get_current_dir_name F +GLIBC_2.36 get_nprocs F +GLIBC_2.36 get_nprocs_conf F +GLIBC_2.36 get_phys_pages F +GLIBC_2.36 getaddrinfo F +GLIBC_2.36 getaddrinfo_a F +GLIBC_2.36 getaliasbyname F +GLIBC_2.36 getaliasbyname_r F +GLIBC_2.36 getaliasent F +GLIBC_2.36 getaliasent_r F +GLIBC_2.36 getauxval F +GLIBC_2.36 getc F +GLIBC_2.36 getc_unlocked F +GLIBC_2.36 getchar F +GLIBC_2.36 getchar_unlocked F +GLIBC_2.36 getcontext F +GLIBC_2.36 getcpu F +GLIBC_2.36 getcwd F +GLIBC_2.36 getdate F +GLIBC_2.36 getdate_err D 0x4 +GLIBC_2.36 getdate_r F +GLIBC_2.36 getdelim F +GLIBC_2.36 getdents64 F +GLIBC_2.36 getdirentries F +GLIBC_2.36 getdirentries64 F +GLIBC_2.36 getdomainname F +GLIBC_2.36 getdtablesize F +GLIBC_2.36 getegid F +GLIBC_2.36 getentropy F +GLIBC_2.36 getenv F +GLIBC_2.36 geteuid F +GLIBC_2.36 getfsent F +GLIBC_2.36 getfsfile F +GLIBC_2.36 getfsspec F +GLIBC_2.36 getgid F +GLIBC_2.36 getgrent F +GLIBC_2.36 getgrent_r F +GLIBC_2.36 getgrgid F +GLIBC_2.36 getgrgid_r F +GLIBC_2.36 getgrnam F +GLIBC_2.36 getgrnam_r F +GLIBC_2.36 getgrouplist F +GLIBC_2.36 getgroups F +GLIBC_2.36 gethostbyaddr F +GLIBC_2.36 gethostbyaddr_r F +GLIBC_2.36 gethostbyname F +GLIBC_2.36 gethostbyname2 F +GLIBC_2.36 gethostbyname2_r F +GLIBC_2.36 gethostbyname_r F +GLIBC_2.36 gethostent F +GLIBC_2.36 gethostent_r F +GLIBC_2.36 gethostid F +GLIBC_2.36 gethostname F +GLIBC_2.36 getifaddrs F +GLIBC_2.36 getipv4sourcefilter F +GLIBC_2.36 getitimer F +GLIBC_2.36 getline F +GLIBC_2.36 getloadavg F +GLIBC_2.36 getlogin F +GLIBC_2.36 getlogin_r F +GLIBC_2.36 getmntent F +GLIBC_2.36 getmntent_r F +GLIBC_2.36 getnameinfo F +GLIBC_2.36 getnetbyaddr F +GLIBC_2.36 getnetbyaddr_r F +GLIBC_2.36 getnetbyname F +GLIBC_2.36 getnetbyname_r F +GLIBC_2.36 getnetent F +GLIBC_2.36 getnetent_r F +GLIBC_2.36 getnetgrent F +GLIBC_2.36 getnetgrent_r F +GLIBC_2.36 getopt F +GLIBC_2.36 getopt_long F +GLIBC_2.36 getopt_long_only F +GLIBC_2.36 getpagesize F +GLIBC_2.36 getpass F +GLIBC_2.36 getpeername F +GLIBC_2.36 getpgid F +GLIBC_2.36 getpgrp F +GLIBC_2.36 getpid F +GLIBC_2.36 getppid F +GLIBC_2.36 getpriority F +GLIBC_2.36 getprotobyname F +GLIBC_2.36 getprotobyname_r F +GLIBC_2.36 getprotobynumber F +GLIBC_2.36 getprotobynumber_r F +GLIBC_2.36 getprotoent F +GLIBC_2.36 getprotoent_r F +GLIBC_2.36 getpt F +GLIBC_2.36 getpw F +GLIBC_2.36 getpwent F +GLIBC_2.36 getpwent_r F +GLIBC_2.36 getpwnam F +GLIBC_2.36 getpwnam_r F +GLIBC_2.36 getpwuid F +GLIBC_2.36 getpwuid_r F +GLIBC_2.36 getrandom F +GLIBC_2.36 getresgid F +GLIBC_2.36 getresuid F +GLIBC_2.36 getrlimit F +GLIBC_2.36 getrlimit64 F +GLIBC_2.36 getrpcbyname F +GLIBC_2.36 getrpcbyname_r F +GLIBC_2.36 getrpcbynumber F +GLIBC_2.36 getrpcbynumber_r F +GLIBC_2.36 getrpcent F +GLIBC_2.36 getrpcent_r F +GLIBC_2.36 getrusage F +GLIBC_2.36 gets F +GLIBC_2.36 getservbyname F +GLIBC_2.36 getservbyname_r F +GLIBC_2.36 getservbyport F +GLIBC_2.36 getservbyport_r F +GLIBC_2.36 getservent F +GLIBC_2.36 getservent_r F +GLIBC_2.36 getsgent F +GLIBC_2.36 getsgent_r F +GLIBC_2.36 getsgnam F +GLIBC_2.36 getsgnam_r F +GLIBC_2.36 getsid F +GLIBC_2.36 getsockname F +GLIBC_2.36 getsockopt F +GLIBC_2.36 getsourcefilter F +GLIBC_2.36 getspent F +GLIBC_2.36 getspent_r F +GLIBC_2.36 getspnam F +GLIBC_2.36 getspnam_r F +GLIBC_2.36 getsubopt F +GLIBC_2.36 gettext F +GLIBC_2.36 gettid F +GLIBC_2.36 gettimeofday F +GLIBC_2.36 getttyent F +GLIBC_2.36 getttynam F +GLIBC_2.36 getuid F +GLIBC_2.36 getusershell F +GLIBC_2.36 getutent F +GLIBC_2.36 getutent_r F +GLIBC_2.36 getutid F +GLIBC_2.36 getutid_r F +GLIBC_2.36 getutline F +GLIBC_2.36 getutline_r F +GLIBC_2.36 getutmp F +GLIBC_2.36 getutmpx F +GLIBC_2.36 getutxent F +GLIBC_2.36 getutxid F +GLIBC_2.36 getutxline F +GLIBC_2.36 getw F +GLIBC_2.36 getwc F +GLIBC_2.36 getwc_unlocked F +GLIBC_2.36 getwchar F +GLIBC_2.36 getwchar_unlocked F +GLIBC_2.36 getwd F +GLIBC_2.36 getxattr F +GLIBC_2.36 glob F +GLIBC_2.36 glob64 F +GLIBC_2.36 glob_pattern_p F +GLIBC_2.36 globfree F +GLIBC_2.36 globfree64 F +GLIBC_2.36 gmtime F +GLIBC_2.36 gmtime_r F +GLIBC_2.36 gnu_dev_major F +GLIBC_2.36 gnu_dev_makedev F +GLIBC_2.36 gnu_dev_minor F +GLIBC_2.36 gnu_get_libc_release F +GLIBC_2.36 gnu_get_libc_version F +GLIBC_2.36 grantpt F +GLIBC_2.36 group_member F +GLIBC_2.36 gsignal F +GLIBC_2.36 gtty F +GLIBC_2.36 h_errlist D 0x28 +GLIBC_2.36 h_nerr D 0x4 +GLIBC_2.36 hasmntopt F +GLIBC_2.36 hcreate F +GLIBC_2.36 hcreate_r F +GLIBC_2.36 hdestroy F +GLIBC_2.36 hdestroy_r F +GLIBC_2.36 herror F +GLIBC_2.36 hsearch F +GLIBC_2.36 hsearch_r F +GLIBC_2.36 hstrerror F +GLIBC_2.36 htonl F +GLIBC_2.36 htons F +GLIBC_2.36 iconv F +GLIBC_2.36 iconv_close F +GLIBC_2.36 iconv_open F +GLIBC_2.36 if_freenameindex F +GLIBC_2.36 if_indextoname F +GLIBC_2.36 if_nameindex F +GLIBC_2.36 if_nametoindex F +GLIBC_2.36 imaxabs F +GLIBC_2.36 imaxdiv F +GLIBC_2.36 in6addr_any D 0x10 +GLIBC_2.36 in6addr_loopback D 0x10 +GLIBC_2.36 index F +GLIBC_2.36 inet6_opt_append F +GLIBC_2.36 inet6_opt_find F +GLIBC_2.36 inet6_opt_finish F +GLIBC_2.36 inet6_opt_get_val F +GLIBC_2.36 inet6_opt_init F +GLIBC_2.36 inet6_opt_next F +GLIBC_2.36 inet6_opt_set_val F +GLIBC_2.36 inet6_option_alloc F +GLIBC_2.36 inet6_option_append F +GLIBC_2.36 inet6_option_find F +GLIBC_2.36 inet6_option_init F +GLIBC_2.36 inet6_option_next F +GLIBC_2.36 inet6_option_space F +GLIBC_2.36 inet6_rth_add F +GLIBC_2.36 inet6_rth_getaddr F +GLIBC_2.36 inet6_rth_init F +GLIBC_2.36 inet6_rth_reverse F +GLIBC_2.36 inet6_rth_segments F +GLIBC_2.36 inet6_rth_space F +GLIBC_2.36 inet_addr F +GLIBC_2.36 inet_aton F +GLIBC_2.36 inet_lnaof F +GLIBC_2.36 inet_makeaddr F +GLIBC_2.36 inet_netof F +GLIBC_2.36 inet_network F +GLIBC_2.36 inet_nsap_addr F +GLIBC_2.36 inet_nsap_ntoa F +GLIBC_2.36 inet_ntoa F +GLIBC_2.36 inet_ntop F +GLIBC_2.36 inet_pton F +GLIBC_2.36 init_module F +GLIBC_2.36 initgroups F +GLIBC_2.36 initstate F +GLIBC_2.36 initstate_r F +GLIBC_2.36 innetgr F +GLIBC_2.36 inotify_add_watch F +GLIBC_2.36 inotify_init F +GLIBC_2.36 inotify_init1 F +GLIBC_2.36 inotify_rm_watch F +GLIBC_2.36 insque F +GLIBC_2.36 ioctl F +GLIBC_2.36 iruserok F +GLIBC_2.36 iruserok_af F +GLIBC_2.36 isalnum F +GLIBC_2.36 isalnum_l F +GLIBC_2.36 isalpha F +GLIBC_2.36 isalpha_l F +GLIBC_2.36 isascii F +GLIBC_2.36 isatty F +GLIBC_2.36 isblank F +GLIBC_2.36 isblank_l F +GLIBC_2.36 iscntrl F +GLIBC_2.36 iscntrl_l F +GLIBC_2.36 isctype F +GLIBC_2.36 isdigit F +GLIBC_2.36 isdigit_l F +GLIBC_2.36 isfdtype F +GLIBC_2.36 isgraph F +GLIBC_2.36 isgraph_l F +GLIBC_2.36 isinf F +GLIBC_2.36 isinff F +GLIBC_2.36 isinfl F +GLIBC_2.36 islower F +GLIBC_2.36 islower_l F +GLIBC_2.36 isnan F +GLIBC_2.36 isnanf F +GLIBC_2.36 isnanl F +GLIBC_2.36 isprint F +GLIBC_2.36 isprint_l F +GLIBC_2.36 ispunct F +GLIBC_2.36 ispunct_l F +GLIBC_2.36 isspace F +GLIBC_2.36 isspace_l F +GLIBC_2.36 isupper F +GLIBC_2.36 isupper_l F +GLIBC_2.36 iswalnum F +GLIBC_2.36 iswalnum_l F +GLIBC_2.36 iswalpha F +GLIBC_2.36 iswalpha_l F +GLIBC_2.36 iswblank F +GLIBC_2.36 iswblank_l F +GLIBC_2.36 iswcntrl F +GLIBC_2.36 iswcntrl_l F +GLIBC_2.36 iswctype F +GLIBC_2.36 iswctype_l F +GLIBC_2.36 iswdigit F +GLIBC_2.36 iswdigit_l F +GLIBC_2.36 iswgraph F +GLIBC_2.36 iswgraph_l F +GLIBC_2.36 iswlower F +GLIBC_2.36 iswlower_l F +GLIBC_2.36 iswprint F +GLIBC_2.36 iswprint_l F +GLIBC_2.36 iswpunct F +GLIBC_2.36 iswpunct_l F +GLIBC_2.36 iswspace F +GLIBC_2.36 iswspace_l F +GLIBC_2.36 iswupper F +GLIBC_2.36 iswupper_l F +GLIBC_2.36 iswxdigit F +GLIBC_2.36 iswxdigit_l F +GLIBC_2.36 isxdigit F +GLIBC_2.36 isxdigit_l F +GLIBC_2.36 jrand48 F +GLIBC_2.36 jrand48_r F +GLIBC_2.36 kill F +GLIBC_2.36 killpg F +GLIBC_2.36 klogctl F +GLIBC_2.36 l64a F +GLIBC_2.36 labs F +GLIBC_2.36 lchmod F +GLIBC_2.36 lchown F +GLIBC_2.36 lckpwdf F +GLIBC_2.36 lcong48 F +GLIBC_2.36 lcong48_r F +GLIBC_2.36 ldexp F +GLIBC_2.36 ldexpf F +GLIBC_2.36 ldexpl F +GLIBC_2.36 ldiv F +GLIBC_2.36 lfind F +GLIBC_2.36 lgetxattr F +GLIBC_2.36 link F +GLIBC_2.36 linkat F +GLIBC_2.36 lio_listio F +GLIBC_2.36 lio_listio64 F +GLIBC_2.36 listen F +GLIBC_2.36 listxattr F +GLIBC_2.36 llabs F +GLIBC_2.36 lldiv F +GLIBC_2.36 llistxattr F +GLIBC_2.36 localeconv F +GLIBC_2.36 localtime F +GLIBC_2.36 localtime_r F +GLIBC_2.36 lockf F +GLIBC_2.36 lockf64 F +GLIBC_2.36 login F +GLIBC_2.36 login_tty F +GLIBC_2.36 logout F +GLIBC_2.36 logwtmp F +GLIBC_2.36 longjmp F +GLIBC_2.36 lrand48 F +GLIBC_2.36 lrand48_r F +GLIBC_2.36 lremovexattr F +GLIBC_2.36 lsearch F +GLIBC_2.36 lseek F +GLIBC_2.36 lseek64 F +GLIBC_2.36 lsetxattr F +GLIBC_2.36 lstat F +GLIBC_2.36 lstat64 F +GLIBC_2.36 lutimes F +GLIBC_2.36 madvise F +GLIBC_2.36 makecontext F +GLIBC_2.36 mallinfo F +GLIBC_2.36 mallinfo2 F +GLIBC_2.36 malloc F +GLIBC_2.36 malloc_info F +GLIBC_2.36 malloc_stats F +GLIBC_2.36 malloc_trim F +GLIBC_2.36 malloc_usable_size F +GLIBC_2.36 mallopt F +GLIBC_2.36 mblen F +GLIBC_2.36 mbrlen F +GLIBC_2.36 mbrtoc16 F +GLIBC_2.36 mbrtoc32 F +GLIBC_2.36 mbrtoc8 F +GLIBC_2.36 mbrtowc F +GLIBC_2.36 mbsinit F +GLIBC_2.36 mbsnrtowcs F +GLIBC_2.36 mbsrtowcs F +GLIBC_2.36 mbstowcs F +GLIBC_2.36 mbtowc F +GLIBC_2.36 mcheck F +GLIBC_2.36 mcheck_check_all F +GLIBC_2.36 mcheck_pedantic F +GLIBC_2.36 memalign F +GLIBC_2.36 memccpy F +GLIBC_2.36 memchr F +GLIBC_2.36 memcmp F +GLIBC_2.36 memcpy F +GLIBC_2.36 memfd_create F +GLIBC_2.36 memfrob F +GLIBC_2.36 memmem F +GLIBC_2.36 memmove F +GLIBC_2.36 mempcpy F +GLIBC_2.36 memrchr F +GLIBC_2.36 memset F +GLIBC_2.36 mincore F +GLIBC_2.36 mkdir F +GLIBC_2.36 mkdirat F +GLIBC_2.36 mkdtemp F +GLIBC_2.36 mkfifo F +GLIBC_2.36 mkfifoat F +GLIBC_2.36 mknod F +GLIBC_2.36 mknodat F +GLIBC_2.36 mkostemp F +GLIBC_2.36 mkostemp64 F +GLIBC_2.36 mkostemps F +GLIBC_2.36 mkostemps64 F +GLIBC_2.36 mkstemp F +GLIBC_2.36 mkstemp64 F +GLIBC_2.36 mkstemps F +GLIBC_2.36 mkstemps64 F +GLIBC_2.36 mktemp F +GLIBC_2.36 mktime F +GLIBC_2.36 mlock F +GLIBC_2.36 mlock2 F +GLIBC_2.36 mlockall F +GLIBC_2.36 mmap F +GLIBC_2.36 mmap64 F +GLIBC_2.36 modf F +GLIBC_2.36 modff F +GLIBC_2.36 modfl F +GLIBC_2.36 moncontrol F +GLIBC_2.36 monstartup F +GLIBC_2.36 mount F +GLIBC_2.36 mount_setattr F +GLIBC_2.36 move_mount F +GLIBC_2.36 mprobe F +GLIBC_2.36 mprotect F +GLIBC_2.36 mq_close F +GLIBC_2.36 mq_getattr F +GLIBC_2.36 mq_notify F +GLIBC_2.36 mq_open F +GLIBC_2.36 mq_receive F +GLIBC_2.36 mq_send F +GLIBC_2.36 mq_setattr F +GLIBC_2.36 mq_timedreceive F +GLIBC_2.36 mq_timedsend F +GLIBC_2.36 mq_unlink F +GLIBC_2.36 mrand48 F +GLIBC_2.36 mrand48_r F +GLIBC_2.36 mremap F +GLIBC_2.36 msgctl F +GLIBC_2.36 msgget F +GLIBC_2.36 msgrcv F +GLIBC_2.36 msgsnd F +GLIBC_2.36 msync F +GLIBC_2.36 mtrace F +GLIBC_2.36 mtx_destroy F +GLIBC_2.36 mtx_init F +GLIBC_2.36 mtx_lock F +GLIBC_2.36 mtx_timedlock F +GLIBC_2.36 mtx_trylock F +GLIBC_2.36 mtx_unlock F +GLIBC_2.36 munlock F +GLIBC_2.36 munlockall F +GLIBC_2.36 munmap F +GLIBC_2.36 muntrace F +GLIBC_2.36 name_to_handle_at F +GLIBC_2.36 nanosleep F +GLIBC_2.36 newlocale F +GLIBC_2.36 nftw F +GLIBC_2.36 nftw64 F +GLIBC_2.36 ngettext F +GLIBC_2.36 nice F +GLIBC_2.36 nl_langinfo F +GLIBC_2.36 nl_langinfo_l F +GLIBC_2.36 nrand48 F +GLIBC_2.36 nrand48_r F +GLIBC_2.36 ns_name_compress F +GLIBC_2.36 ns_name_ntop F +GLIBC_2.36 ns_name_pack F +GLIBC_2.36 ns_name_pton F +GLIBC_2.36 ns_name_skip F +GLIBC_2.36 ns_name_uncompress F +GLIBC_2.36 ns_name_unpack F +GLIBC_2.36 ntohl F +GLIBC_2.36 ntohs F +GLIBC_2.36 ntp_adjtime F +GLIBC_2.36 ntp_gettime F +GLIBC_2.36 ntp_gettimex F +GLIBC_2.36 obstack_alloc_failed_handler D 0x8 +GLIBC_2.36 obstack_exit_failure D 0x4 +GLIBC_2.36 obstack_free F +GLIBC_2.36 obstack_printf F +GLIBC_2.36 obstack_vprintf F +GLIBC_2.36 on_exit F +GLIBC_2.36 open F +GLIBC_2.36 open64 F +GLIBC_2.36 open_by_handle_at F +GLIBC_2.36 open_memstream F +GLIBC_2.36 open_tree F +GLIBC_2.36 open_wmemstream F +GLIBC_2.36 openat F +GLIBC_2.36 openat64 F +GLIBC_2.36 opendir F +GLIBC_2.36 openlog F +GLIBC_2.36 openpty F +GLIBC_2.36 optarg D 0x8 +GLIBC_2.36 opterr D 0x4 +GLIBC_2.36 optind D 0x4 +GLIBC_2.36 optopt D 0x4 +GLIBC_2.36 parse_printf_format F +GLIBC_2.36 pathconf F +GLIBC_2.36 pause F +GLIBC_2.36 pclose F +GLIBC_2.36 perror F +GLIBC_2.36 personality F +GLIBC_2.36 pidfd_getfd F +GLIBC_2.36 pidfd_open F +GLIBC_2.36 pidfd_send_signal F +GLIBC_2.36 pipe F +GLIBC_2.36 pipe2 F +GLIBC_2.36 pivot_root F +GLIBC_2.36 pkey_alloc F +GLIBC_2.36 pkey_free F +GLIBC_2.36 pkey_get F +GLIBC_2.36 pkey_mprotect F +GLIBC_2.36 pkey_set F +GLIBC_2.36 poll F +GLIBC_2.36 popen F +GLIBC_2.36 posix_fadvise F +GLIBC_2.36 posix_fadvise64 F +GLIBC_2.36 posix_fallocate F +GLIBC_2.36 posix_fallocate64 F +GLIBC_2.36 posix_madvise F +GLIBC_2.36 posix_memalign F +GLIBC_2.36 posix_openpt F +GLIBC_2.36 posix_spawn F +GLIBC_2.36 posix_spawn_file_actions_addchdir_np F +GLIBC_2.36 posix_spawn_file_actions_addclose F +GLIBC_2.36 posix_spawn_file_actions_addclosefrom_np F +GLIBC_2.36 posix_spawn_file_actions_adddup2 F +GLIBC_2.36 posix_spawn_file_actions_addfchdir_np F +GLIBC_2.36 posix_spawn_file_actions_addopen F +GLIBC_2.36 posix_spawn_file_actions_addtcsetpgrp_np F +GLIBC_2.36 posix_spawn_file_actions_destroy F +GLIBC_2.36 posix_spawn_file_actions_init F +GLIBC_2.36 posix_spawnattr_destroy F +GLIBC_2.36 posix_spawnattr_getflags F +GLIBC_2.36 posix_spawnattr_getpgroup F +GLIBC_2.36 posix_spawnattr_getschedparam F +GLIBC_2.36 posix_spawnattr_getschedpolicy F +GLIBC_2.36 posix_spawnattr_getsigdefault F +GLIBC_2.36 posix_spawnattr_getsigmask F +GLIBC_2.36 posix_spawnattr_init F +GLIBC_2.36 posix_spawnattr_setflags F +GLIBC_2.36 posix_spawnattr_setpgroup F +GLIBC_2.36 posix_spawnattr_setschedparam F +GLIBC_2.36 posix_spawnattr_setschedpolicy F +GLIBC_2.36 posix_spawnattr_setsigdefault F +GLIBC_2.36 posix_spawnattr_setsigmask F +GLIBC_2.36 posix_spawnp F +GLIBC_2.36 ppoll F +GLIBC_2.36 prctl F +GLIBC_2.36 pread F +GLIBC_2.36 pread64 F +GLIBC_2.36 preadv F +GLIBC_2.36 preadv2 F +GLIBC_2.36 preadv64 F +GLIBC_2.36 preadv64v2 F +GLIBC_2.36 printf F +GLIBC_2.36 printf_size F +GLIBC_2.36 printf_size_info F +GLIBC_2.36 prlimit F +GLIBC_2.36 prlimit64 F +GLIBC_2.36 process_madvise F +GLIBC_2.36 process_mrelease F +GLIBC_2.36 process_vm_readv F +GLIBC_2.36 process_vm_writev F +GLIBC_2.36 profil F +GLIBC_2.36 program_invocation_name D 0x8 +GLIBC_2.36 program_invocation_short_name D 0x8 +GLIBC_2.36 pselect F +GLIBC_2.36 psiginfo F +GLIBC_2.36 psignal F +GLIBC_2.36 pthread_attr_destroy F +GLIBC_2.36 pthread_attr_getaffinity_np F +GLIBC_2.36 pthread_attr_getdetachstate F +GLIBC_2.36 pthread_attr_getguardsize F +GLIBC_2.36 pthread_attr_getinheritsched F +GLIBC_2.36 pthread_attr_getschedparam F +GLIBC_2.36 pthread_attr_getschedpolicy F +GLIBC_2.36 pthread_attr_getscope F +GLIBC_2.36 pthread_attr_getsigmask_np F +GLIBC_2.36 pthread_attr_getstack F +GLIBC_2.36 pthread_attr_getstackaddr F +GLIBC_2.36 pthread_attr_getstacksize F +GLIBC_2.36 pthread_attr_init F +GLIBC_2.36 pthread_attr_setaffinity_np F +GLIBC_2.36 pthread_attr_setdetachstate F +GLIBC_2.36 pthread_attr_setguardsize F +GLIBC_2.36 pthread_attr_setinheritsched F +GLIBC_2.36 pthread_attr_setschedparam F +GLIBC_2.36 pthread_attr_setschedpolicy F +GLIBC_2.36 pthread_attr_setscope F +GLIBC_2.36 pthread_attr_setsigmask_np F +GLIBC_2.36 pthread_attr_setstack F +GLIBC_2.36 pthread_attr_setstackaddr F +GLIBC_2.36 pthread_attr_setstacksize F +GLIBC_2.36 pthread_barrier_destroy F +GLIBC_2.36 pthread_barrier_init F +GLIBC_2.36 pthread_barrier_wait F +GLIBC_2.36 pthread_barrierattr_destroy F +GLIBC_2.36 pthread_barrierattr_getpshared F +GLIBC_2.36 pthread_barrierattr_init F +GLIBC_2.36 pthread_barrierattr_setpshared F +GLIBC_2.36 pthread_cancel F +GLIBC_2.36 pthread_clockjoin_np F +GLIBC_2.36 pthread_cond_broadcast F +GLIBC_2.36 pthread_cond_clockwait F +GLIBC_2.36 pthread_cond_destroy F +GLIBC_2.36 pthread_cond_init F +GLIBC_2.36 pthread_cond_signal F +GLIBC_2.36 pthread_cond_timedwait F +GLIBC_2.36 pthread_cond_wait F +GLIBC_2.36 pthread_condattr_destroy F +GLIBC_2.36 pthread_condattr_getclock F +GLIBC_2.36 pthread_condattr_getpshared F +GLIBC_2.36 pthread_condattr_init F +GLIBC_2.36 pthread_condattr_setclock F +GLIBC_2.36 pthread_condattr_setpshared F +GLIBC_2.36 pthread_create F +GLIBC_2.36 pthread_detach F +GLIBC_2.36 pthread_equal F +GLIBC_2.36 pthread_exit F +GLIBC_2.36 pthread_getaffinity_np F +GLIBC_2.36 pthread_getattr_default_np F +GLIBC_2.36 pthread_getattr_np F +GLIBC_2.36 pthread_getconcurrency F +GLIBC_2.36 pthread_getcpuclockid F +GLIBC_2.36 pthread_getname_np F +GLIBC_2.36 pthread_getschedparam F +GLIBC_2.36 pthread_getspecific F +GLIBC_2.36 pthread_join F +GLIBC_2.36 pthread_key_create F +GLIBC_2.36 pthread_key_delete F +GLIBC_2.36 pthread_kill F +GLIBC_2.36 pthread_mutex_clocklock F +GLIBC_2.36 pthread_mutex_consistent F +GLIBC_2.36 pthread_mutex_destroy F +GLIBC_2.36 pthread_mutex_getprioceiling F +GLIBC_2.36 pthread_mutex_init F +GLIBC_2.36 pthread_mutex_lock F +GLIBC_2.36 pthread_mutex_setprioceiling F +GLIBC_2.36 pthread_mutex_timedlock F +GLIBC_2.36 pthread_mutex_trylock F +GLIBC_2.36 pthread_mutex_unlock F +GLIBC_2.36 pthread_mutexattr_destroy F +GLIBC_2.36 pthread_mutexattr_getprioceiling F +GLIBC_2.36 pthread_mutexattr_getprotocol F +GLIBC_2.36 pthread_mutexattr_getpshared F +GLIBC_2.36 pthread_mutexattr_getrobust F +GLIBC_2.36 pthread_mutexattr_gettype F +GLIBC_2.36 pthread_mutexattr_init F +GLIBC_2.36 pthread_mutexattr_setprioceiling F +GLIBC_2.36 pthread_mutexattr_setprotocol F +GLIBC_2.36 pthread_mutexattr_setpshared F +GLIBC_2.36 pthread_mutexattr_setrobust F +GLIBC_2.36 pthread_mutexattr_settype F +GLIBC_2.36 pthread_once F +GLIBC_2.36 pthread_rwlock_clockrdlock F +GLIBC_2.36 pthread_rwlock_clockwrlock F +GLIBC_2.36 pthread_rwlock_destroy F +GLIBC_2.36 pthread_rwlock_init F +GLIBC_2.36 pthread_rwlock_rdlock F +GLIBC_2.36 pthread_rwlock_timedrdlock F +GLIBC_2.36 pthread_rwlock_timedwrlock F +GLIBC_2.36 pthread_rwlock_tryrdlock F +GLIBC_2.36 pthread_rwlock_trywrlock F +GLIBC_2.36 pthread_rwlock_unlock F +GLIBC_2.36 pthread_rwlock_wrlock F +GLIBC_2.36 pthread_rwlockattr_destroy F +GLIBC_2.36 pthread_rwlockattr_getkind_np F +GLIBC_2.36 pthread_rwlockattr_getpshared F +GLIBC_2.36 pthread_rwlockattr_init F +GLIBC_2.36 pthread_rwlockattr_setkind_np F +GLIBC_2.36 pthread_rwlockattr_setpshared F +GLIBC_2.36 pthread_self F +GLIBC_2.36 pthread_setaffinity_np F +GLIBC_2.36 pthread_setattr_default_np F +GLIBC_2.36 pthread_setcancelstate F +GLIBC_2.36 pthread_setcanceltype F +GLIBC_2.36 pthread_setconcurrency F +GLIBC_2.36 pthread_setname_np F +GLIBC_2.36 pthread_setschedparam F +GLIBC_2.36 pthread_setschedprio F +GLIBC_2.36 pthread_setspecific F +GLIBC_2.36 pthread_sigmask F +GLIBC_2.36 pthread_sigqueue F +GLIBC_2.36 pthread_spin_destroy F +GLIBC_2.36 pthread_spin_init F +GLIBC_2.36 pthread_spin_lock F +GLIBC_2.36 pthread_spin_trylock F +GLIBC_2.36 pthread_spin_unlock F +GLIBC_2.36 pthread_testcancel F +GLIBC_2.36 pthread_timedjoin_np F +GLIBC_2.36 pthread_tryjoin_np F +GLIBC_2.36 ptrace F +GLIBC_2.36 ptsname F +GLIBC_2.36 ptsname_r F +GLIBC_2.36 putc F +GLIBC_2.36 putc_unlocked F +GLIBC_2.36 putchar F +GLIBC_2.36 putchar_unlocked F +GLIBC_2.36 putenv F +GLIBC_2.36 putgrent F +GLIBC_2.36 putpwent F +GLIBC_2.36 puts F +GLIBC_2.36 putsgent F +GLIBC_2.36 putspent F +GLIBC_2.36 pututline F +GLIBC_2.36 pututxline F +GLIBC_2.36 putw F +GLIBC_2.36 putwc F +GLIBC_2.36 putwc_unlocked F +GLIBC_2.36 putwchar F +GLIBC_2.36 putwchar_unlocked F +GLIBC_2.36 pvalloc F +GLIBC_2.36 pwrite F +GLIBC_2.36 pwrite64 F +GLIBC_2.36 pwritev F +GLIBC_2.36 pwritev2 F +GLIBC_2.36 pwritev64 F +GLIBC_2.36 pwritev64v2 F +GLIBC_2.36 qecvt F +GLIBC_2.36 qecvt_r F +GLIBC_2.36 qfcvt F +GLIBC_2.36 qfcvt_r F +GLIBC_2.36 qgcvt F +GLIBC_2.36 qsort F +GLIBC_2.36 qsort_r F +GLIBC_2.36 quick_exit F +GLIBC_2.36 quotactl F +GLIBC_2.36 raise F +GLIBC_2.36 rand F +GLIBC_2.36 rand_r F +GLIBC_2.36 random F +GLIBC_2.36 random_r F +GLIBC_2.36 rawmemchr F +GLIBC_2.36 rcmd F +GLIBC_2.36 rcmd_af F +GLIBC_2.36 re_comp F +GLIBC_2.36 re_compile_fastmap F +GLIBC_2.36 re_compile_pattern F +GLIBC_2.36 re_exec F +GLIBC_2.36 re_match F +GLIBC_2.36 re_match_2 F +GLIBC_2.36 re_search F +GLIBC_2.36 re_search_2 F +GLIBC_2.36 re_set_registers F +GLIBC_2.36 re_set_syntax F +GLIBC_2.36 re_syntax_options D 0x8 +GLIBC_2.36 read F +GLIBC_2.36 readahead F +GLIBC_2.36 readdir F +GLIBC_2.36 readdir64 F +GLIBC_2.36 readdir64_r F +GLIBC_2.36 readdir_r F +GLIBC_2.36 readlink F +GLIBC_2.36 readlinkat F +GLIBC_2.36 readv F +GLIBC_2.36 realloc F +GLIBC_2.36 reallocarray F +GLIBC_2.36 realpath F +GLIBC_2.36 reboot F +GLIBC_2.36 recv F +GLIBC_2.36 recvfrom F +GLIBC_2.36 recvmmsg F +GLIBC_2.36 recvmsg F +GLIBC_2.36 regcomp F +GLIBC_2.36 regerror F +GLIBC_2.36 regexec F +GLIBC_2.36 regfree F +GLIBC_2.36 register_printf_function F +GLIBC_2.36 register_printf_modifier F +GLIBC_2.36 register_printf_specifier F +GLIBC_2.36 register_printf_type F +GLIBC_2.36 remap_file_pages F +GLIBC_2.36 remove F +GLIBC_2.36 removexattr F +GLIBC_2.36 remque F +GLIBC_2.36 rename F +GLIBC_2.36 renameat F +GLIBC_2.36 renameat2 F +GLIBC_2.36 res_dnok F +GLIBC_2.36 res_hnok F +GLIBC_2.36 res_mailok F +GLIBC_2.36 res_mkquery F +GLIBC_2.36 res_nmkquery F +GLIBC_2.36 res_nquery F +GLIBC_2.36 res_nquerydomain F +GLIBC_2.36 res_nsearch F +GLIBC_2.36 res_nsend F +GLIBC_2.36 res_ownok F +GLIBC_2.36 res_query F +GLIBC_2.36 res_querydomain F +GLIBC_2.36 res_search F +GLIBC_2.36 res_send F +GLIBC_2.36 revoke F +GLIBC_2.36 rewind F +GLIBC_2.36 rewinddir F +GLIBC_2.36 rexec F +GLIBC_2.36 rexec_af F +GLIBC_2.36 rexecoptions D 0x4 +GLIBC_2.36 rindex F +GLIBC_2.36 rmdir F +GLIBC_2.36 rpmatch F +GLIBC_2.36 rresvport F +GLIBC_2.36 rresvport_af F +GLIBC_2.36 ruserok F +GLIBC_2.36 ruserok_af F +GLIBC_2.36 ruserpass F +GLIBC_2.36 sbrk F +GLIBC_2.36 scalbn F +GLIBC_2.36 scalbnf F +GLIBC_2.36 scalbnl F +GLIBC_2.36 scandir F +GLIBC_2.36 scandir64 F +GLIBC_2.36 scandirat F +GLIBC_2.36 scandirat64 F +GLIBC_2.36 scanf F +GLIBC_2.36 sched_get_priority_max F +GLIBC_2.36 sched_get_priority_min F +GLIBC_2.36 sched_getaffinity F +GLIBC_2.36 sched_getcpu F +GLIBC_2.36 sched_getparam F +GLIBC_2.36 sched_getscheduler F +GLIBC_2.36 sched_rr_get_interval F +GLIBC_2.36 sched_setaffinity F +GLIBC_2.36 sched_setparam F +GLIBC_2.36 sched_setscheduler F +GLIBC_2.36 sched_yield F +GLIBC_2.36 secure_getenv F +GLIBC_2.36 seed48 F +GLIBC_2.36 seed48_r F +GLIBC_2.36 seekdir F +GLIBC_2.36 select F +GLIBC_2.36 sem_clockwait F +GLIBC_2.36 sem_close F +GLIBC_2.36 sem_destroy F +GLIBC_2.36 sem_getvalue F +GLIBC_2.36 sem_init F +GLIBC_2.36 sem_open F +GLIBC_2.36 sem_post F +GLIBC_2.36 sem_timedwait F +GLIBC_2.36 sem_trywait F +GLIBC_2.36 sem_unlink F +GLIBC_2.36 sem_wait F +GLIBC_2.36 semctl F +GLIBC_2.36 semget F +GLIBC_2.36 semop F +GLIBC_2.36 semtimedop F +GLIBC_2.36 send F +GLIBC_2.36 sendfile F +GLIBC_2.36 sendfile64 F +GLIBC_2.36 sendmmsg F +GLIBC_2.36 sendmsg F +GLIBC_2.36 sendto F +GLIBC_2.36 setaliasent F +GLIBC_2.36 setbuf F +GLIBC_2.36 setbuffer F +GLIBC_2.36 setcontext F +GLIBC_2.36 setdomainname F +GLIBC_2.36 setegid F +GLIBC_2.36 setenv F +GLIBC_2.36 seteuid F +GLIBC_2.36 setfsent F +GLIBC_2.36 setfsgid F +GLIBC_2.36 setfsuid F +GLIBC_2.36 setgid F +GLIBC_2.36 setgrent F +GLIBC_2.36 setgroups F +GLIBC_2.36 sethostent F +GLIBC_2.36 sethostid F +GLIBC_2.36 sethostname F +GLIBC_2.36 setipv4sourcefilter F +GLIBC_2.36 setitimer F +GLIBC_2.36 setjmp F +GLIBC_2.36 setlinebuf F +GLIBC_2.36 setlocale F +GLIBC_2.36 setlogin F +GLIBC_2.36 setlogmask F +GLIBC_2.36 setmntent F +GLIBC_2.36 setnetent F +GLIBC_2.36 setnetgrent F +GLIBC_2.36 setns F +GLIBC_2.36 setpgid F +GLIBC_2.36 setpgrp F +GLIBC_2.36 setpriority F +GLIBC_2.36 setprotoent F +GLIBC_2.36 setpwent F +GLIBC_2.36 setregid F +GLIBC_2.36 setresgid F +GLIBC_2.36 setresuid F +GLIBC_2.36 setreuid F +GLIBC_2.36 setrlimit F +GLIBC_2.36 setrlimit64 F +GLIBC_2.36 setrpcent F +GLIBC_2.36 setservent F +GLIBC_2.36 setsgent F +GLIBC_2.36 setsid F +GLIBC_2.36 setsockopt F +GLIBC_2.36 setsourcefilter F +GLIBC_2.36 setspent F +GLIBC_2.36 setstate F +GLIBC_2.36 setstate_r F +GLIBC_2.36 settimeofday F +GLIBC_2.36 setttyent F +GLIBC_2.36 setuid F +GLIBC_2.36 setusershell F +GLIBC_2.36 setutent F +GLIBC_2.36 setutxent F +GLIBC_2.36 setvbuf F +GLIBC_2.36 setxattr F +GLIBC_2.36 sgetsgent F +GLIBC_2.36 sgetsgent_r F +GLIBC_2.36 sgetspent F +GLIBC_2.36 sgetspent_r F +GLIBC_2.36 shm_open F +GLIBC_2.36 shm_unlink F +GLIBC_2.36 shmat F +GLIBC_2.36 shmctl F +GLIBC_2.36 shmdt F +GLIBC_2.36 shmget F +GLIBC_2.36 shutdown F +GLIBC_2.36 sigabbrev_np F +GLIBC_2.36 sigaction F +GLIBC_2.36 sigaddset F +GLIBC_2.36 sigaltstack F +GLIBC_2.36 sigandset F +GLIBC_2.36 sigblock F +GLIBC_2.36 sigdelset F +GLIBC_2.36 sigdescr_np F +GLIBC_2.36 sigemptyset F +GLIBC_2.36 sigfillset F +GLIBC_2.36 siggetmask F +GLIBC_2.36 sighold F +GLIBC_2.36 sigignore F +GLIBC_2.36 siginterrupt F +GLIBC_2.36 sigisemptyset F +GLIBC_2.36 sigismember F +GLIBC_2.36 siglongjmp F +GLIBC_2.36 signal F +GLIBC_2.36 signalfd F +GLIBC_2.36 sigorset F +GLIBC_2.36 sigpause F +GLIBC_2.36 sigpending F +GLIBC_2.36 sigprocmask F +GLIBC_2.36 sigqueue F +GLIBC_2.36 sigrelse F +GLIBC_2.36 sigreturn F +GLIBC_2.36 sigset F +GLIBC_2.36 sigsetmask F +GLIBC_2.36 sigstack F +GLIBC_2.36 sigsuspend F +GLIBC_2.36 sigtimedwait F +GLIBC_2.36 sigwait F +GLIBC_2.36 sigwaitinfo F +GLIBC_2.36 sleep F +GLIBC_2.36 snprintf F +GLIBC_2.36 sockatmark F +GLIBC_2.36 socket F +GLIBC_2.36 socketpair F +GLIBC_2.36 splice F +GLIBC_2.36 sprintf F +GLIBC_2.36 sprofil F +GLIBC_2.36 srand F +GLIBC_2.36 srand48 F +GLIBC_2.36 srand48_r F +GLIBC_2.36 srandom F +GLIBC_2.36 srandom_r F +GLIBC_2.36 sscanf F +GLIBC_2.36 ssignal F +GLIBC_2.36 stat F +GLIBC_2.36 stat64 F +GLIBC_2.36 statfs F +GLIBC_2.36 statfs64 F +GLIBC_2.36 statvfs F +GLIBC_2.36 statvfs64 F +GLIBC_2.36 statx F +GLIBC_2.36 stderr D 0x8 +GLIBC_2.36 stdin D 0x8 +GLIBC_2.36 stdout D 0x8 +GLIBC_2.36 stpcpy F +GLIBC_2.36 stpncpy F +GLIBC_2.36 strcasecmp F +GLIBC_2.36 strcasecmp_l F +GLIBC_2.36 strcasestr F +GLIBC_2.36 strcat F +GLIBC_2.36 strchr F +GLIBC_2.36 strchrnul F +GLIBC_2.36 strcmp F +GLIBC_2.36 strcoll F +GLIBC_2.36 strcoll_l F +GLIBC_2.36 strcpy F +GLIBC_2.36 strcspn F +GLIBC_2.36 strdup F +GLIBC_2.36 strerror F +GLIBC_2.36 strerror_l F +GLIBC_2.36 strerror_r F +GLIBC_2.36 strerrordesc_np F +GLIBC_2.36 strerrorname_np F +GLIBC_2.36 strfmon F +GLIBC_2.36 strfmon_l F +GLIBC_2.36 strfromd F +GLIBC_2.36 strfromf F +GLIBC_2.36 strfromf128 F +GLIBC_2.36 strfromf32 F +GLIBC_2.36 strfromf32x F +GLIBC_2.36 strfromf64 F +GLIBC_2.36 strfromf64x F +GLIBC_2.36 strfroml F +GLIBC_2.36 strfry F +GLIBC_2.36 strftime F +GLIBC_2.36 strftime_l F +GLIBC_2.36 strlen F +GLIBC_2.36 strncasecmp F +GLIBC_2.36 strncasecmp_l F +GLIBC_2.36 strncat F +GLIBC_2.36 strncmp F +GLIBC_2.36 strncpy F +GLIBC_2.36 strndup F +GLIBC_2.36 strnlen F +GLIBC_2.36 strpbrk F +GLIBC_2.36 strptime F +GLIBC_2.36 strptime_l F +GLIBC_2.36 strrchr F +GLIBC_2.36 strsep F +GLIBC_2.36 strsignal F +GLIBC_2.36 strspn F +GLIBC_2.36 strstr F +GLIBC_2.36 strtod F +GLIBC_2.36 strtod_l F +GLIBC_2.36 strtof F +GLIBC_2.36 strtof128 F +GLIBC_2.36 strtof128_l F +GLIBC_2.36 strtof32 F +GLIBC_2.36 strtof32_l F +GLIBC_2.36 strtof32x F +GLIBC_2.36 strtof32x_l F +GLIBC_2.36 strtof64 F +GLIBC_2.36 strtof64_l F +GLIBC_2.36 strtof64x F +GLIBC_2.36 strtof64x_l F +GLIBC_2.36 strtof_l F +GLIBC_2.36 strtoimax F +GLIBC_2.36 strtok F +GLIBC_2.36 strtok_r F +GLIBC_2.36 strtol F +GLIBC_2.36 strtol_l F +GLIBC_2.36 strtold F +GLIBC_2.36 strtold_l F +GLIBC_2.36 strtoll F +GLIBC_2.36 strtoll_l F +GLIBC_2.36 strtoq F +GLIBC_2.36 strtoul F +GLIBC_2.36 strtoul_l F +GLIBC_2.36 strtoull F +GLIBC_2.36 strtoull_l F +GLIBC_2.36 strtoumax F +GLIBC_2.36 strtouq F +GLIBC_2.36 strverscmp F +GLIBC_2.36 strxfrm F +GLIBC_2.36 strxfrm_l F +GLIBC_2.36 stty F +GLIBC_2.36 swab F +GLIBC_2.36 swapcontext F +GLIBC_2.36 swapoff F +GLIBC_2.36 swapon F +GLIBC_2.36 swprintf F +GLIBC_2.36 swscanf F +GLIBC_2.36 symlink F +GLIBC_2.36 symlinkat F +GLIBC_2.36 sync F +GLIBC_2.36 sync_file_range F +GLIBC_2.36 syncfs F +GLIBC_2.36 syscall F +GLIBC_2.36 sysconf F +GLIBC_2.36 sysinfo F +GLIBC_2.36 syslog F +GLIBC_2.36 system F +GLIBC_2.36 sysv_signal F +GLIBC_2.36 tcdrain F +GLIBC_2.36 tcflow F +GLIBC_2.36 tcflush F +GLIBC_2.36 tcgetattr F +GLIBC_2.36 tcgetpgrp F +GLIBC_2.36 tcgetsid F +GLIBC_2.36 tcsendbreak F +GLIBC_2.36 tcsetattr F +GLIBC_2.36 tcsetpgrp F +GLIBC_2.36 tdelete F +GLIBC_2.36 tdestroy F +GLIBC_2.36 tee F +GLIBC_2.36 telldir F +GLIBC_2.36 tempnam F +GLIBC_2.36 textdomain F +GLIBC_2.36 tfind F +GLIBC_2.36 tgkill F +GLIBC_2.36 thrd_create F +GLIBC_2.36 thrd_current F +GLIBC_2.36 thrd_detach F +GLIBC_2.36 thrd_equal F +GLIBC_2.36 thrd_exit F +GLIBC_2.36 thrd_join F +GLIBC_2.36 thrd_sleep F +GLIBC_2.36 thrd_yield F +GLIBC_2.36 time F +GLIBC_2.36 timegm F +GLIBC_2.36 timelocal F +GLIBC_2.36 timer_create F +GLIBC_2.36 timer_delete F +GLIBC_2.36 timer_getoverrun F +GLIBC_2.36 timer_gettime F +GLIBC_2.36 timer_settime F +GLIBC_2.36 timerfd_create F +GLIBC_2.36 timerfd_gettime F +GLIBC_2.36 timerfd_settime F +GLIBC_2.36 times F +GLIBC_2.36 timespec_get F +GLIBC_2.36 timespec_getres F +GLIBC_2.36 timezone D 0x8 +GLIBC_2.36 tmpfile F +GLIBC_2.36 tmpfile64 F +GLIBC_2.36 tmpnam F +GLIBC_2.36 tmpnam_r F +GLIBC_2.36 toascii F +GLIBC_2.36 tolower F +GLIBC_2.36 tolower_l F +GLIBC_2.36 toupper F +GLIBC_2.36 toupper_l F +GLIBC_2.36 towctrans F +GLIBC_2.36 towctrans_l F +GLIBC_2.36 towlower F +GLIBC_2.36 towlower_l F +GLIBC_2.36 towupper F +GLIBC_2.36 towupper_l F +GLIBC_2.36 truncate F +GLIBC_2.36 truncate64 F +GLIBC_2.36 tsearch F +GLIBC_2.36 tss_create F +GLIBC_2.36 tss_delete F +GLIBC_2.36 tss_get F +GLIBC_2.36 tss_set F +GLIBC_2.36 ttyname F +GLIBC_2.36 ttyname_r F +GLIBC_2.36 ttyslot F +GLIBC_2.36 twalk F +GLIBC_2.36 twalk_r F +GLIBC_2.36 tzname D 0x10 +GLIBC_2.36 tzset F +GLIBC_2.36 ualarm F +GLIBC_2.36 ulckpwdf F +GLIBC_2.36 ulimit F +GLIBC_2.36 umask F +GLIBC_2.36 umount F +GLIBC_2.36 umount2 F +GLIBC_2.36 uname F +GLIBC_2.36 ungetc F +GLIBC_2.36 ungetwc F +GLIBC_2.36 unlink F +GLIBC_2.36 unlinkat F +GLIBC_2.36 unlockpt F +GLIBC_2.36 unsetenv F +GLIBC_2.36 unshare F +GLIBC_2.36 updwtmp F +GLIBC_2.36 updwtmpx F +GLIBC_2.36 uselocale F +GLIBC_2.36 usleep F +GLIBC_2.36 utime F +GLIBC_2.36 utimensat F +GLIBC_2.36 utimes F +GLIBC_2.36 utmpname F +GLIBC_2.36 utmpxname F +GLIBC_2.36 valloc F +GLIBC_2.36 vasprintf F +GLIBC_2.36 vdprintf F +GLIBC_2.36 verr F +GLIBC_2.36 verrx F +GLIBC_2.36 versionsort F +GLIBC_2.36 versionsort64 F +GLIBC_2.36 vfork F +GLIBC_2.36 vfprintf F +GLIBC_2.36 vfscanf F +GLIBC_2.36 vfwprintf F +GLIBC_2.36 vfwscanf F +GLIBC_2.36 vhangup F +GLIBC_2.36 vlimit F +GLIBC_2.36 vmsplice F +GLIBC_2.36 vprintf F +GLIBC_2.36 vscanf F +GLIBC_2.36 vsnprintf F +GLIBC_2.36 vsprintf F +GLIBC_2.36 vsscanf F +GLIBC_2.36 vswprintf F +GLIBC_2.36 vswscanf F +GLIBC_2.36 vsyslog F +GLIBC_2.36 vwarn F +GLIBC_2.36 vwarnx F +GLIBC_2.36 vwprintf F +GLIBC_2.36 vwscanf F +GLIBC_2.36 wait F +GLIBC_2.36 wait3 F +GLIBC_2.36 wait4 F +GLIBC_2.36 waitid F +GLIBC_2.36 waitpid F +GLIBC_2.36 warn F +GLIBC_2.36 warnx F +GLIBC_2.36 wcpcpy F +GLIBC_2.36 wcpncpy F +GLIBC_2.36 wcrtomb F +GLIBC_2.36 wcscasecmp F +GLIBC_2.36 wcscasecmp_l F +GLIBC_2.36 wcscat F +GLIBC_2.36 wcschr F +GLIBC_2.36 wcschrnul F +GLIBC_2.36 wcscmp F +GLIBC_2.36 wcscoll F +GLIBC_2.36 wcscoll_l F +GLIBC_2.36 wcscpy F +GLIBC_2.36 wcscspn F +GLIBC_2.36 wcsdup F +GLIBC_2.36 wcsftime F +GLIBC_2.36 wcsftime_l F +GLIBC_2.36 wcslen F +GLIBC_2.36 wcsncasecmp F +GLIBC_2.36 wcsncasecmp_l F +GLIBC_2.36 wcsncat F +GLIBC_2.36 wcsncmp F +GLIBC_2.36 wcsncpy F +GLIBC_2.36 wcsnlen F +GLIBC_2.36 wcsnrtombs F +GLIBC_2.36 wcspbrk F +GLIBC_2.36 wcsrchr F +GLIBC_2.36 wcsrtombs F +GLIBC_2.36 wcsspn F +GLIBC_2.36 wcsstr F +GLIBC_2.36 wcstod F +GLIBC_2.36 wcstod_l F +GLIBC_2.36 wcstof F +GLIBC_2.36 wcstof128 F +GLIBC_2.36 wcstof128_l F +GLIBC_2.36 wcstof32 F +GLIBC_2.36 wcstof32_l F +GLIBC_2.36 wcstof32x F +GLIBC_2.36 wcstof32x_l F +GLIBC_2.36 wcstof64 F +GLIBC_2.36 wcstof64_l F +GLIBC_2.36 wcstof64x F +GLIBC_2.36 wcstof64x_l F +GLIBC_2.36 wcstof_l F +GLIBC_2.36 wcstoimax F +GLIBC_2.36 wcstok F +GLIBC_2.36 wcstol F +GLIBC_2.36 wcstol_l F +GLIBC_2.36 wcstold F +GLIBC_2.36 wcstold_l F +GLIBC_2.36 wcstoll F +GLIBC_2.36 wcstoll_l F +GLIBC_2.36 wcstombs F +GLIBC_2.36 wcstoq F +GLIBC_2.36 wcstoul F +GLIBC_2.36 wcstoul_l F +GLIBC_2.36 wcstoull F +GLIBC_2.36 wcstoull_l F +GLIBC_2.36 wcstoumax F +GLIBC_2.36 wcstouq F +GLIBC_2.36 wcswcs F +GLIBC_2.36 wcswidth F +GLIBC_2.36 wcsxfrm F +GLIBC_2.36 wcsxfrm_l F +GLIBC_2.36 wctob F +GLIBC_2.36 wctomb F +GLIBC_2.36 wctrans F +GLIBC_2.36 wctrans_l F +GLIBC_2.36 wctype F +GLIBC_2.36 wctype_l F +GLIBC_2.36 wcwidth F +GLIBC_2.36 wmemchr F +GLIBC_2.36 wmemcmp F +GLIBC_2.36 wmemcpy F +GLIBC_2.36 wmemmove F +GLIBC_2.36 wmempcpy F +GLIBC_2.36 wmemset F +GLIBC_2.36 wordexp F +GLIBC_2.36 wordfree F +GLIBC_2.36 wprintf F +GLIBC_2.36 write F +GLIBC_2.36 writev F +GLIBC_2.36 wscanf F diff --git a/sysdeps/unix/sysv/linux/loongarch/lp64/libc_malloc_debug.abilist b/sysdeps/unix/sysv/linux/loongarch/lp64/libc_malloc_debug.abilist new file mode 100644 index 0000000000..6ddfd162b3 --- /dev/null +++ b/sysdeps/unix/sysv/linux/loongarch/lp64/libc_malloc_debug.abilist @@ -0,0 +1,26 @@ +GLIBC_2.36 __free_hook D 0x8 +GLIBC_2.36 __malloc_hook D 0x8 +GLIBC_2.36 __memalign_hook D 0x8 +GLIBC_2.36 __realloc_hook D 0x8 +GLIBC_2.36 aligned_alloc F +GLIBC_2.36 calloc F +GLIBC_2.36 free F +GLIBC_2.36 mallinfo F +GLIBC_2.36 mallinfo2 F +GLIBC_2.36 malloc F +GLIBC_2.36 malloc_info F +GLIBC_2.36 malloc_stats F +GLIBC_2.36 malloc_trim F +GLIBC_2.36 malloc_usable_size F +GLIBC_2.36 mallopt F +GLIBC_2.36 mcheck F +GLIBC_2.36 mcheck_check_all F +GLIBC_2.36 mcheck_pedantic F +GLIBC_2.36 memalign F +GLIBC_2.36 mprobe F +GLIBC_2.36 mtrace F +GLIBC_2.36 muntrace F +GLIBC_2.36 posix_memalign F +GLIBC_2.36 pvalloc F +GLIBC_2.36 realloc F +GLIBC_2.36 valloc F diff --git a/sysdeps/unix/sysv/linux/loongarch/lp64/libcrypt.abilist b/sysdeps/unix/sysv/linux/loongarch/lp64/libcrypt.abilist new file mode 100644 index 0000000000..4d4332dab7 --- /dev/null +++ b/sysdeps/unix/sysv/linux/loongarch/lp64/libcrypt.abilist @@ -0,0 +1,2 @@ +GLIBC_2.36 crypt F +GLIBC_2.36 crypt_r F diff --git a/sysdeps/unix/sysv/linux/loongarch/lp64/libm.abilist b/sysdeps/unix/sysv/linux/loongarch/lp64/libm.abilist new file mode 100644 index 0000000000..b3dbd00001 --- /dev/null +++ b/sysdeps/unix/sysv/linux/loongarch/lp64/libm.abilist @@ -0,0 +1,1030 @@ +GLIBC_2.36 __clog10 F +GLIBC_2.36 __clog10f F +GLIBC_2.36 __clog10l F +GLIBC_2.36 __finite F +GLIBC_2.36 __finitef F +GLIBC_2.36 __finitel F +GLIBC_2.36 __fpclassify F +GLIBC_2.36 __fpclassifyf F +GLIBC_2.36 __fpclassifyl F +GLIBC_2.36 __iseqsig F +GLIBC_2.36 __iseqsigf F +GLIBC_2.36 __iseqsigl F +GLIBC_2.36 __issignaling F +GLIBC_2.36 __issignalingf F +GLIBC_2.36 __issignalingl F +GLIBC_2.36 __signbit F +GLIBC_2.36 __signbitf F +GLIBC_2.36 __signbitl F +GLIBC_2.36 __signgam D 0x4 +GLIBC_2.36 acos F +GLIBC_2.36 acosf F +GLIBC_2.36 acosf128 F +GLIBC_2.36 acosf32 F +GLIBC_2.36 acosf32x F +GLIBC_2.36 acosf64 F +GLIBC_2.36 acosf64x F +GLIBC_2.36 acosh F +GLIBC_2.36 acoshf F +GLIBC_2.36 acoshf128 F +GLIBC_2.36 acoshf32 F +GLIBC_2.36 acoshf32x F +GLIBC_2.36 acoshf64 F +GLIBC_2.36 acoshf64x F +GLIBC_2.36 acoshl F +GLIBC_2.36 acosl F +GLIBC_2.36 asin F +GLIBC_2.36 asinf F +GLIBC_2.36 asinf128 F +GLIBC_2.36 asinf32 F +GLIBC_2.36 asinf32x F +GLIBC_2.36 asinf64 F +GLIBC_2.36 asinf64x F +GLIBC_2.36 asinh F +GLIBC_2.36 asinhf F +GLIBC_2.36 asinhf128 F +GLIBC_2.36 asinhf32 F +GLIBC_2.36 asinhf32x F +GLIBC_2.36 asinhf64 F +GLIBC_2.36 asinhf64x F +GLIBC_2.36 asinhl F +GLIBC_2.36 asinl F +GLIBC_2.36 atan F +GLIBC_2.36 atan2 F +GLIBC_2.36 atan2f F +GLIBC_2.36 atan2f128 F +GLIBC_2.36 atan2f32 F +GLIBC_2.36 atan2f32x F +GLIBC_2.36 atan2f64 F +GLIBC_2.36 atan2f64x F +GLIBC_2.36 atan2l F +GLIBC_2.36 atanf F +GLIBC_2.36 atanf128 F +GLIBC_2.36 atanf32 F +GLIBC_2.36 atanf32x F +GLIBC_2.36 atanf64 F +GLIBC_2.36 atanf64x F +GLIBC_2.36 atanh F +GLIBC_2.36 atanhf F +GLIBC_2.36 atanhf128 F +GLIBC_2.36 atanhf32 F +GLIBC_2.36 atanhf32x F +GLIBC_2.36 atanhf64 F +GLIBC_2.36 atanhf64x F +GLIBC_2.36 atanhl F +GLIBC_2.36 atanl F +GLIBC_2.36 cabs F +GLIBC_2.36 cabsf F +GLIBC_2.36 cabsf128 F +GLIBC_2.36 cabsf32 F +GLIBC_2.36 cabsf32x F +GLIBC_2.36 cabsf64 F +GLIBC_2.36 cabsf64x F +GLIBC_2.36 cabsl F +GLIBC_2.36 cacos F +GLIBC_2.36 cacosf F +GLIBC_2.36 cacosf128 F +GLIBC_2.36 cacosf32 F +GLIBC_2.36 cacosf32x F +GLIBC_2.36 cacosf64 F +GLIBC_2.36 cacosf64x F +GLIBC_2.36 cacosh F +GLIBC_2.36 cacoshf F +GLIBC_2.36 cacoshf128 F +GLIBC_2.36 cacoshf32 F +GLIBC_2.36 cacoshf32x F +GLIBC_2.36 cacoshf64 F +GLIBC_2.36 cacoshf64x F +GLIBC_2.36 cacoshl F +GLIBC_2.36 cacosl F +GLIBC_2.36 canonicalize F +GLIBC_2.36 canonicalizef F +GLIBC_2.36 canonicalizef128 F +GLIBC_2.36 canonicalizef32 F +GLIBC_2.36 canonicalizef32x F +GLIBC_2.36 canonicalizef64 F +GLIBC_2.36 canonicalizef64x F +GLIBC_2.36 canonicalizel F +GLIBC_2.36 carg F +GLIBC_2.36 cargf F +GLIBC_2.36 cargf128 F +GLIBC_2.36 cargf32 F +GLIBC_2.36 cargf32x F +GLIBC_2.36 cargf64 F +GLIBC_2.36 cargf64x F +GLIBC_2.36 cargl F +GLIBC_2.36 casin F +GLIBC_2.36 casinf F +GLIBC_2.36 casinf128 F +GLIBC_2.36 casinf32 F +GLIBC_2.36 casinf32x F +GLIBC_2.36 casinf64 F +GLIBC_2.36 casinf64x F +GLIBC_2.36 casinh F +GLIBC_2.36 casinhf F +GLIBC_2.36 casinhf128 F +GLIBC_2.36 casinhf32 F +GLIBC_2.36 casinhf32x F +GLIBC_2.36 casinhf64 F +GLIBC_2.36 casinhf64x F +GLIBC_2.36 casinhl F +GLIBC_2.36 casinl F +GLIBC_2.36 catan F +GLIBC_2.36 catanf F +GLIBC_2.36 catanf128 F +GLIBC_2.36 catanf32 F +GLIBC_2.36 catanf32x F +GLIBC_2.36 catanf64 F +GLIBC_2.36 catanf64x F +GLIBC_2.36 catanh F +GLIBC_2.36 catanhf F +GLIBC_2.36 catanhf128 F +GLIBC_2.36 catanhf32 F +GLIBC_2.36 catanhf32x F +GLIBC_2.36 catanhf64 F +GLIBC_2.36 catanhf64x F +GLIBC_2.36 catanhl F +GLIBC_2.36 catanl F +GLIBC_2.36 cbrt F +GLIBC_2.36 cbrtf F +GLIBC_2.36 cbrtf128 F +GLIBC_2.36 cbrtf32 F +GLIBC_2.36 cbrtf32x F +GLIBC_2.36 cbrtf64 F +GLIBC_2.36 cbrtf64x F +GLIBC_2.36 cbrtl F +GLIBC_2.36 ccos F +GLIBC_2.36 ccosf F +GLIBC_2.36 ccosf128 F +GLIBC_2.36 ccosf32 F +GLIBC_2.36 ccosf32x F +GLIBC_2.36 ccosf64 F +GLIBC_2.36 ccosf64x F +GLIBC_2.36 ccosh F +GLIBC_2.36 ccoshf F +GLIBC_2.36 ccoshf128 F +GLIBC_2.36 ccoshf32 F +GLIBC_2.36 ccoshf32x F +GLIBC_2.36 ccoshf64 F +GLIBC_2.36 ccoshf64x F +GLIBC_2.36 ccoshl F +GLIBC_2.36 ccosl F +GLIBC_2.36 ceil F +GLIBC_2.36 ceilf F +GLIBC_2.36 ceilf128 F +GLIBC_2.36 ceilf32 F +GLIBC_2.36 ceilf32x F +GLIBC_2.36 ceilf64 F +GLIBC_2.36 ceilf64x F +GLIBC_2.36 ceill F +GLIBC_2.36 cexp F +GLIBC_2.36 cexpf F +GLIBC_2.36 cexpf128 F +GLIBC_2.36 cexpf32 F +GLIBC_2.36 cexpf32x F +GLIBC_2.36 cexpf64 F +GLIBC_2.36 cexpf64x F +GLIBC_2.36 cexpl F +GLIBC_2.36 cimag F +GLIBC_2.36 cimagf F +GLIBC_2.36 cimagf128 F +GLIBC_2.36 cimagf32 F +GLIBC_2.36 cimagf32x F +GLIBC_2.36 cimagf64 F +GLIBC_2.36 cimagf64x F +GLIBC_2.36 cimagl F +GLIBC_2.36 clog F +GLIBC_2.36 clog10 F +GLIBC_2.36 clog10f F +GLIBC_2.36 clog10f128 F +GLIBC_2.36 clog10f32 F +GLIBC_2.36 clog10f32x F +GLIBC_2.36 clog10f64 F +GLIBC_2.36 clog10f64x F +GLIBC_2.36 clog10l F +GLIBC_2.36 clogf F +GLIBC_2.36 clogf128 F +GLIBC_2.36 clogf32 F +GLIBC_2.36 clogf32x F +GLIBC_2.36 clogf64 F +GLIBC_2.36 clogf64x F +GLIBC_2.36 clogl F +GLIBC_2.36 conj F +GLIBC_2.36 conjf F +GLIBC_2.36 conjf128 F +GLIBC_2.36 conjf32 F +GLIBC_2.36 conjf32x F +GLIBC_2.36 conjf64 F +GLIBC_2.36 conjf64x F +GLIBC_2.36 conjl F +GLIBC_2.36 copysign F +GLIBC_2.36 copysignf F +GLIBC_2.36 copysignf128 F +GLIBC_2.36 copysignf32 F +GLIBC_2.36 copysignf32x F +GLIBC_2.36 copysignf64 F +GLIBC_2.36 copysignf64x F +GLIBC_2.36 copysignl F +GLIBC_2.36 cos F +GLIBC_2.36 cosf F +GLIBC_2.36 cosf128 F +GLIBC_2.36 cosf32 F +GLIBC_2.36 cosf32x F +GLIBC_2.36 cosf64 F +GLIBC_2.36 cosf64x F +GLIBC_2.36 cosh F +GLIBC_2.36 coshf F +GLIBC_2.36 coshf128 F +GLIBC_2.36 coshf32 F +GLIBC_2.36 coshf32x F +GLIBC_2.36 coshf64 F +GLIBC_2.36 coshf64x F +GLIBC_2.36 coshl F +GLIBC_2.36 cosl F +GLIBC_2.36 cpow F +GLIBC_2.36 cpowf F +GLIBC_2.36 cpowf128 F +GLIBC_2.36 cpowf32 F +GLIBC_2.36 cpowf32x F +GLIBC_2.36 cpowf64 F +GLIBC_2.36 cpowf64x F +GLIBC_2.36 cpowl F +GLIBC_2.36 cproj F +GLIBC_2.36 cprojf F +GLIBC_2.36 cprojf128 F +GLIBC_2.36 cprojf32 F +GLIBC_2.36 cprojf32x F +GLIBC_2.36 cprojf64 F +GLIBC_2.36 cprojf64x F +GLIBC_2.36 cprojl F +GLIBC_2.36 creal F +GLIBC_2.36 crealf F +GLIBC_2.36 crealf128 F +GLIBC_2.36 crealf32 F +GLIBC_2.36 crealf32x F +GLIBC_2.36 crealf64 F +GLIBC_2.36 crealf64x F +GLIBC_2.36 creall F +GLIBC_2.36 csin F +GLIBC_2.36 csinf F +GLIBC_2.36 csinf128 F +GLIBC_2.36 csinf32 F +GLIBC_2.36 csinf32x F +GLIBC_2.36 csinf64 F +GLIBC_2.36 csinf64x F +GLIBC_2.36 csinh F +GLIBC_2.36 csinhf F +GLIBC_2.36 csinhf128 F +GLIBC_2.36 csinhf32 F +GLIBC_2.36 csinhf32x F +GLIBC_2.36 csinhf64 F +GLIBC_2.36 csinhf64x F +GLIBC_2.36 csinhl F +GLIBC_2.36 csinl F +GLIBC_2.36 csqrt F +GLIBC_2.36 csqrtf F +GLIBC_2.36 csqrtf128 F +GLIBC_2.36 csqrtf32 F +GLIBC_2.36 csqrtf32x F +GLIBC_2.36 csqrtf64 F +GLIBC_2.36 csqrtf64x F +GLIBC_2.36 csqrtl F +GLIBC_2.36 ctan F +GLIBC_2.36 ctanf F +GLIBC_2.36 ctanf128 F +GLIBC_2.36 ctanf32 F +GLIBC_2.36 ctanf32x F +GLIBC_2.36 ctanf64 F +GLIBC_2.36 ctanf64x F +GLIBC_2.36 ctanh F +GLIBC_2.36 ctanhf F +GLIBC_2.36 ctanhf128 F +GLIBC_2.36 ctanhf32 F +GLIBC_2.36 ctanhf32x F +GLIBC_2.36 ctanhf64 F +GLIBC_2.36 ctanhf64x F +GLIBC_2.36 ctanhl F +GLIBC_2.36 ctanl F +GLIBC_2.36 daddl F +GLIBC_2.36 ddivl F +GLIBC_2.36 dfmal F +GLIBC_2.36 dmull F +GLIBC_2.36 drem F +GLIBC_2.36 dremf F +GLIBC_2.36 dreml F +GLIBC_2.36 dsqrtl F +GLIBC_2.36 dsubl F +GLIBC_2.36 erf F +GLIBC_2.36 erfc F +GLIBC_2.36 erfcf F +GLIBC_2.36 erfcf128 F +GLIBC_2.36 erfcf32 F +GLIBC_2.36 erfcf32x F +GLIBC_2.36 erfcf64 F +GLIBC_2.36 erfcf64x F +GLIBC_2.36 erfcl F +GLIBC_2.36 erff F +GLIBC_2.36 erff128 F +GLIBC_2.36 erff32 F +GLIBC_2.36 erff32x F +GLIBC_2.36 erff64 F +GLIBC_2.36 erff64x F +GLIBC_2.36 erfl F +GLIBC_2.36 exp F +GLIBC_2.36 exp10 F +GLIBC_2.36 exp10f F +GLIBC_2.36 exp10f128 F +GLIBC_2.36 exp10f32 F +GLIBC_2.36 exp10f32x F +GLIBC_2.36 exp10f64 F +GLIBC_2.36 exp10f64x F +GLIBC_2.36 exp10l F +GLIBC_2.36 exp2 F +GLIBC_2.36 exp2f F +GLIBC_2.36 exp2f128 F +GLIBC_2.36 exp2f32 F +GLIBC_2.36 exp2f32x F +GLIBC_2.36 exp2f64 F +GLIBC_2.36 exp2f64x F +GLIBC_2.36 exp2l F +GLIBC_2.36 expf F +GLIBC_2.36 expf128 F +GLIBC_2.36 expf32 F +GLIBC_2.36 expf32x F +GLIBC_2.36 expf64 F +GLIBC_2.36 expf64x F +GLIBC_2.36 expl F +GLIBC_2.36 expm1 F +GLIBC_2.36 expm1f F +GLIBC_2.36 expm1f128 F +GLIBC_2.36 expm1f32 F +GLIBC_2.36 expm1f32x F +GLIBC_2.36 expm1f64 F +GLIBC_2.36 expm1f64x F +GLIBC_2.36 expm1l F +GLIBC_2.36 f32addf128 F +GLIBC_2.36 f32addf32x F +GLIBC_2.36 f32addf64 F +GLIBC_2.36 f32addf64x F +GLIBC_2.36 f32divf128 F +GLIBC_2.36 f32divf32x F +GLIBC_2.36 f32divf64 F +GLIBC_2.36 f32divf64x F +GLIBC_2.36 f32fmaf128 F +GLIBC_2.36 f32fmaf32x F +GLIBC_2.36 f32fmaf64 F +GLIBC_2.36 f32fmaf64x F +GLIBC_2.36 f32mulf128 F +GLIBC_2.36 f32mulf32x F +GLIBC_2.36 f32mulf64 F +GLIBC_2.36 f32mulf64x F +GLIBC_2.36 f32sqrtf128 F +GLIBC_2.36 f32sqrtf32x F +GLIBC_2.36 f32sqrtf64 F +GLIBC_2.36 f32sqrtf64x F +GLIBC_2.36 f32subf128 F +GLIBC_2.36 f32subf32x F +GLIBC_2.36 f32subf64 F +GLIBC_2.36 f32subf64x F +GLIBC_2.36 f32xaddf128 F +GLIBC_2.36 f32xaddf64 F +GLIBC_2.36 f32xaddf64x F +GLIBC_2.36 f32xdivf128 F +GLIBC_2.36 f32xdivf64 F +GLIBC_2.36 f32xdivf64x F +GLIBC_2.36 f32xfmaf128 F +GLIBC_2.36 f32xfmaf64 F +GLIBC_2.36 f32xfmaf64x F +GLIBC_2.36 f32xmulf128 F +GLIBC_2.36 f32xmulf64 F +GLIBC_2.36 f32xmulf64x F +GLIBC_2.36 f32xsqrtf128 F +GLIBC_2.36 f32xsqrtf64 F +GLIBC_2.36 f32xsqrtf64x F +GLIBC_2.36 f32xsubf128 F +GLIBC_2.36 f32xsubf64 F +GLIBC_2.36 f32xsubf64x F +GLIBC_2.36 f64addf128 F +GLIBC_2.36 f64addf64x F +GLIBC_2.36 f64divf128 F +GLIBC_2.36 f64divf64x F +GLIBC_2.36 f64fmaf128 F +GLIBC_2.36 f64fmaf64x F +GLIBC_2.36 f64mulf128 F +GLIBC_2.36 f64mulf64x F +GLIBC_2.36 f64sqrtf128 F +GLIBC_2.36 f64sqrtf64x F +GLIBC_2.36 f64subf128 F +GLIBC_2.36 f64subf64x F +GLIBC_2.36 f64xaddf128 F +GLIBC_2.36 f64xdivf128 F +GLIBC_2.36 f64xfmaf128 F +GLIBC_2.36 f64xmulf128 F +GLIBC_2.36 f64xsqrtf128 F +GLIBC_2.36 f64xsubf128 F +GLIBC_2.36 fabs F +GLIBC_2.36 fabsf F +GLIBC_2.36 fabsf128 F +GLIBC_2.36 fabsf32 F +GLIBC_2.36 fabsf32x F +GLIBC_2.36 fabsf64 F +GLIBC_2.36 fabsf64x F +GLIBC_2.36 fabsl F +GLIBC_2.36 fadd F +GLIBC_2.36 faddl F +GLIBC_2.36 fdim F +GLIBC_2.36 fdimf F +GLIBC_2.36 fdimf128 F +GLIBC_2.36 fdimf32 F +GLIBC_2.36 fdimf32x F +GLIBC_2.36 fdimf64 F +GLIBC_2.36 fdimf64x F +GLIBC_2.36 fdiml F +GLIBC_2.36 fdiv F +GLIBC_2.36 fdivl F +GLIBC_2.36 feclearexcept F +GLIBC_2.36 fedisableexcept F +GLIBC_2.36 feenableexcept F +GLIBC_2.36 fegetenv F +GLIBC_2.36 fegetexcept F +GLIBC_2.36 fegetexceptflag F +GLIBC_2.36 fegetmode F +GLIBC_2.36 fegetround F +GLIBC_2.36 feholdexcept F +GLIBC_2.36 feraiseexcept F +GLIBC_2.36 fesetenv F +GLIBC_2.36 fesetexcept F +GLIBC_2.36 fesetexceptflag F +GLIBC_2.36 fesetmode F +GLIBC_2.36 fesetround F +GLIBC_2.36 fetestexcept F +GLIBC_2.36 fetestexceptflag F +GLIBC_2.36 feupdateenv F +GLIBC_2.36 ffma F +GLIBC_2.36 ffmal F +GLIBC_2.36 finite F +GLIBC_2.36 finitef F +GLIBC_2.36 finitel F +GLIBC_2.36 floor F +GLIBC_2.36 floorf F +GLIBC_2.36 floorf128 F +GLIBC_2.36 floorf32 F +GLIBC_2.36 floorf32x F +GLIBC_2.36 floorf64 F +GLIBC_2.36 floorf64x F +GLIBC_2.36 floorl F +GLIBC_2.36 fma F +GLIBC_2.36 fmaf F +GLIBC_2.36 fmaf128 F +GLIBC_2.36 fmaf32 F +GLIBC_2.36 fmaf32x F +GLIBC_2.36 fmaf64 F +GLIBC_2.36 fmaf64x F +GLIBC_2.36 fmal F +GLIBC_2.36 fmax F +GLIBC_2.36 fmaxf F +GLIBC_2.36 fmaxf128 F +GLIBC_2.36 fmaxf32 F +GLIBC_2.36 fmaxf32x F +GLIBC_2.36 fmaxf64 F +GLIBC_2.36 fmaxf64x F +GLIBC_2.36 fmaximum F +GLIBC_2.36 fmaximum_mag F +GLIBC_2.36 fmaximum_mag_num F +GLIBC_2.36 fmaximum_mag_numf F +GLIBC_2.36 fmaximum_mag_numf128 F +GLIBC_2.36 fmaximum_mag_numf32 F +GLIBC_2.36 fmaximum_mag_numf32x F +GLIBC_2.36 fmaximum_mag_numf64 F +GLIBC_2.36 fmaximum_mag_numf64x F +GLIBC_2.36 fmaximum_mag_numl F +GLIBC_2.36 fmaximum_magf F +GLIBC_2.36 fmaximum_magf128 F +GLIBC_2.36 fmaximum_magf32 F +GLIBC_2.36 fmaximum_magf32x F +GLIBC_2.36 fmaximum_magf64 F +GLIBC_2.36 fmaximum_magf64x F +GLIBC_2.36 fmaximum_magl F +GLIBC_2.36 fmaximum_num F +GLIBC_2.36 fmaximum_numf F +GLIBC_2.36 fmaximum_numf128 F +GLIBC_2.36 fmaximum_numf32 F +GLIBC_2.36 fmaximum_numf32x F +GLIBC_2.36 fmaximum_numf64 F +GLIBC_2.36 fmaximum_numf64x F +GLIBC_2.36 fmaximum_numl F +GLIBC_2.36 fmaximumf F +GLIBC_2.36 fmaximumf128 F +GLIBC_2.36 fmaximumf32 F +GLIBC_2.36 fmaximumf32x F +GLIBC_2.36 fmaximumf64 F +GLIBC_2.36 fmaximumf64x F +GLIBC_2.36 fmaximuml F +GLIBC_2.36 fmaxl F +GLIBC_2.36 fmaxmag F +GLIBC_2.36 fmaxmagf F +GLIBC_2.36 fmaxmagf128 F +GLIBC_2.36 fmaxmagf32 F +GLIBC_2.36 fmaxmagf32x F +GLIBC_2.36 fmaxmagf64 F +GLIBC_2.36 fmaxmagf64x F +GLIBC_2.36 fmaxmagl F +GLIBC_2.36 fmin F +GLIBC_2.36 fminf F +GLIBC_2.36 fminf128 F +GLIBC_2.36 fminf32 F +GLIBC_2.36 fminf32x F +GLIBC_2.36 fminf64 F +GLIBC_2.36 fminf64x F +GLIBC_2.36 fminimum F +GLIBC_2.36 fminimum_mag F +GLIBC_2.36 fminimum_mag_num F +GLIBC_2.36 fminimum_mag_numf F +GLIBC_2.36 fminimum_mag_numf128 F +GLIBC_2.36 fminimum_mag_numf32 F +GLIBC_2.36 fminimum_mag_numf32x F +GLIBC_2.36 fminimum_mag_numf64 F +GLIBC_2.36 fminimum_mag_numf64x F +GLIBC_2.36 fminimum_mag_numl F +GLIBC_2.36 fminimum_magf F +GLIBC_2.36 fminimum_magf128 F +GLIBC_2.36 fminimum_magf32 F +GLIBC_2.36 fminimum_magf32x F +GLIBC_2.36 fminimum_magf64 F +GLIBC_2.36 fminimum_magf64x F +GLIBC_2.36 fminimum_magl F +GLIBC_2.36 fminimum_num F +GLIBC_2.36 fminimum_numf F +GLIBC_2.36 fminimum_numf128 F +GLIBC_2.36 fminimum_numf32 F +GLIBC_2.36 fminimum_numf32x F +GLIBC_2.36 fminimum_numf64 F +GLIBC_2.36 fminimum_numf64x F +GLIBC_2.36 fminimum_numl F +GLIBC_2.36 fminimumf F +GLIBC_2.36 fminimumf128 F +GLIBC_2.36 fminimumf32 F +GLIBC_2.36 fminimumf32x F +GLIBC_2.36 fminimumf64 F +GLIBC_2.36 fminimumf64x F +GLIBC_2.36 fminimuml F +GLIBC_2.36 fminl F +GLIBC_2.36 fminmag F +GLIBC_2.36 fminmagf F +GLIBC_2.36 fminmagf128 F +GLIBC_2.36 fminmagf32 F +GLIBC_2.36 fminmagf32x F +GLIBC_2.36 fminmagf64 F +GLIBC_2.36 fminmagf64x F +GLIBC_2.36 fminmagl F +GLIBC_2.36 fmod F +GLIBC_2.36 fmodf F +GLIBC_2.36 fmodf128 F +GLIBC_2.36 fmodf32 F +GLIBC_2.36 fmodf32x F +GLIBC_2.36 fmodf64 F +GLIBC_2.36 fmodf64x F +GLIBC_2.36 fmodl F +GLIBC_2.36 fmul F +GLIBC_2.36 fmull F +GLIBC_2.36 frexp F +GLIBC_2.36 frexpf F +GLIBC_2.36 frexpf128 F +GLIBC_2.36 frexpf32 F +GLIBC_2.36 frexpf32x F +GLIBC_2.36 frexpf64 F +GLIBC_2.36 frexpf64x F +GLIBC_2.36 frexpl F +GLIBC_2.36 fromfp F +GLIBC_2.36 fromfpf F +GLIBC_2.36 fromfpf128 F +GLIBC_2.36 fromfpf32 F +GLIBC_2.36 fromfpf32x F +GLIBC_2.36 fromfpf64 F +GLIBC_2.36 fromfpf64x F +GLIBC_2.36 fromfpl F +GLIBC_2.36 fromfpx F +GLIBC_2.36 fromfpxf F +GLIBC_2.36 fromfpxf128 F +GLIBC_2.36 fromfpxf32 F +GLIBC_2.36 fromfpxf32x F +GLIBC_2.36 fromfpxf64 F +GLIBC_2.36 fromfpxf64x F +GLIBC_2.36 fromfpxl F +GLIBC_2.36 fsqrt F +GLIBC_2.36 fsqrtl F +GLIBC_2.36 fsub F +GLIBC_2.36 fsubl F +GLIBC_2.36 gamma F +GLIBC_2.36 gammaf F +GLIBC_2.36 gammal F +GLIBC_2.36 getpayload F +GLIBC_2.36 getpayloadf F +GLIBC_2.36 getpayloadf128 F +GLIBC_2.36 getpayloadf32 F +GLIBC_2.36 getpayloadf32x F +GLIBC_2.36 getpayloadf64 F +GLIBC_2.36 getpayloadf64x F +GLIBC_2.36 getpayloadl F +GLIBC_2.36 hypot F +GLIBC_2.36 hypotf F +GLIBC_2.36 hypotf128 F +GLIBC_2.36 hypotf32 F +GLIBC_2.36 hypotf32x F +GLIBC_2.36 hypotf64 F +GLIBC_2.36 hypotf64x F +GLIBC_2.36 hypotl F +GLIBC_2.36 ilogb F +GLIBC_2.36 ilogbf F +GLIBC_2.36 ilogbf128 F +GLIBC_2.36 ilogbf32 F +GLIBC_2.36 ilogbf32x F +GLIBC_2.36 ilogbf64 F +GLIBC_2.36 ilogbf64x F +GLIBC_2.36 ilogbl F +GLIBC_2.36 j0 F +GLIBC_2.36 j0f F +GLIBC_2.36 j0f128 F +GLIBC_2.36 j0f32 F +GLIBC_2.36 j0f32x F +GLIBC_2.36 j0f64 F +GLIBC_2.36 j0f64x F +GLIBC_2.36 j0l F +GLIBC_2.36 j1 F +GLIBC_2.36 j1f F +GLIBC_2.36 j1f128 F +GLIBC_2.36 j1f32 F +GLIBC_2.36 j1f32x F +GLIBC_2.36 j1f64 F +GLIBC_2.36 j1f64x F +GLIBC_2.36 j1l F +GLIBC_2.36 jn F +GLIBC_2.36 jnf F +GLIBC_2.36 jnf128 F +GLIBC_2.36 jnf32 F +GLIBC_2.36 jnf32x F +GLIBC_2.36 jnf64 F +GLIBC_2.36 jnf64x F +GLIBC_2.36 jnl F +GLIBC_2.36 ldexp F +GLIBC_2.36 ldexpf F +GLIBC_2.36 ldexpf128 F +GLIBC_2.36 ldexpf32 F +GLIBC_2.36 ldexpf32x F +GLIBC_2.36 ldexpf64 F +GLIBC_2.36 ldexpf64x F +GLIBC_2.36 ldexpl F +GLIBC_2.36 lgamma F +GLIBC_2.36 lgamma_r F +GLIBC_2.36 lgammaf F +GLIBC_2.36 lgammaf128 F +GLIBC_2.36 lgammaf128_r F +GLIBC_2.36 lgammaf32 F +GLIBC_2.36 lgammaf32_r F +GLIBC_2.36 lgammaf32x F +GLIBC_2.36 lgammaf32x_r F +GLIBC_2.36 lgammaf64 F +GLIBC_2.36 lgammaf64_r F +GLIBC_2.36 lgammaf64x F +GLIBC_2.36 lgammaf64x_r F +GLIBC_2.36 lgammaf_r F +GLIBC_2.36 lgammal F +GLIBC_2.36 lgammal_r F +GLIBC_2.36 llogb F +GLIBC_2.36 llogbf F +GLIBC_2.36 llogbf128 F +GLIBC_2.36 llogbf32 F +GLIBC_2.36 llogbf32x F +GLIBC_2.36 llogbf64 F +GLIBC_2.36 llogbf64x F +GLIBC_2.36 llogbl F +GLIBC_2.36 llrint F +GLIBC_2.36 llrintf F +GLIBC_2.36 llrintf128 F +GLIBC_2.36 llrintf32 F +GLIBC_2.36 llrintf32x F +GLIBC_2.36 llrintf64 F +GLIBC_2.36 llrintf64x F +GLIBC_2.36 llrintl F +GLIBC_2.36 llround F +GLIBC_2.36 llroundf F +GLIBC_2.36 llroundf128 F +GLIBC_2.36 llroundf32 F +GLIBC_2.36 llroundf32x F +GLIBC_2.36 llroundf64 F +GLIBC_2.36 llroundf64x F +GLIBC_2.36 llroundl F +GLIBC_2.36 log F +GLIBC_2.36 log10 F +GLIBC_2.36 log10f F +GLIBC_2.36 log10f128 F +GLIBC_2.36 log10f32 F +GLIBC_2.36 log10f32x F +GLIBC_2.36 log10f64 F +GLIBC_2.36 log10f64x F +GLIBC_2.36 log10l F +GLIBC_2.36 log1p F +GLIBC_2.36 log1pf F +GLIBC_2.36 log1pf128 F +GLIBC_2.36 log1pf32 F +GLIBC_2.36 log1pf32x F +GLIBC_2.36 log1pf64 F +GLIBC_2.36 log1pf64x F +GLIBC_2.36 log1pl F +GLIBC_2.36 log2 F +GLIBC_2.36 log2f F +GLIBC_2.36 log2f128 F +GLIBC_2.36 log2f32 F +GLIBC_2.36 log2f32x F +GLIBC_2.36 log2f64 F +GLIBC_2.36 log2f64x F +GLIBC_2.36 log2l F +GLIBC_2.36 logb F +GLIBC_2.36 logbf F +GLIBC_2.36 logbf128 F +GLIBC_2.36 logbf32 F +GLIBC_2.36 logbf32x F +GLIBC_2.36 logbf64 F +GLIBC_2.36 logbf64x F +GLIBC_2.36 logbl F +GLIBC_2.36 logf F +GLIBC_2.36 logf128 F +GLIBC_2.36 logf32 F +GLIBC_2.36 logf32x F +GLIBC_2.36 logf64 F +GLIBC_2.36 logf64x F +GLIBC_2.36 logl F +GLIBC_2.36 lrint F +GLIBC_2.36 lrintf F +GLIBC_2.36 lrintf128 F +GLIBC_2.36 lrintf32 F +GLIBC_2.36 lrintf32x F +GLIBC_2.36 lrintf64 F +GLIBC_2.36 lrintf64x F +GLIBC_2.36 lrintl F +GLIBC_2.36 lround F +GLIBC_2.36 lroundf F +GLIBC_2.36 lroundf128 F +GLIBC_2.36 lroundf32 F +GLIBC_2.36 lroundf32x F +GLIBC_2.36 lroundf64 F +GLIBC_2.36 lroundf64x F +GLIBC_2.36 lroundl F +GLIBC_2.36 modf F +GLIBC_2.36 modff F +GLIBC_2.36 modff128 F +GLIBC_2.36 modff32 F +GLIBC_2.36 modff32x F +GLIBC_2.36 modff64 F +GLIBC_2.36 modff64x F +GLIBC_2.36 modfl F +GLIBC_2.36 nan F +GLIBC_2.36 nanf F +GLIBC_2.36 nanf128 F +GLIBC_2.36 nanf32 F +GLIBC_2.36 nanf32x F +GLIBC_2.36 nanf64 F +GLIBC_2.36 nanf64x F +GLIBC_2.36 nanl F +GLIBC_2.36 nearbyint F +GLIBC_2.36 nearbyintf F +GLIBC_2.36 nearbyintf128 F +GLIBC_2.36 nearbyintf32 F +GLIBC_2.36 nearbyintf32x F +GLIBC_2.36 nearbyintf64 F +GLIBC_2.36 nearbyintf64x F +GLIBC_2.36 nearbyintl F +GLIBC_2.36 nextafter F +GLIBC_2.36 nextafterf F +GLIBC_2.36 nextafterf128 F +GLIBC_2.36 nextafterf32 F +GLIBC_2.36 nextafterf32x F +GLIBC_2.36 nextafterf64 F +GLIBC_2.36 nextafterf64x F +GLIBC_2.36 nextafterl F +GLIBC_2.36 nextdown F +GLIBC_2.36 nextdownf F +GLIBC_2.36 nextdownf128 F +GLIBC_2.36 nextdownf32 F +GLIBC_2.36 nextdownf32x F +GLIBC_2.36 nextdownf64 F +GLIBC_2.36 nextdownf64x F +GLIBC_2.36 nextdownl F +GLIBC_2.36 nexttoward F +GLIBC_2.36 nexttowardf F +GLIBC_2.36 nexttowardl F +GLIBC_2.36 nextup F +GLIBC_2.36 nextupf F +GLIBC_2.36 nextupf128 F +GLIBC_2.36 nextupf32 F +GLIBC_2.36 nextupf32x F +GLIBC_2.36 nextupf64 F +GLIBC_2.36 nextupf64x F +GLIBC_2.36 nextupl F +GLIBC_2.36 pow F +GLIBC_2.36 powf F +GLIBC_2.36 powf128 F +GLIBC_2.36 powf32 F +GLIBC_2.36 powf32x F +GLIBC_2.36 powf64 F +GLIBC_2.36 powf64x F +GLIBC_2.36 powl F +GLIBC_2.36 remainder F +GLIBC_2.36 remainderf F +GLIBC_2.36 remainderf128 F +GLIBC_2.36 remainderf32 F +GLIBC_2.36 remainderf32x F +GLIBC_2.36 remainderf64 F +GLIBC_2.36 remainderf64x F +GLIBC_2.36 remainderl F +GLIBC_2.36 remquo F +GLIBC_2.36 remquof F +GLIBC_2.36 remquof128 F +GLIBC_2.36 remquof32 F +GLIBC_2.36 remquof32x F +GLIBC_2.36 remquof64 F +GLIBC_2.36 remquof64x F +GLIBC_2.36 remquol F +GLIBC_2.36 rint F +GLIBC_2.36 rintf F +GLIBC_2.36 rintf128 F +GLIBC_2.36 rintf32 F +GLIBC_2.36 rintf32x F +GLIBC_2.36 rintf64 F +GLIBC_2.36 rintf64x F +GLIBC_2.36 rintl F +GLIBC_2.36 round F +GLIBC_2.36 roundeven F +GLIBC_2.36 roundevenf F +GLIBC_2.36 roundevenf128 F +GLIBC_2.36 roundevenf32 F +GLIBC_2.36 roundevenf32x F +GLIBC_2.36 roundevenf64 F +GLIBC_2.36 roundevenf64x F +GLIBC_2.36 roundevenl F +GLIBC_2.36 roundf F +GLIBC_2.36 roundf128 F +GLIBC_2.36 roundf32 F +GLIBC_2.36 roundf32x F +GLIBC_2.36 roundf64 F +GLIBC_2.36 roundf64x F +GLIBC_2.36 roundl F +GLIBC_2.36 scalb F +GLIBC_2.36 scalbf F +GLIBC_2.36 scalbl F +GLIBC_2.36 scalbln F +GLIBC_2.36 scalblnf F +GLIBC_2.36 scalblnf128 F +GLIBC_2.36 scalblnf32 F +GLIBC_2.36 scalblnf32x F +GLIBC_2.36 scalblnf64 F +GLIBC_2.36 scalblnf64x F +GLIBC_2.36 scalblnl F +GLIBC_2.36 scalbn F +GLIBC_2.36 scalbnf F +GLIBC_2.36 scalbnf128 F +GLIBC_2.36 scalbnf32 F +GLIBC_2.36 scalbnf32x F +GLIBC_2.36 scalbnf64 F +GLIBC_2.36 scalbnf64x F +GLIBC_2.36 scalbnl F +GLIBC_2.36 setpayload F +GLIBC_2.36 setpayloadf F +GLIBC_2.36 setpayloadf128 F +GLIBC_2.36 setpayloadf32 F +GLIBC_2.36 setpayloadf32x F +GLIBC_2.36 setpayloadf64 F +GLIBC_2.36 setpayloadf64x F +GLIBC_2.36 setpayloadl F +GLIBC_2.36 setpayloadsig F +GLIBC_2.36 setpayloadsigf F +GLIBC_2.36 setpayloadsigf128 F +GLIBC_2.36 setpayloadsigf32 F +GLIBC_2.36 setpayloadsigf32x F +GLIBC_2.36 setpayloadsigf64 F +GLIBC_2.36 setpayloadsigf64x F +GLIBC_2.36 setpayloadsigl F +GLIBC_2.36 signgam D 0x4 +GLIBC_2.36 significand F +GLIBC_2.36 significandf F +GLIBC_2.36 significandl F +GLIBC_2.36 sin F +GLIBC_2.36 sincos F +GLIBC_2.36 sincosf F +GLIBC_2.36 sincosf128 F +GLIBC_2.36 sincosf32 F +GLIBC_2.36 sincosf32x F +GLIBC_2.36 sincosf64 F +GLIBC_2.36 sincosf64x F +GLIBC_2.36 sincosl F +GLIBC_2.36 sinf F +GLIBC_2.36 sinf128 F +GLIBC_2.36 sinf32 F +GLIBC_2.36 sinf32x F +GLIBC_2.36 sinf64 F +GLIBC_2.36 sinf64x F +GLIBC_2.36 sinh F +GLIBC_2.36 sinhf F +GLIBC_2.36 sinhf128 F +GLIBC_2.36 sinhf32 F +GLIBC_2.36 sinhf32x F +GLIBC_2.36 sinhf64 F +GLIBC_2.36 sinhf64x F +GLIBC_2.36 sinhl F +GLIBC_2.36 sinl F +GLIBC_2.36 sqrt F +GLIBC_2.36 sqrtf F +GLIBC_2.36 sqrtf128 F +GLIBC_2.36 sqrtf32 F +GLIBC_2.36 sqrtf32x F +GLIBC_2.36 sqrtf64 F +GLIBC_2.36 sqrtf64x F +GLIBC_2.36 sqrtl F +GLIBC_2.36 tan F +GLIBC_2.36 tanf F +GLIBC_2.36 tanf128 F +GLIBC_2.36 tanf32 F +GLIBC_2.36 tanf32x F +GLIBC_2.36 tanf64 F +GLIBC_2.36 tanf64x F +GLIBC_2.36 tanh F +GLIBC_2.36 tanhf F +GLIBC_2.36 tanhf128 F +GLIBC_2.36 tanhf32 F +GLIBC_2.36 tanhf32x F +GLIBC_2.36 tanhf64 F +GLIBC_2.36 tanhf64x F +GLIBC_2.36 tanhl F +GLIBC_2.36 tanl F +GLIBC_2.36 tgamma F +GLIBC_2.36 tgammaf F +GLIBC_2.36 tgammaf128 F +GLIBC_2.36 tgammaf32 F +GLIBC_2.36 tgammaf32x F +GLIBC_2.36 tgammaf64 F +GLIBC_2.36 tgammaf64x F +GLIBC_2.36 tgammal F +GLIBC_2.36 totalorder F +GLIBC_2.36 totalorderf F +GLIBC_2.36 totalorderf128 F +GLIBC_2.36 totalorderf32 F +GLIBC_2.36 totalorderf32x F +GLIBC_2.36 totalorderf64 F +GLIBC_2.36 totalorderf64x F +GLIBC_2.36 totalorderl F +GLIBC_2.36 totalordermag F +GLIBC_2.36 totalordermagf F +GLIBC_2.36 totalordermagf128 F +GLIBC_2.36 totalordermagf32 F +GLIBC_2.36 totalordermagf32x F +GLIBC_2.36 totalordermagf64 F +GLIBC_2.36 totalordermagf64x F +GLIBC_2.36 totalordermagl F +GLIBC_2.36 trunc F +GLIBC_2.36 truncf F +GLIBC_2.36 truncf128 F +GLIBC_2.36 truncf32 F +GLIBC_2.36 truncf32x F +GLIBC_2.36 truncf64 F +GLIBC_2.36 truncf64x F +GLIBC_2.36 truncl F +GLIBC_2.36 ufromfp F +GLIBC_2.36 ufromfpf F +GLIBC_2.36 ufromfpf128 F +GLIBC_2.36 ufromfpf32 F +GLIBC_2.36 ufromfpf32x F +GLIBC_2.36 ufromfpf64 F +GLIBC_2.36 ufromfpf64x F +GLIBC_2.36 ufromfpl F +GLIBC_2.36 ufromfpx F +GLIBC_2.36 ufromfpxf F +GLIBC_2.36 ufromfpxf128 F +GLIBC_2.36 ufromfpxf32 F +GLIBC_2.36 ufromfpxf32x F +GLIBC_2.36 ufromfpxf64 F +GLIBC_2.36 ufromfpxf64x F +GLIBC_2.36 ufromfpxl F +GLIBC_2.36 y0 F +GLIBC_2.36 y0f F +GLIBC_2.36 y0f128 F +GLIBC_2.36 y0f32 F +GLIBC_2.36 y0f32x F +GLIBC_2.36 y0f64 F +GLIBC_2.36 y0f64x F +GLIBC_2.36 y0l F +GLIBC_2.36 y1 F +GLIBC_2.36 y1f F +GLIBC_2.36 y1f128 F +GLIBC_2.36 y1f32 F +GLIBC_2.36 y1f32x F +GLIBC_2.36 y1f64 F +GLIBC_2.36 y1f64x F +GLIBC_2.36 y1l F +GLIBC_2.36 yn F +GLIBC_2.36 ynf F +GLIBC_2.36 ynf128 F +GLIBC_2.36 ynf32 F +GLIBC_2.36 ynf32x F +GLIBC_2.36 ynf64 F +GLIBC_2.36 ynf64x F +GLIBC_2.36 ynl F diff --git a/sysdeps/unix/sysv/linux/loongarch/lp64/libpthread.abilist b/sysdeps/unix/sysv/linux/loongarch/lp64/libpthread.abilist new file mode 100644 index 0000000000..e69de29bb2 diff --git a/sysdeps/unix/sysv/linux/loongarch/lp64/libresolv.abilist b/sysdeps/unix/sysv/linux/loongarch/lp64/libresolv.abilist new file mode 100644 index 0000000000..c30f54c0bf --- /dev/null +++ b/sysdeps/unix/sysv/linux/loongarch/lp64/libresolv.abilist @@ -0,0 +1,55 @@ +GLIBC_2.36 __b64_ntop F +GLIBC_2.36 __b64_pton F +GLIBC_2.36 __dn_count_labels F +GLIBC_2.36 __fp_nquery F +GLIBC_2.36 __fp_query F +GLIBC_2.36 __fp_resstat F +GLIBC_2.36 __hostalias F +GLIBC_2.36 __loc_aton F +GLIBC_2.36 __loc_ntoa F +GLIBC_2.36 __p_cdname F +GLIBC_2.36 __p_cdnname F +GLIBC_2.36 __p_class F +GLIBC_2.36 __p_class_syms D 0xa8 +GLIBC_2.36 __p_fqname F +GLIBC_2.36 __p_fqnname F +GLIBC_2.36 __p_option F +GLIBC_2.36 __p_query F +GLIBC_2.36 __p_rcode F +GLIBC_2.36 __p_time F +GLIBC_2.36 __p_type F +GLIBC_2.36 __p_type_syms D 0x450 +GLIBC_2.36 __putlong F +GLIBC_2.36 __putshort F +GLIBC_2.36 __res_close F +GLIBC_2.36 __res_hostalias F +GLIBC_2.36 __res_isourserver F +GLIBC_2.36 __res_nameinquery F +GLIBC_2.36 __res_queriesmatch F +GLIBC_2.36 __sym_ntop F +GLIBC_2.36 __sym_ntos F +GLIBC_2.36 __sym_ston F +GLIBC_2.36 _getlong F +GLIBC_2.36 _getshort F +GLIBC_2.36 inet_net_ntop F +GLIBC_2.36 inet_net_pton F +GLIBC_2.36 inet_neta F +GLIBC_2.36 ns_datetosecs F +GLIBC_2.36 ns_format_ttl F +GLIBC_2.36 ns_get16 F +GLIBC_2.36 ns_get32 F +GLIBC_2.36 ns_initparse F +GLIBC_2.36 ns_makecanon F +GLIBC_2.36 ns_msg_getflag F +GLIBC_2.36 ns_name_ntol F +GLIBC_2.36 ns_name_rollback F +GLIBC_2.36 ns_parse_ttl F +GLIBC_2.36 ns_parserr F +GLIBC_2.36 ns_put16 F +GLIBC_2.36 ns_put32 F +GLIBC_2.36 ns_samedomain F +GLIBC_2.36 ns_samename F +GLIBC_2.36 ns_skiprr F +GLIBC_2.36 ns_sprintrr F +GLIBC_2.36 ns_sprintrrf F +GLIBC_2.36 ns_subdomain F diff --git a/sysdeps/unix/sysv/linux/loongarch/lp64/librt.abilist b/sysdeps/unix/sysv/linux/loongarch/lp64/librt.abilist new file mode 100644 index 0000000000..e69de29bb2 diff --git a/sysdeps/unix/sysv/linux/loongarch/lp64/libthread_db.abilist b/sysdeps/unix/sysv/linux/loongarch/lp64/libthread_db.abilist new file mode 100644 index 0000000000..8658803d38 --- /dev/null +++ b/sysdeps/unix/sysv/linux/loongarch/lp64/libthread_db.abilist @@ -0,0 +1,40 @@ +GLIBC_2.36 td_init F +GLIBC_2.36 td_log F +GLIBC_2.36 td_symbol_list F +GLIBC_2.36 td_ta_clear_event F +GLIBC_2.36 td_ta_delete F +GLIBC_2.36 td_ta_enable_stats F +GLIBC_2.36 td_ta_event_addr F +GLIBC_2.36 td_ta_event_getmsg F +GLIBC_2.36 td_ta_get_nthreads F +GLIBC_2.36 td_ta_get_ph F +GLIBC_2.36 td_ta_get_stats F +GLIBC_2.36 td_ta_map_id2thr F +GLIBC_2.36 td_ta_map_lwp2thr F +GLIBC_2.36 td_ta_new F +GLIBC_2.36 td_ta_reset_stats F +GLIBC_2.36 td_ta_set_event F +GLIBC_2.36 td_ta_setconcurrency F +GLIBC_2.36 td_ta_thr_iter F +GLIBC_2.36 td_ta_tsd_iter F +GLIBC_2.36 td_thr_clear_event F +GLIBC_2.36 td_thr_dbresume F +GLIBC_2.36 td_thr_dbsuspend F +GLIBC_2.36 td_thr_event_enable F +GLIBC_2.36 td_thr_event_getmsg F +GLIBC_2.36 td_thr_get_info F +GLIBC_2.36 td_thr_getfpregs F +GLIBC_2.36 td_thr_getgregs F +GLIBC_2.36 td_thr_getxregs F +GLIBC_2.36 td_thr_getxregsize F +GLIBC_2.36 td_thr_set_event F +GLIBC_2.36 td_thr_setfpregs F +GLIBC_2.36 td_thr_setgregs F +GLIBC_2.36 td_thr_setprio F +GLIBC_2.36 td_thr_setsigpending F +GLIBC_2.36 td_thr_setxregs F +GLIBC_2.36 td_thr_sigsetmask F +GLIBC_2.36 td_thr_tls_get_addr F +GLIBC_2.36 td_thr_tlsbase F +GLIBC_2.36 td_thr_tsd F +GLIBC_2.36 td_thr_validate F -- 2.31.1 ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v7 10/13] LoongArch: Build Infastructure 2022-07-19 1:22 [PATCH v7 09/13] LoongArch: Add ABI Lists caiyinyu @ 2022-07-19 1:22 ` caiyinyu 2022-07-20 17:14 ` Adhemerval Zanella Netto 2022-07-19 1:22 ` [PATCH v7 11/13] LoongArch: Hard Float Support caiyinyu ` (2 subsequent siblings) 3 siblings, 1 reply; 9+ messages in thread From: caiyinyu @ 2022-07-19 1:22 UTC (permalink / raw) To: adhemerval.zanella, libc-alpha, joseph_myers, carlos, i.swmail; +Cc: caiyinyu --- sysdeps/loongarch/Implies | 3 + sysdeps/loongarch/Makefile | 15 ++ sysdeps/loongarch/configure | 5 + sysdeps/loongarch/configure.ac | 6 + sysdeps/loongarch/lp64/Implies-after | 1 + sysdeps/loongarch/preconfigure | 53 ++++++ sysdeps/loongarch/preconfigure.ac | 47 +++++ sysdeps/loongarch/sys/regdef.h | 93 ++++++++++ sysdeps/unix/sysv/linux/loongarch/Implies | 1 + sysdeps/unix/sysv/linux/loongarch/Makefile | 4 + sysdeps/unix/sysv/linux/loongarch/configure | 174 ++++++++++++++++++ .../unix/sysv/linux/loongarch/configure.ac | 22 +++ .../unix/sysv/linux/loongarch/ldd-rewrite.sed | 1 + .../unix/sysv/linux/loongarch/lp64/Implies | 3 + .../unix/sysv/linux/loongarch/shlib-versions | 7 + 15 files changed, 435 insertions(+) create mode 100644 sysdeps/loongarch/Implies create mode 100644 sysdeps/loongarch/Makefile create mode 100644 sysdeps/loongarch/configure create mode 100644 sysdeps/loongarch/configure.ac create mode 100644 sysdeps/loongarch/lp64/Implies-after create mode 100644 sysdeps/loongarch/preconfigure create mode 100644 sysdeps/loongarch/preconfigure.ac create mode 100644 sysdeps/loongarch/sys/regdef.h create mode 100644 sysdeps/unix/sysv/linux/loongarch/Implies create mode 100644 sysdeps/unix/sysv/linux/loongarch/Makefile create mode 100644 sysdeps/unix/sysv/linux/loongarch/configure create mode 100644 sysdeps/unix/sysv/linux/loongarch/configure.ac create mode 100644 sysdeps/unix/sysv/linux/loongarch/ldd-rewrite.sed create mode 100644 sysdeps/unix/sysv/linux/loongarch/lp64/Implies create mode 100644 sysdeps/unix/sysv/linux/loongarch/shlib-versions diff --git a/sysdeps/loongarch/Implies b/sysdeps/loongarch/Implies new file mode 100644 index 0000000000..1945b1f4bb --- /dev/null +++ b/sysdeps/loongarch/Implies @@ -0,0 +1,3 @@ +ieee754/ldbl-128 +ieee754/dbl-64 +ieee754/flt-32 diff --git a/sysdeps/loongarch/Makefile b/sysdeps/loongarch/Makefile new file mode 100644 index 0000000000..41c3449670 --- /dev/null +++ b/sysdeps/loongarch/Makefile @@ -0,0 +1,15 @@ +ifeq ($(subdir),misc) +sysdep_headers += sys/asm.h +endif + +# LoongArch's assembler also needs to know about PIC as it changes the +# definition of some assembler macros. +ASFLAGS-.os += $(pic-ccflag) + +abi-variants := lp64 + +ifeq (,$(filter $(default-abi),$(abi-variants))) +$(error Unknown ABI $(default-abi), must be one of $(abi-variants)) +endif + +abi-lp64-condition := defined __loongarch_lp64 diff --git a/sysdeps/loongarch/configure b/sysdeps/loongarch/configure new file mode 100644 index 0000000000..43b54d4965 --- /dev/null +++ b/sysdeps/loongarch/configure @@ -0,0 +1,5 @@ +# This file is generated from configure.ac by Autoconf. DO NOT EDIT! + # Local configure fragment for sysdeps/loongarch/elf. + +$as_echo "#define HIDDEN_VAR_NEEDS_DYNAMIC_RELOC 1" >>confdefs.h + diff --git a/sysdeps/loongarch/configure.ac b/sysdeps/loongarch/configure.ac new file mode 100644 index 0000000000..f744367bf3 --- /dev/null +++ b/sysdeps/loongarch/configure.ac @@ -0,0 +1,6 @@ +GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. +# Local configure fragment for sysdeps/loongarch/elf. + +dnl It is always possible to access static and hidden symbols in an +dnl position independent way. +AC_DEFINE(HIDDEN_VAR_NEEDS_DYNAMIC_RELOC) diff --git a/sysdeps/loongarch/lp64/Implies-after b/sysdeps/loongarch/lp64/Implies-after new file mode 100644 index 0000000000..a8cae95f9d --- /dev/null +++ b/sysdeps/loongarch/lp64/Implies-after @@ -0,0 +1 @@ +wordsize-64 diff --git a/sysdeps/loongarch/preconfigure b/sysdeps/loongarch/preconfigure new file mode 100644 index 0000000000..118963cda6 --- /dev/null +++ b/sysdeps/loongarch/preconfigure @@ -0,0 +1,53 @@ +# This file is generated from configure.ac by Autoconf. DO NOT EDIT! +# Local preconfigure fragment for sysdeps/loongarch + +case "$machine" in +loongarch*) + + abi=`$CC $CFLAGS $CPPFLAGS -E -dM -xc /dev/null | sed -n 's/^#define __loongarch_\(lp64\|ilp32\).*/\1/p'` + float_abi=`$CC $CFLAGS $CPPFLAGS -E -dM -xc /dev/null | sed -n 's/^#define __loongarch_\(soft\|single\|double\)_float.*/\1/p'` + + with_fp_cond="!defined __loongarch_soft_float" + + case "$float_abi" in + soft) + abi_flen=0 + as_fn_error 1 "loongarch does not yet support soft floating-point ABI!!" "$LINENO" 5 + ;; + single) + as_fn_error 1 "glibc does not yet support the single floating-point ABI!!" "$LINENO" 5 + ;; + double) + abi_flen=64 + ;; + *) + as_fn_error 1 "Unable to determine floating-point ABI!!" "$LINENO" 5 + ;; + esac + + case "$abi" in + ilp32) + as_fn_error 1 "loongarch does not yet support ilp32 ABI!!" "$LINENO" 5 + ;; + lp64) + grlen=64 + machine=loongarch/lp64 + ;; + *) + as_fn_error 1 "Unable to determine GRLEN!!" "$LINENO" 5 + ;; + esac + + cat >>confdefs.h <<_ACEOF +#define LOONGARCH_ABI_GRLEN $grlen +_ACEOF + + cat >>confdefs.h <<_ACEOF +#define LOONGARCH_ABI_FRLEN $abi_flen +_ACEOF + + + base_machine=loongarch + ;; +esac + diff --git a/sysdeps/loongarch/preconfigure.ac b/sysdeps/loongarch/preconfigure.ac new file mode 100644 index 0000000000..1aba743c15 --- /dev/null +++ b/sysdeps/loongarch/preconfigure.ac @@ -0,0 +1,47 @@ +GLIBC_PROVIDES[]dnl See aclocal.m4 in the top level source directory. +# Local preconfigure fragment for sysdeps/loongarch + +case "$machine" in +loongarch*) + + abi=`$CC $CFLAGS $CPPFLAGS -E -dM -xc /dev/null | sed -n 's/^#define __loongarch_\(lp64\|ilp32\).*/\1/p'` + float_abi=`$CC $CFLAGS $CPPFLAGS -E -dM -xc /dev/null | sed -n 's/^#define __loongarch_\(soft\|single\|double\)_float.*/\1/p'` + + with_fp_cond="!defined __loongarch_soft_float" + + case "$float_abi" in + soft) + abi_flen=0 + AC_MSG_ERROR([loongarch does not yet support soft floating-point ABI!!], 1) + ;; + single) + AC_MSG_ERROR([glibc does not yet support the single floating-point ABI!!], 1) + ;; + double) + abi_flen=64 + ;; + *) + AC_MSG_ERROR([Unable to determine floating-point ABI!!], 1) + ;; + esac + + case "$abi" in + ilp32) + AC_MSG_ERROR([loongarch does not yet support ilp32 ABI!!], 1) + ;; + lp64) + grlen=64 + machine=loongarch/lp64 + ;; + *) + AC_MSG_ERROR([Unable to determine GRLEN!!], 1) + ;; + esac + + AC_DEFINE_UNQUOTED([LOONGARCH_ABI_GRLEN], [$grlen]) + AC_DEFINE_UNQUOTED([LOONGARCH_ABI_FRLEN], [$abi_flen]) + + base_machine=loongarch + ;; +esac + diff --git a/sysdeps/loongarch/sys/regdef.h b/sysdeps/loongarch/sys/regdef.h new file mode 100644 index 0000000000..d266df372d --- /dev/null +++ b/sysdeps/loongarch/sys/regdef.h @@ -0,0 +1,93 @@ +/* Register Macro definitions + Copyright (C) 2022 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library. If not, see + <https://www.gnu.org/licenses/>. */ + +#ifndef _SYS_REGDEF_H +#define _SYS_REGDEF_H + +#define zero $r0 +#define ra $r1 +#define tp $r2 +#define sp $r3 +#define a0 $r4 +#define a1 $r5 +#define a2 $r6 +#define a3 $r7 +#define a4 $r8 +#define a5 $r9 +#define a6 $r10 +#define a7 $r11 +#define v0 $r4 +#define v1 $r5 +#define t0 $r12 +#define t1 $r13 +#define t2 $r14 +#define t3 $r15 +#define t4 $r16 +#define t5 $r17 +#define t6 $r18 +#define t7 $r19 +#define t8 $r20 +#define x $r21 +#define fp $r22 +#define s0 $r23 +#define s1 $r24 +#define s2 $r25 +#define s3 $r26 +#define s4 $r27 +#define s5 $r28 +#define s6 $r29 +#define s7 $r30 +#define s8 $r31 + +#define fa0 $f0 +#define fa1 $f1 +#define fa2 $f2 +#define fa3 $f3 +#define fa4 $f4 +#define fa5 $f5 +#define fa6 $f6 +#define fa7 $f7 +#define fv0 $f0 +#define fv1 $f1 +#define ft0 $f8 +#define ft1 $f9 +#define ft2 $f10 +#define ft3 $f11 +#define ft4 $f12 +#define ft5 $f13 +#define ft6 $f14 +#define ft7 $f15 +#define ft8 $f16 +#define ft9 $f17 +#define ft10 $f18 +#define ft11 $f19 +#define ft12 $f20 +#define ft13 $f21 +#define ft14 $f22 +#define ft15 $f23 +#define fs0 $f24 +#define fs1 $f25 +#define fs2 $f26 +#define fs3 $f27 +#define fs4 $f28 +#define fs5 $f29 +#define fs6 $f30 +#define fs7 $f31 + +#endif /* _SYS_REGDEF_H */ diff --git a/sysdeps/unix/sysv/linux/loongarch/Implies b/sysdeps/unix/sysv/linux/loongarch/Implies new file mode 100644 index 0000000000..e52b1ac310 --- /dev/null +++ b/sysdeps/unix/sysv/linux/loongarch/Implies @@ -0,0 +1 @@ +loongarch/nptl diff --git a/sysdeps/unix/sysv/linux/loongarch/Makefile b/sysdeps/unix/sysv/linux/loongarch/Makefile new file mode 100644 index 0000000000..730bfa7465 --- /dev/null +++ b/sysdeps/unix/sysv/linux/loongarch/Makefile @@ -0,0 +1,4 @@ +ifeq ($(subdir),stdlib) +gen-as-const-headers += ucontext_i.sym +endif + diff --git a/sysdeps/unix/sysv/linux/loongarch/configure b/sysdeps/unix/sysv/linux/loongarch/configure new file mode 100644 index 0000000000..60a410303e --- /dev/null +++ b/sysdeps/unix/sysv/linux/loongarch/configure @@ -0,0 +1,174 @@ +# This file is generated from configure.ac by Autoconf. DO NOT EDIT! + # Local configure fragment for sysdeps/unix/sysv/linux/loongarch. + +arch_minimum_kernel=5.19.0 + +libc_cv_loongarch_int_abi=no + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_GREP" || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +__SIZEOF_INT__ __SIZEOF_LONG__ __SIZEOF_POINTER__ + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "4 8 8" >/dev/null 2>&1; then : + libc_cv_loongarch_int_abi=lp64 +fi +rm -f conftest* + +if test $libc_cv_loongarch_int_abi = no; then + as_fn_error $? "Unable to determine integer ABI" "$LINENO" 5 +fi + +config_vars="$config_vars +default-abi = $libc_cv_loongarch_int_abi" + +case $libc_cv_loongarch_int_abi in +lp64) + test -n "$libc_cv_slibdir" || +case "$prefix" in +/usr | /usr/) + libc_cv_slibdir='/lib64' + libc_cv_rtlddir='/lib64' + if test "$libdir" = '${exec_prefix}/lib'; then + libdir='${exec_prefix}/lib64'; + # Locale data can be shared between 32-bit and 64-bit libraries. + libc_cv_complocaledir='${exec_prefix}/lib/locale' + fi + ;; +esac + ;; +esac + +ldd_rewrite_script=sysdeps/unix/sysv/linux/loongarch/ldd-rewrite.sed diff --git a/sysdeps/unix/sysv/linux/loongarch/configure.ac b/sysdeps/unix/sysv/linux/loongarch/configure.ac new file mode 100644 index 0000000000..7de1e95ff6 --- /dev/null +++ b/sysdeps/unix/sysv/linux/loongarch/configure.ac @@ -0,0 +1,22 @@ +sinclude(./aclocal.m4)dnl Autoconf lossage +GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. +# Local configure fragment for sysdeps/unix/sysv/linux/loongarch. + +arch_minimum_kernel=5.19.0 + +libc_cv_loongarch_int_abi=no +AC_EGREP_CPP(4 8 8, [__SIZEOF_INT__ __SIZEOF_LONG__ __SIZEOF_POINTER__ + ], libc_cv_loongarch_int_abi=lp64) +if test $libc_cv_loongarch_int_abi = no; then + AC_MSG_ERROR([Unable to determine integer ABI]) +fi + +LIBC_CONFIG_VAR([default-abi], [$libc_cv_loongarch_int_abi]) + +case $libc_cv_loongarch_int_abi in +lp64) + LIBC_SLIBDIR_RTLDDIR([lib64], [lib64]) + ;; +esac + +ldd_rewrite_script=sysdeps/unix/sysv/linux/loongarch/ldd-rewrite.sed diff --git a/sysdeps/unix/sysv/linux/loongarch/ldd-rewrite.sed b/sysdeps/unix/sysv/linux/loongarch/ldd-rewrite.sed new file mode 100644 index 0000000000..f8976fd239 --- /dev/null +++ b/sysdeps/unix/sysv/linux/loongarch/ldd-rewrite.sed @@ -0,0 +1 @@ +s_^\(RTLDLIST=\)\(.*lib\)\(\|64\|32\)\(/[^/]*\)\(-loongarch\)\(64\|32\)\(\.so\.[0-9.]*\)[[:blank:]]*$_\1"\2\4\7 \264\4-loongarch64\7 \232\4-loongarch32\7"_ diff --git a/sysdeps/unix/sysv/linux/loongarch/lp64/Implies b/sysdeps/unix/sysv/linux/loongarch/lp64/Implies new file mode 100644 index 0000000000..117c2b8efe --- /dev/null +++ b/sysdeps/unix/sysv/linux/loongarch/lp64/Implies @@ -0,0 +1,3 @@ +unix/sysv/linux/loongarch +unix/sysv/linux/generic +unix/sysv/linux/wordsize-64 diff --git a/sysdeps/unix/sysv/linux/loongarch/shlib-versions b/sysdeps/unix/sysv/linux/loongarch/shlib-versions new file mode 100644 index 0000000000..dc2220b4be --- /dev/null +++ b/sysdeps/unix/sysv/linux/loongarch/shlib-versions @@ -0,0 +1,7 @@ +DEFAULT GLIBC_2.36 + +%if LOONGARCH_ABI_GRLEN == 64 && LOONGARCH_ABI_FRLEN == 64 +ld=ld-linux-loongarch-lp64d.so.1 +%else +%error cannot determine ABI +%endif -- 2.31.1 ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v7 10/13] LoongArch: Build Infastructure 2022-07-19 1:22 ` [PATCH v7 10/13] LoongArch: Build Infastructure caiyinyu @ 2022-07-20 17:14 ` Adhemerval Zanella Netto 0 siblings, 0 replies; 9+ messages in thread From: Adhemerval Zanella Netto @ 2022-07-20 17:14 UTC (permalink / raw) To: caiyinyu, libc-alpha, joseph_myers, carlos, i.swmail LGTM, thanks. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org> On 18/07/22 22:22, caiyinyu wrote: > --- > sysdeps/loongarch/Implies | 3 + > sysdeps/loongarch/Makefile | 15 ++ > sysdeps/loongarch/configure | 5 + > sysdeps/loongarch/configure.ac | 6 + > sysdeps/loongarch/lp64/Implies-after | 1 + > sysdeps/loongarch/preconfigure | 53 ++++++ > sysdeps/loongarch/preconfigure.ac | 47 +++++ > sysdeps/loongarch/sys/regdef.h | 93 ++++++++++ > sysdeps/unix/sysv/linux/loongarch/Implies | 1 + > sysdeps/unix/sysv/linux/loongarch/Makefile | 4 + > sysdeps/unix/sysv/linux/loongarch/configure | 174 ++++++++++++++++++ > .../unix/sysv/linux/loongarch/configure.ac | 22 +++ > .../unix/sysv/linux/loongarch/ldd-rewrite.sed | 1 + > .../unix/sysv/linux/loongarch/lp64/Implies | 3 + > .../unix/sysv/linux/loongarch/shlib-versions | 7 + > 15 files changed, 435 insertions(+) > create mode 100644 sysdeps/loongarch/Implies > create mode 100644 sysdeps/loongarch/Makefile > create mode 100644 sysdeps/loongarch/configure > create mode 100644 sysdeps/loongarch/configure.ac > create mode 100644 sysdeps/loongarch/lp64/Implies-after > create mode 100644 sysdeps/loongarch/preconfigure > create mode 100644 sysdeps/loongarch/preconfigure.ac > create mode 100644 sysdeps/loongarch/sys/regdef.h > create mode 100644 sysdeps/unix/sysv/linux/loongarch/Implies > create mode 100644 sysdeps/unix/sysv/linux/loongarch/Makefile > create mode 100644 sysdeps/unix/sysv/linux/loongarch/configure > create mode 100644 sysdeps/unix/sysv/linux/loongarch/configure.ac > create mode 100644 sysdeps/unix/sysv/linux/loongarch/ldd-rewrite.sed > create mode 100644 sysdeps/unix/sysv/linux/loongarch/lp64/Implies > create mode 100644 sysdeps/unix/sysv/linux/loongarch/shlib-versions > > diff --git a/sysdeps/loongarch/Implies b/sysdeps/loongarch/Implies > new file mode 100644 > index 0000000000..1945b1f4bb > --- /dev/null > +++ b/sysdeps/loongarch/Implies > @@ -0,0 +1,3 @@ > +ieee754/ldbl-128 > +ieee754/dbl-64 > +ieee754/flt-32 > diff --git a/sysdeps/loongarch/Makefile b/sysdeps/loongarch/Makefile > new file mode 100644 > index 0000000000..41c3449670 > --- /dev/null > +++ b/sysdeps/loongarch/Makefile > @@ -0,0 +1,15 @@ > +ifeq ($(subdir),misc) > +sysdep_headers += sys/asm.h > +endif > + > +# LoongArch's assembler also needs to know about PIC as it changes the > +# definition of some assembler macros. > +ASFLAGS-.os += $(pic-ccflag) > + > +abi-variants := lp64 > + > +ifeq (,$(filter $(default-abi),$(abi-variants))) > +$(error Unknown ABI $(default-abi), must be one of $(abi-variants)) > +endif > + > +abi-lp64-condition := defined __loongarch_lp64 > diff --git a/sysdeps/loongarch/configure b/sysdeps/loongarch/configure > new file mode 100644 > index 0000000000..43b54d4965 > --- /dev/null > +++ b/sysdeps/loongarch/configure > @@ -0,0 +1,5 @@ > +# This file is generated from configure.ac by Autoconf. DO NOT EDIT! > + # Local configure fragment for sysdeps/loongarch/elf. > + > +$as_echo "#define HIDDEN_VAR_NEEDS_DYNAMIC_RELOC 1" >>confdefs.h > + > diff --git a/sysdeps/loongarch/configure.ac b/sysdeps/loongarch/configure.ac > new file mode 100644 > index 0000000000..f744367bf3 > --- /dev/null > +++ b/sysdeps/loongarch/configure.ac > @@ -0,0 +1,6 @@ > +GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. > +# Local configure fragment for sysdeps/loongarch/elf. > + > +dnl It is always possible to access static and hidden symbols in an > +dnl position independent way. > +AC_DEFINE(HIDDEN_VAR_NEEDS_DYNAMIC_RELOC) > diff --git a/sysdeps/loongarch/lp64/Implies-after b/sysdeps/loongarch/lp64/Implies-after > new file mode 100644 > index 0000000000..a8cae95f9d > --- /dev/null > +++ b/sysdeps/loongarch/lp64/Implies-after > @@ -0,0 +1 @@ > +wordsize-64 > diff --git a/sysdeps/loongarch/preconfigure b/sysdeps/loongarch/preconfigure > new file mode 100644 > index 0000000000..118963cda6 > --- /dev/null > +++ b/sysdeps/loongarch/preconfigure > @@ -0,0 +1,53 @@ > +# This file is generated from configure.ac by Autoconf. DO NOT EDIT! > +# Local preconfigure fragment for sysdeps/loongarch > + > +case "$machine" in > +loongarch*) > + > + abi=`$CC $CFLAGS $CPPFLAGS -E -dM -xc /dev/null | sed -n 's/^#define __loongarch_\(lp64\|ilp32\).*/\1/p'` > + float_abi=`$CC $CFLAGS $CPPFLAGS -E -dM -xc /dev/null | sed -n 's/^#define __loongarch_\(soft\|single\|double\)_float.*/\1/p'` > + > + with_fp_cond="!defined __loongarch_soft_float" > + > + case "$float_abi" in > + soft) > + abi_flen=0 > + as_fn_error 1 "loongarch does not yet support soft floating-point ABI!!" "$LINENO" 5 > + ;; > + single) > + as_fn_error 1 "glibc does not yet support the single floating-point ABI!!" "$LINENO" 5 > + ;; > + double) > + abi_flen=64 > + ;; > + *) > + as_fn_error 1 "Unable to determine floating-point ABI!!" "$LINENO" 5 > + ;; > + esac > + > + case "$abi" in > + ilp32) > + as_fn_error 1 "loongarch does not yet support ilp32 ABI!!" "$LINENO" 5 > + ;; > + lp64) > + grlen=64 > + machine=loongarch/lp64 > + ;; > + *) > + as_fn_error 1 "Unable to determine GRLEN!!" "$LINENO" 5 > + ;; > + esac > + > + cat >>confdefs.h <<_ACEOF > +#define LOONGARCH_ABI_GRLEN $grlen > +_ACEOF > + > + cat >>confdefs.h <<_ACEOF > +#define LOONGARCH_ABI_FRLEN $abi_flen > +_ACEOF > + > + > + base_machine=loongarch > + ;; > +esac > + > diff --git a/sysdeps/loongarch/preconfigure.ac b/sysdeps/loongarch/preconfigure.ac > new file mode 100644 > index 0000000000..1aba743c15 > --- /dev/null > +++ b/sysdeps/loongarch/preconfigure.ac > @@ -0,0 +1,47 @@ > +GLIBC_PROVIDES[]dnl See aclocal.m4 in the top level source directory. > +# Local preconfigure fragment for sysdeps/loongarch > + > +case "$machine" in > +loongarch*) > + > + abi=`$CC $CFLAGS $CPPFLAGS -E -dM -xc /dev/null | sed -n 's/^#define __loongarch_\(lp64\|ilp32\).*/\1/p'` > + float_abi=`$CC $CFLAGS $CPPFLAGS -E -dM -xc /dev/null | sed -n 's/^#define __loongarch_\(soft\|single\|double\)_float.*/\1/p'` > + > + with_fp_cond="!defined __loongarch_soft_float" > + > + case "$float_abi" in > + soft) > + abi_flen=0 > + AC_MSG_ERROR([loongarch does not yet support soft floating-point ABI!!], 1) > + ;; > + single) > + AC_MSG_ERROR([glibc does not yet support the single floating-point ABI!!], 1) > + ;; > + double) > + abi_flen=64 > + ;; > + *) > + AC_MSG_ERROR([Unable to determine floating-point ABI!!], 1) > + ;; > + esac > + > + case "$abi" in > + ilp32) > + AC_MSG_ERROR([loongarch does not yet support ilp32 ABI!!], 1) > + ;; > + lp64) > + grlen=64 > + machine=loongarch/lp64 > + ;; > + *) > + AC_MSG_ERROR([Unable to determine GRLEN!!], 1) > + ;; > + esac > + > + AC_DEFINE_UNQUOTED([LOONGARCH_ABI_GRLEN], [$grlen]) > + AC_DEFINE_UNQUOTED([LOONGARCH_ABI_FRLEN], [$abi_flen]) > + > + base_machine=loongarch > + ;; > +esac > + Ok. > diff --git a/sysdeps/loongarch/sys/regdef.h b/sysdeps/loongarch/sys/regdef.h > new file mode 100644 > index 0000000000..d266df372d > --- /dev/null > +++ b/sysdeps/loongarch/sys/regdef.h > @@ -0,0 +1,93 @@ > +/* Register Macro definitions > + Copyright (C) 2022 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library. If not, see > + <https://www.gnu.org/licenses/>. */ > + > +#ifndef _SYS_REGDEF_H > +#define _SYS_REGDEF_H > + > +#define zero $r0 > +#define ra $r1 > +#define tp $r2 > +#define sp $r3 > +#define a0 $r4 > +#define a1 $r5 > +#define a2 $r6 > +#define a3 $r7 > +#define a4 $r8 > +#define a5 $r9 > +#define a6 $r10 > +#define a7 $r11 > +#define v0 $r4 > +#define v1 $r5 > +#define t0 $r12 > +#define t1 $r13 > +#define t2 $r14 > +#define t3 $r15 > +#define t4 $r16 > +#define t5 $r17 > +#define t6 $r18 > +#define t7 $r19 > +#define t8 $r20 > +#define x $r21 > +#define fp $r22 > +#define s0 $r23 > +#define s1 $r24 > +#define s2 $r25 > +#define s3 $r26 > +#define s4 $r27 > +#define s5 $r28 > +#define s6 $r29 > +#define s7 $r30 > +#define s8 $r31 > + > +#define fa0 $f0 > +#define fa1 $f1 > +#define fa2 $f2 > +#define fa3 $f3 > +#define fa4 $f4 > +#define fa5 $f5 > +#define fa6 $f6 > +#define fa7 $f7 > +#define fv0 $f0 > +#define fv1 $f1 > +#define ft0 $f8 > +#define ft1 $f9 > +#define ft2 $f10 > +#define ft3 $f11 > +#define ft4 $f12 > +#define ft5 $f13 > +#define ft6 $f14 > +#define ft7 $f15 > +#define ft8 $f16 > +#define ft9 $f17 > +#define ft10 $f18 > +#define ft11 $f19 > +#define ft12 $f20 > +#define ft13 $f21 > +#define ft14 $f22 > +#define ft15 $f23 > +#define fs0 $f24 > +#define fs1 $f25 > +#define fs2 $f26 > +#define fs3 $f27 > +#define fs4 $f28 > +#define fs5 $f29 > +#define fs6 $f30 > +#define fs7 $f31 > + > +#endif /* _SYS_REGDEF_H */ > diff --git a/sysdeps/unix/sysv/linux/loongarch/Implies b/sysdeps/unix/sysv/linux/loongarch/Implies > new file mode 100644 > index 0000000000..e52b1ac310 > --- /dev/null > +++ b/sysdeps/unix/sysv/linux/loongarch/Implies > @@ -0,0 +1 @@ > +loongarch/nptl > diff --git a/sysdeps/unix/sysv/linux/loongarch/Makefile b/sysdeps/unix/sysv/linux/loongarch/Makefile > new file mode 100644 > index 0000000000..730bfa7465 > --- /dev/null > +++ b/sysdeps/unix/sysv/linux/loongarch/Makefile > @@ -0,0 +1,4 @@ > +ifeq ($(subdir),stdlib) > +gen-as-const-headers += ucontext_i.sym > +endif > + > diff --git a/sysdeps/unix/sysv/linux/loongarch/configure b/sysdeps/unix/sysv/linux/loongarch/configure > new file mode 100644 > index 0000000000..60a410303e > --- /dev/null > +++ b/sysdeps/unix/sysv/linux/loongarch/configure > @@ -0,0 +1,174 @@ > +# This file is generated from configure.ac by Autoconf. DO NOT EDIT! > + # Local configure fragment for sysdeps/unix/sysv/linux/loongarch. > + > +arch_minimum_kernel=5.19.0 > + > +libc_cv_loongarch_int_abi=no > + > + > +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 > +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } > +if ${ac_cv_path_GREP+:} false; then : > + $as_echo_n "(cached) " >&6 > +else > + if test -z "$GREP"; then > + ac_path_GREP_found=false > + # Loop through the user's path and test for each of PROGNAME-LIST > + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR > +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin > +do > + IFS=$as_save_IFS > + test -z "$as_dir" && as_dir=. > + for ac_prog in grep ggrep; do > + for ac_exec_ext in '' $ac_executable_extensions; do > + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" > + as_fn_executable_p "$ac_path_GREP" || continue > +# Check for GNU ac_path_GREP and select it if it is found. > + # Check for GNU $ac_path_GREP > +case `"$ac_path_GREP" --version 2>&1` in > +*GNU*) > + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; > +*) > + ac_count=0 > + $as_echo_n 0123456789 >"conftest.in" > + while : > + do > + cat "conftest.in" "conftest.in" >"conftest.tmp" > + mv "conftest.tmp" "conftest.in" > + cp "conftest.in" "conftest.nl" > + $as_echo 'GREP' >> "conftest.nl" > + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break > + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break > + as_fn_arith $ac_count + 1 && ac_count=$as_val > + if test $ac_count -gt ${ac_path_GREP_max-0}; then > + # Best one so far, save it but keep looking for a better one > + ac_cv_path_GREP="$ac_path_GREP" > + ac_path_GREP_max=$ac_count > + fi > + # 10*(2^10) chars as input seems more than enough > + test $ac_count -gt 10 && break > + done > + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; > +esac > + > + $ac_path_GREP_found && break 3 > + done > + done > + done > +IFS=$as_save_IFS > + if test -z "$ac_cv_path_GREP"; then > + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 > + fi > +else > + ac_cv_path_GREP=$GREP > +fi > + > +fi > +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 > +$as_echo "$ac_cv_path_GREP" >&6; } > + GREP="$ac_cv_path_GREP" > + > + > +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 > +$as_echo_n "checking for egrep... " >&6; } > +if ${ac_cv_path_EGREP+:} false; then : > + $as_echo_n "(cached) " >&6 > +else > + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 > + then ac_cv_path_EGREP="$GREP -E" > + else > + if test -z "$EGREP"; then > + ac_path_EGREP_found=false > + # Loop through the user's path and test for each of PROGNAME-LIST > + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR > +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin > +do > + IFS=$as_save_IFS > + test -z "$as_dir" && as_dir=. > + for ac_prog in egrep; do > + for ac_exec_ext in '' $ac_executable_extensions; do > + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" > + as_fn_executable_p "$ac_path_EGREP" || continue > +# Check for GNU ac_path_EGREP and select it if it is found. > + # Check for GNU $ac_path_EGREP > +case `"$ac_path_EGREP" --version 2>&1` in > +*GNU*) > + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; > +*) > + ac_count=0 > + $as_echo_n 0123456789 >"conftest.in" > + while : > + do > + cat "conftest.in" "conftest.in" >"conftest.tmp" > + mv "conftest.tmp" "conftest.in" > + cp "conftest.in" "conftest.nl" > + $as_echo 'EGREP' >> "conftest.nl" > + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break > + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break > + as_fn_arith $ac_count + 1 && ac_count=$as_val > + if test $ac_count -gt ${ac_path_EGREP_max-0}; then > + # Best one so far, save it but keep looking for a better one > + ac_cv_path_EGREP="$ac_path_EGREP" > + ac_path_EGREP_max=$ac_count > + fi > + # 10*(2^10) chars as input seems more than enough > + test $ac_count -gt 10 && break > + done > + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; > +esac > + > + $ac_path_EGREP_found && break 3 > + done > + done > + done > +IFS=$as_save_IFS > + if test -z "$ac_cv_path_EGREP"; then > + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 > + fi > +else > + ac_cv_path_EGREP=$EGREP > +fi > + > + fi > +fi > +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 > +$as_echo "$ac_cv_path_EGREP" >&6; } > + EGREP="$ac_cv_path_EGREP" > + > + > +cat confdefs.h - <<_ACEOF >conftest.$ac_ext > +/* end confdefs.h. */ > +__SIZEOF_INT__ __SIZEOF_LONG__ __SIZEOF_POINTER__ > + > +_ACEOF > +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | > + $EGREP "4 8 8" >/dev/null 2>&1; then : > + libc_cv_loongarch_int_abi=lp64 > +fi > +rm -f conftest* > + > +if test $libc_cv_loongarch_int_abi = no; then > + as_fn_error $? "Unable to determine integer ABI" "$LINENO" 5 > +fi > + > +config_vars="$config_vars > +default-abi = $libc_cv_loongarch_int_abi" > + > +case $libc_cv_loongarch_int_abi in > +lp64) > + test -n "$libc_cv_slibdir" || > +case "$prefix" in > +/usr | /usr/) > + libc_cv_slibdir='/lib64' > + libc_cv_rtlddir='/lib64' > + if test "$libdir" = '${exec_prefix}/lib'; then > + libdir='${exec_prefix}/lib64'; > + # Locale data can be shared between 32-bit and 64-bit libraries. > + libc_cv_complocaledir='${exec_prefix}/lib/locale' > + fi > + ;; > +esac > + ;; > +esac > + > +ldd_rewrite_script=sysdeps/unix/sysv/linux/loongarch/ldd-rewrite.sed > diff --git a/sysdeps/unix/sysv/linux/loongarch/configure.ac b/sysdeps/unix/sysv/linux/loongarch/configure.ac > new file mode 100644 > index 0000000000..7de1e95ff6 > --- /dev/null > +++ b/sysdeps/unix/sysv/linux/loongarch/configure.ac > @@ -0,0 +1,22 @@ > +sinclude(./aclocal.m4)dnl Autoconf lossage > +GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. > +# Local configure fragment for sysdeps/unix/sysv/linux/loongarch. > + > +arch_minimum_kernel=5.19.0 > + > +libc_cv_loongarch_int_abi=no > +AC_EGREP_CPP(4 8 8, [__SIZEOF_INT__ __SIZEOF_LONG__ __SIZEOF_POINTER__ > + ], libc_cv_loongarch_int_abi=lp64) > +if test $libc_cv_loongarch_int_abi = no; then > + AC_MSG_ERROR([Unable to determine integer ABI]) > +fi > + > +LIBC_CONFIG_VAR([default-abi], [$libc_cv_loongarch_int_abi]) > + > +case $libc_cv_loongarch_int_abi in > +lp64) > + LIBC_SLIBDIR_RTLDDIR([lib64], [lib64]) > + ;; > +esac > + > +ldd_rewrite_script=sysdeps/unix/sysv/linux/loongarch/ldd-rewrite.sed > diff --git a/sysdeps/unix/sysv/linux/loongarch/ldd-rewrite.sed b/sysdeps/unix/sysv/linux/loongarch/ldd-rewrite.sed > new file mode 100644 > index 0000000000..f8976fd239 > --- /dev/null > +++ b/sysdeps/unix/sysv/linux/loongarch/ldd-rewrite.sed > @@ -0,0 +1 @@ > +s_^\(RTLDLIST=\)\(.*lib\)\(\|64\|32\)\(/[^/]*\)\(-loongarch\)\(64\|32\)\(\.so\.[0-9.]*\)[[:blank:]]*$_\1"\2\4\7 \264\4-loongarch64\7 \232\4-loongarch32\7"_ Ok. > diff --git a/sysdeps/unix/sysv/linux/loongarch/lp64/Implies b/sysdeps/unix/sysv/linux/loongarch/lp64/Implies > new file mode 100644 > index 0000000000..117c2b8efe > --- /dev/null > +++ b/sysdeps/unix/sysv/linux/loongarch/lp64/Implies > @@ -0,0 +1,3 @@ > +unix/sysv/linux/loongarch > +unix/sysv/linux/generic > +unix/sysv/linux/wordsize-64 > diff --git a/sysdeps/unix/sysv/linux/loongarch/shlib-versions b/sysdeps/unix/sysv/linux/loongarch/shlib-versions > new file mode 100644 > index 0000000000..dc2220b4be > --- /dev/null > +++ b/sysdeps/unix/sysv/linux/loongarch/shlib-versions > @@ -0,0 +1,7 @@ > +DEFAULT GLIBC_2.36 > + > +%if LOONGARCH_ABI_GRLEN == 64 && LOONGARCH_ABI_FRLEN == 64 > +ld=ld-linux-loongarch-lp64d.so.1 > +%else > +%error cannot determine ABI > +%endif ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v7 11/13] LoongArch: Hard Float Support 2022-07-19 1:22 [PATCH v7 09/13] LoongArch: Add ABI Lists caiyinyu 2022-07-19 1:22 ` [PATCH v7 10/13] LoongArch: Build Infastructure caiyinyu @ 2022-07-19 1:22 ` caiyinyu 2022-07-21 21:03 ` Adhemerval Zanella Netto 2022-07-19 1:22 ` [PATCH v7 12/13] LoongArch: Update build-many-glibcs.py for the LoongArch Port caiyinyu 2022-07-19 1:22 ` [PATCH v7 13/13] LoongArch: Update NEWS and README for the LoongArch port caiyinyu 3 siblings, 1 reply; 9+ messages in thread From: caiyinyu @ 2022-07-19 1:22 UTC (permalink / raw) To: adhemerval.zanella, libc-alpha, joseph_myers, carlos, i.swmail; +Cc: caiyinyu --- sysdeps/loongarch/fpu/fclrexcpt.c | 46 + sysdeps/loongarch/fpu/fedisblxcpt.c | 39 + sysdeps/loongarch/fpu/feenablxcpt.c | 39 + sysdeps/loongarch/fpu/fegetenv.c | 31 + sysdeps/loongarch/fpu/fegetexcept.c | 32 + sysdeps/loongarch/fpu/fegetmode.c | 27 + sysdeps/loongarch/fpu/fegetround.c | 33 + sysdeps/loongarch/fpu/feholdexcpt.c | 40 + sysdeps/loongarch/fpu/fenv_libc.h | 30 + sysdeps/loongarch/fpu/fesetenv.c | 42 + sysdeps/loongarch/fpu/fesetexcept.c | 32 + sysdeps/loongarch/fpu/fesetmode.c | 38 + sysdeps/loongarch/fpu/fesetround.c | 44 + sysdeps/loongarch/fpu/feupdateenv.c | 43 + sysdeps/loongarch/fpu/fgetexcptflg.c | 38 + sysdeps/loongarch/fpu/fraiseexcpt.c | 80 + sysdeps/loongarch/fpu/fsetexcptflg.c | 41 + sysdeps/loongarch/fpu/ftestexcept.c | 32 + .../loongarch/fpu/math-use-builtins-sqrt.h | 4 + sysdeps/loongarch/lp64/libm-test-ulps | 1412 +++++++++++++++++ sysdeps/loongarch/lp64/libm-test-ulps-name | 1 + sysdeps/loongarch/math_private.h | 248 +++ 22 files changed, 2372 insertions(+) create mode 100644 sysdeps/loongarch/fpu/fclrexcpt.c create mode 100644 sysdeps/loongarch/fpu/fedisblxcpt.c create mode 100644 sysdeps/loongarch/fpu/feenablxcpt.c create mode 100644 sysdeps/loongarch/fpu/fegetenv.c create mode 100644 sysdeps/loongarch/fpu/fegetexcept.c create mode 100644 sysdeps/loongarch/fpu/fegetmode.c create mode 100644 sysdeps/loongarch/fpu/fegetround.c create mode 100644 sysdeps/loongarch/fpu/feholdexcpt.c create mode 100644 sysdeps/loongarch/fpu/fenv_libc.h create mode 100644 sysdeps/loongarch/fpu/fesetenv.c create mode 100644 sysdeps/loongarch/fpu/fesetexcept.c create mode 100644 sysdeps/loongarch/fpu/fesetmode.c create mode 100644 sysdeps/loongarch/fpu/fesetround.c create mode 100644 sysdeps/loongarch/fpu/feupdateenv.c create mode 100644 sysdeps/loongarch/fpu/fgetexcptflg.c create mode 100644 sysdeps/loongarch/fpu/fraiseexcpt.c create mode 100644 sysdeps/loongarch/fpu/fsetexcptflg.c create mode 100644 sysdeps/loongarch/fpu/ftestexcept.c create mode 100644 sysdeps/loongarch/fpu/math-use-builtins-sqrt.h create mode 100644 sysdeps/loongarch/lp64/libm-test-ulps create mode 100644 sysdeps/loongarch/lp64/libm-test-ulps-name create mode 100644 sysdeps/loongarch/math_private.h diff --git a/sysdeps/loongarch/fpu/fclrexcpt.c b/sysdeps/loongarch/fpu/fclrexcpt.c new file mode 100644 index 0000000000..e9f33a1658 --- /dev/null +++ b/sysdeps/loongarch/fpu/fclrexcpt.c @@ -0,0 +1,46 @@ +/* Clear given exceptions in current floating-point environment. + Copyright (C) 2022 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library. If not, see + <https://www.gnu.org/licenses/>. */ + +#include <fenv.h> +#include <fenv_libc.h> +#include <fpu_control.h> + +int +feclearexcept (int excepts) +{ + int cw; + + /* Mask out unsupported bits/exceptions. */ + excepts &= FE_ALL_EXCEPT; + + /* Read the complete control word. */ + _FPU_GETCW (cw); + + /* Clear exception flag bits and cause bits. If the cause bit is not + cleared, the next CTC instruction (just below) will re-generate the + exception. */ + + cw &= ~(excepts | (excepts << CAUSE_SHIFT)); + + /* Put the new data in effect. */ + _FPU_SETCW (cw); + + /* Success. */ + return 0; +} +libm_hidden_def (feclearexcept) diff --git a/sysdeps/loongarch/fpu/fedisblxcpt.c b/sysdeps/loongarch/fpu/fedisblxcpt.c new file mode 100644 index 0000000000..add62946fd --- /dev/null +++ b/sysdeps/loongarch/fpu/fedisblxcpt.c @@ -0,0 +1,39 @@ +/* Disable floating-point exceptions. + Copyright (C) 2022 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library. If not, see + <https://www.gnu.org/licenses/>. */ + +#include <fenv.h> +#include <fenv_libc.h> +#include <fpu_control.h> + +int +fedisableexcept (int excepts) +{ + unsigned int new_exc, old_exc; + + /* Get the current control word. */ + _FPU_GETCW (new_exc); + + old_exc = (new_exc & ENABLE_MASK) << ENABLE_SHIFT; + + excepts &= FE_ALL_EXCEPT; + + new_exc &= ~(excepts >> ENABLE_SHIFT); + _FPU_SETCW (new_exc); + + return old_exc; +} diff --git a/sysdeps/loongarch/fpu/feenablxcpt.c b/sysdeps/loongarch/fpu/feenablxcpt.c new file mode 100644 index 0000000000..ed809341f6 --- /dev/null +++ b/sysdeps/loongarch/fpu/feenablxcpt.c @@ -0,0 +1,39 @@ +/* Enable floating-point exceptions. + Copyright (C) 2022 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library. If not, see + <https://www.gnu.org/licenses/>. */ + +#include <fenv.h> +#include <fenv_libc.h> +#include <fpu_control.h> + +int +feenableexcept (int excepts) +{ + unsigned int new_exc, old_exc; + + /* Get the current control word. */ + _FPU_GETCW (new_exc); + + old_exc = (new_exc & ENABLE_MASK) << ENABLE_SHIFT; + + excepts &= FE_ALL_EXCEPT; + + new_exc |= excepts >> ENABLE_SHIFT; + _FPU_SETCW (new_exc); + + return old_exc; +} diff --git a/sysdeps/loongarch/fpu/fegetenv.c b/sysdeps/loongarch/fpu/fegetenv.c new file mode 100644 index 0000000000..5a2a3d34dc --- /dev/null +++ b/sysdeps/loongarch/fpu/fegetenv.c @@ -0,0 +1,31 @@ +/* Store current floating-point environment. + Copyright (C) 2022 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library. If not, see + <https://www.gnu.org/licenses/>. */ + +#include <fenv.h> +#include <fpu_control.h> + +int +__fegetenv (fenv_t *envp) +{ + _FPU_GETCW (*envp); + + /* Success. */ + return 0; +} +libm_hidden_def (__fegetenv) weak_alias (__fegetenv, fegetenv) +libm_hidden_weak (fegetenv) diff --git a/sysdeps/loongarch/fpu/fegetexcept.c b/sysdeps/loongarch/fpu/fegetexcept.c new file mode 100644 index 0000000000..ba1c1466f4 --- /dev/null +++ b/sysdeps/loongarch/fpu/fegetexcept.c @@ -0,0 +1,32 @@ +/* Get enabled floating-point exceptions. + Copyright (C) 2022 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library. If not, see + <https://www.gnu.org/licenses/>. */ + +#include <fenv.h> +#include <fenv_libc.h> +#include <fpu_control.h> + +int +fegetexcept (void) +{ + unsigned int exc; + + /* Get the current control word. */ + _FPU_GETCW (exc); + + return (exc & ENABLE_MASK) << ENABLE_SHIFT; +} diff --git a/sysdeps/loongarch/fpu/fegetmode.c b/sysdeps/loongarch/fpu/fegetmode.c new file mode 100644 index 0000000000..e3517e34f6 --- /dev/null +++ b/sysdeps/loongarch/fpu/fegetmode.c @@ -0,0 +1,27 @@ +/* Store current floating-point control modes. + Copyright (C) 2022 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <fenv.h> +#include <fpu_control.h> + +int +fegetmode (femode_t *modep) +{ + _FPU_GETCW (*modep); + return 0; +} diff --git a/sysdeps/loongarch/fpu/fegetround.c b/sysdeps/loongarch/fpu/fegetround.c new file mode 100644 index 0000000000..ff6113eb04 --- /dev/null +++ b/sysdeps/loongarch/fpu/fegetround.c @@ -0,0 +1,33 @@ +/* Return current rounding direction. + Copyright (C) 2022 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library. If not, see + <https://www.gnu.org/licenses/>. */ + +#include <fenv.h> +#include <fpu_control.h> + +int +__fegetround (void) +{ + int cw; + + /* Get control word. */ + _FPU_GETCW (cw); + + return cw & _FPU_RC_MASK; +} +libm_hidden_def (__fegetround) weak_alias (__fegetround, fegetround) +libm_hidden_weak (fegetround) diff --git a/sysdeps/loongarch/fpu/feholdexcpt.c b/sysdeps/loongarch/fpu/feholdexcpt.c new file mode 100644 index 0000000000..e4f9f6a23b --- /dev/null +++ b/sysdeps/loongarch/fpu/feholdexcpt.c @@ -0,0 +1,40 @@ +/* Store current floating-point environment and clear exceptions. + Copyright (C) 2022 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library. If not, see + <https://www.gnu.org/licenses/>. */ + +#include <fenv.h> +#include <fpu_control.h> + +int +__feholdexcept (fenv_t *envp) +{ + fpu_control_t cw; + + /* Save the current state. */ + _FPU_GETCW (cw); + envp->__fp_control_register = cw; + + /* Clear all exception enable bits and flags. */ + cw &= ~(_FPU_MASK_V | _FPU_MASK_Z | _FPU_MASK_O | _FPU_MASK_U | _FPU_MASK_I + | FE_ALL_EXCEPT); + _FPU_SETCW (cw); + + return 0; +} + +libm_hidden_def (__feholdexcept) weak_alias (__feholdexcept, feholdexcept) +libm_hidden_weak (feholdexcept) diff --git a/sysdeps/loongarch/fpu/fenv_libc.h b/sysdeps/loongarch/fpu/fenv_libc.h new file mode 100644 index 0000000000..8360ae0377 --- /dev/null +++ b/sysdeps/loongarch/fpu/fenv_libc.h @@ -0,0 +1,30 @@ +/* Internal libc stuff for floating point environment routines. + Copyright (C) 2022 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library. If not, see + <https://www.gnu.org/licenses/>. */ + +#ifndef _FENV_LIBC_H +#define _FENV_LIBC_H 1 + +/* Mask for enabling exceptions and for the CAUSE bits. */ +#define ENABLE_MASK 0x0000001FU +#define CAUSE_MASK 0x1F000000U + +/* Shift for FE_* flags to get up to the ENABLE bits and the CAUSE bits. */ +#define ENABLE_SHIFT 16 +#define CAUSE_SHIFT 8 + +#endif /* _FENV_LIBC_H */ diff --git a/sysdeps/loongarch/fpu/fesetenv.c b/sysdeps/loongarch/fpu/fesetenv.c new file mode 100644 index 0000000000..c10bd11ef9 --- /dev/null +++ b/sysdeps/loongarch/fpu/fesetenv.c @@ -0,0 +1,42 @@ +/* Install given floating-point environment. + Copyright (C) 2022 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library. If not, see + <https://www.gnu.org/licenses/>. */ + +#include <fenv.h> +#include <fpu_control.h> + +int +__fesetenv (const fenv_t *envp) +{ + fpu_control_t cw; + + /* Read first current state to flush fpu pipeline. */ + _FPU_GETCW (cw); + + if (envp == FE_DFL_ENV) + _FPU_SETCW (_FPU_DEFAULT); + else if (envp == FE_NOMASK_ENV) + _FPU_SETCW (_FPU_IEEE); + else + _FPU_SETCW (envp->__fp_control_register); + + /* Success. */ + return 0; +} + +libm_hidden_def (__fesetenv) weak_alias (__fesetenv, fesetenv) +libm_hidden_weak (fesetenv) diff --git a/sysdeps/loongarch/fpu/fesetexcept.c b/sysdeps/loongarch/fpu/fesetexcept.c new file mode 100644 index 0000000000..ad76d52d9e --- /dev/null +++ b/sysdeps/loongarch/fpu/fesetexcept.c @@ -0,0 +1,32 @@ +/* Set given exception flags. + Copyright (C) 2022 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <fenv.h> +#include <fpu_control.h> + +int +fesetexcept (int excepts) +{ + fpu_control_t temp; + + _FPU_GETCW (temp); + temp |= excepts & FE_ALL_EXCEPT; + _FPU_SETCW (temp); + + return 0; +} diff --git a/sysdeps/loongarch/fpu/fesetmode.c b/sysdeps/loongarch/fpu/fesetmode.c new file mode 100644 index 0000000000..fc52fc114b --- /dev/null +++ b/sysdeps/loongarch/fpu/fesetmode.c @@ -0,0 +1,38 @@ +/* Install given floating-point control modes. + Copyright (C) 2022 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <fenv.h> +#include <fpu_control.h> + +#define FCSR_STATUS 0x1f1f0000 + +int +fesetmode (const femode_t *modep) +{ + fpu_control_t cw; + + _FPU_GETCW (cw); + cw &= FCSR_STATUS; + if (modep == FE_DFL_MODE) + cw |= _FPU_DEFAULT; + else + cw |= *modep & ~FCSR_STATUS; + _FPU_SETCW (cw); + + return 0; +} diff --git a/sysdeps/loongarch/fpu/fesetround.c b/sysdeps/loongarch/fpu/fesetround.c new file mode 100644 index 0000000000..32acac5f96 --- /dev/null +++ b/sysdeps/loongarch/fpu/fesetround.c @@ -0,0 +1,44 @@ +/* Set current rounding direction. + Copyright (C) 2022 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library. If not, see + <https://www.gnu.org/licenses/>. */ + +#include <fenv.h> +#include <fpu_control.h> + +int +__fesetround (int round) +{ + fpu_control_t cw; + + if ((round & ~_FPU_RC_MASK) != 0) + /* ROUND is no valid rounding mode. */ + return 1; + + /* Get current state. */ + _FPU_GETCW (cw); + + /* Set rounding bits. */ + cw &= ~_FPU_RC_MASK; + cw |= round; + /* Set new state. */ + _FPU_SETCW (cw); + + return 0; +} + +libm_hidden_def (__fesetround) weak_alias (__fesetround, fesetround) +libm_hidden_weak (fesetround) diff --git a/sysdeps/loongarch/fpu/feupdateenv.c b/sysdeps/loongarch/fpu/feupdateenv.c new file mode 100644 index 0000000000..5ad862a61d --- /dev/null +++ b/sysdeps/loongarch/fpu/feupdateenv.c @@ -0,0 +1,43 @@ +/* Install given floating-point environment and raise exceptions. + Copyright (C) 2022 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library. If not, see + <https://www.gnu.org/licenses/>. */ + +#include <fenv.h> +#include <fpu_control.h> + +int +__feupdateenv (const fenv_t *envp) +{ + int temp; + + /* Save current exceptions. */ + _FPU_GETCW (temp); + temp &= FE_ALL_EXCEPT; + + /* Install new environment. */ + __fesetenv (envp); + + /* Raise the safed exception. Incidently for us the implementation + defined format of the values in objects of type fexcept_t is the + same as the ones specified using the FE_* constants. */ + __feraiseexcept (temp); + + /* Success. */ + return 0; +} +libm_hidden_def (__feupdateenv) weak_alias (__feupdateenv, feupdateenv) +libm_hidden_weak (feupdateenv) diff --git a/sysdeps/loongarch/fpu/fgetexcptflg.c b/sysdeps/loongarch/fpu/fgetexcptflg.c new file mode 100644 index 0000000000..6130c632c9 --- /dev/null +++ b/sysdeps/loongarch/fpu/fgetexcptflg.c @@ -0,0 +1,38 @@ +/* Store current representation for exceptions. + Copyright (C) 2022 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library. If not, see + <https://www.gnu.org/licenses/>. */ + +#include <fenv.h> +#include <fpu_control.h> + +int +fegetexceptflag (fexcept_t *flagp, int excepts) +{ + fpu_control_t temp; + + /* Get the current exceptions. */ + _FPU_GETCW (temp); + + /* We only save the relevant bits here. In particular, care has to be + taken with the CAUSE bits, as an inadvertent restore later on could + generate unexpected exceptions. */ + + *flagp = temp & excepts & FE_ALL_EXCEPT; + + /* Success. */ + return 0; +} diff --git a/sysdeps/loongarch/fpu/fraiseexcpt.c b/sysdeps/loongarch/fpu/fraiseexcpt.c new file mode 100644 index 0000000000..c1c612242f --- /dev/null +++ b/sysdeps/loongarch/fpu/fraiseexcpt.c @@ -0,0 +1,80 @@ +/* Raise given exceptions. + Copyright (C) 2022 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library. If not, see + <https://www.gnu.org/licenses/>. */ + +#include <fenv.h> +#include <fpu_control.h> +#include <float.h> + +int +__feraiseexcept (int excepts) +{ + const float fp_zero = 0.0f; + const float fp_one = 1.0f; + const float fp_max = FLT_MAX; + const float fp_min = FLT_MIN; + const float fp_1e32 = 1.0e32f; + const float fp_two = 2.0f; + const float fp_three = 3.0f; + + /* Raise exceptions represented by EXPECTS. But we must raise only + one signal at a time. It is important that if the overflow/underflow + exception and the inexact exception are given at the same time, + the overflow/underflow exception follows the inexact exception. */ + + /* First: invalid exception. */ + if (FE_INVALID & excepts) + __asm__ __volatile__("fdiv.s $f0,%0,%0\n\t" + : + : "f"(fp_zero) + : "$f0"); + + /* Next: division by zero. */ + if (FE_DIVBYZERO & excepts) + __asm__ __volatile__("fdiv.s $f0,%0,%1\n\t" + : + : "f"(fp_one), "f"(fp_zero) + : "$f0"); + + /* Next: overflow. */ + if (FE_OVERFLOW & excepts) + /* There's no way to raise overflow without also raising inexact. */ + __asm__ __volatile__("fadd.s $f0,%0,%1\n\t" + : + : "f"(fp_max), "f"(fp_1e32) + : "$f0"); + + /* Next: underflow. */ + if (FE_UNDERFLOW & excepts) + __asm__ __volatile__("fdiv.s $f0,%0,%1\n\t" + : + : "f"(fp_min), "f"(fp_three) + : "$f0"); + + /* Last: inexact. */ + if (FE_INEXACT & excepts) + __asm__ __volatile__("fdiv.s $f0, %0, %1\n\t" + : + : "f"(fp_two), "f"(fp_three) + : "$f0"); + + /* Success. */ + return 0; +} + +libm_hidden_def (__feraiseexcept) weak_alias (__feraiseexcept, feraiseexcept) +libm_hidden_weak (feraiseexcept) diff --git a/sysdeps/loongarch/fpu/fsetexcptflg.c b/sysdeps/loongarch/fpu/fsetexcptflg.c new file mode 100644 index 0000000000..9c135a663d --- /dev/null +++ b/sysdeps/loongarch/fpu/fsetexcptflg.c @@ -0,0 +1,41 @@ +/* Set floating-point environment exception handling. + Copyright (C) 2022 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library. If not, see + <https://www.gnu.org/licenses/>. */ + +#include <fenv.h> +#include <fpu_control.h> + +int +fesetexceptflag (const fexcept_t *flagp, int excepts) +{ + fpu_control_t temp; + + /* Get the current exceptions. */ + _FPU_GETCW (temp); + + /* Make sure the flags we want restored are legal. */ + excepts &= FE_ALL_EXCEPT; + + /* Now clear the bits called for, and copy them in from flagp. Note that + we ignore all non-flag bits from *flagp, so they don't matter. */ + temp = (temp & ~excepts) | (*flagp & excepts); + + _FPU_SETCW (temp); + + /* Success. */ + return 0; +} diff --git a/sysdeps/loongarch/fpu/ftestexcept.c b/sysdeps/loongarch/fpu/ftestexcept.c new file mode 100644 index 0000000000..b9563b7ae1 --- /dev/null +++ b/sysdeps/loongarch/fpu/ftestexcept.c @@ -0,0 +1,32 @@ +/* Test exception in current environment. + Copyright (C) 2022 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library. If not, see + <https://www.gnu.org/licenses/>. */ + +#include <fenv.h> +#include <fpu_control.h> + +int +fetestexcept (int excepts) +{ + int cw; + + /* Get current control word. */ + _FPU_GETCW (cw); + + return cw & excepts & FE_ALL_EXCEPT; +} +libm_hidden_def (fetestexcept) diff --git a/sysdeps/loongarch/fpu/math-use-builtins-sqrt.h b/sysdeps/loongarch/fpu/math-use-builtins-sqrt.h new file mode 100644 index 0000000000..e94c915ba6 --- /dev/null +++ b/sysdeps/loongarch/fpu/math-use-builtins-sqrt.h @@ -0,0 +1,4 @@ +#define USE_SQRT_BUILTIN 1 +#define USE_SQRTF_BUILTIN 1 +#define USE_SQRTL_BUILTIN 0 +#define USE_SQRTF128_BUILTIN 0 diff --git a/sysdeps/loongarch/lp64/libm-test-ulps b/sysdeps/loongarch/lp64/libm-test-ulps new file mode 100644 index 0000000000..c711531eec --- /dev/null +++ b/sysdeps/loongarch/lp64/libm-test-ulps @@ -0,0 +1,1412 @@ +# Begin of automatic generation + +# Maximal error of functions: +Function: "acos": +double: 1 +float: 1 +ldouble: 1 + +Function: "acos_downward": +double: 1 +float: 1 +ldouble: 1 + +Function: "acos_towardzero": +double: 1 +float: 1 +ldouble: 1 + +Function: "acos_upward": +double: 1 +float: 1 +ldouble: 1 + +Function: "acosh": +double: 2 +float: 2 +ldouble: 4 + +Function: "acosh_downward": +double: 2 +float: 2 +ldouble: 3 + +Function: "acosh_towardzero": +double: 2 +float: 2 +ldouble: 2 + +Function: "acosh_upward": +double: 2 +float: 2 +ldouble: 3 + +Function: "asin": +double: 1 +float: 1 +ldouble: 1 + +Function: "asin_downward": +double: 1 +float: 1 +ldouble: 2 + +Function: "asin_towardzero": +double: 1 +float: 1 +ldouble: 1 + +Function: "asin_upward": +double: 2 +float: 1 +ldouble: 2 + +Function: "asinh": +double: 2 +float: 2 +ldouble: 4 + +Function: "asinh_downward": +double: 3 +float: 3 +ldouble: 4 + +Function: "asinh_towardzero": +double: 2 +float: 2 +ldouble: 2 + +Function: "asinh_upward": +double: 3 +float: 3 +ldouble: 4 + +Function: "atan": +double: 1 +float: 1 +ldouble: 1 + +Function: "atan2": +float: 2 +ldouble: 2 + +Function: "atan2_downward": +double: 1 +float: 2 +ldouble: 2 + +Function: "atan2_towardzero": +double: 1 +float: 2 +ldouble: 3 + +Function: "atan2_upward": +double: 1 +float: 2 +ldouble: 2 + +Function: "atan_downward": +double: 1 +float: 2 +ldouble: 2 + +Function: "atan_towardzero": +double: 1 +float: 1 +ldouble: 1 + +Function: "atan_upward": +double: 1 +float: 2 +ldouble: 2 + +Function: "atanh": +double: 2 +float: 2 +ldouble: 4 + +Function: "atanh_downward": +double: 3 +float: 3 +ldouble: 4 + +Function: "atanh_towardzero": +double: 2 +float: 2 +ldouble: 2 + +Function: "atanh_upward": +double: 3 +float: 3 +ldouble: 4 + +Function: "cabs": +double: 1 +ldouble: 1 + +Function: "cabs_downward": +double: 1 +ldouble: 1 + +Function: "cabs_towardzero": +double: 1 +ldouble: 1 + +Function: "cabs_upward": +double: 1 +ldouble: 1 + +Function: Real part of "cacos": +double: 1 +float: 2 +ldouble: 2 + +Function: Imaginary part of "cacos": +double: 2 +float: 2 +ldouble: 2 + +Function: Real part of "cacos_downward": +double: 3 +float: 2 +ldouble: 3 + +Function: Imaginary part of "cacos_downward": +double: 5 +float: 3 +ldouble: 6 + +Function: Real part of "cacos_towardzero": +double: 3 +float: 2 +ldouble: 3 + +Function: Imaginary part of "cacos_towardzero": +double: 4 +float: 2 +ldouble: 5 + +Function: Real part of "cacos_upward": +double: 2 +float: 2 +ldouble: 3 + +Function: Imaginary part of "cacos_upward": +double: 5 +float: 7 +ldouble: 7 + +Function: Real part of "cacosh": +double: 2 +float: 2 +ldouble: 2 + +Function: Imaginary part of "cacosh": +double: 1 +float: 2 +ldouble: 2 + +Function: Real part of "cacosh_downward": +double: 4 +float: 2 +ldouble: 5 + +Function: Imaginary part of "cacosh_downward": +double: 3 +float: 3 +ldouble: 4 + +Function: Real part of "cacosh_towardzero": +double: 4 +float: 2 +ldouble: 5 + +Function: Imaginary part of "cacosh_towardzero": +double: 3 +float: 2 +ldouble: 3 + +Function: Real part of "cacosh_upward": +double: 4 +float: 3 +ldouble: 6 + +Function: Imaginary part of "cacosh_upward": +double: 3 +float: 2 +ldouble: 4 + +Function: "carg": +float: 1 +ldouble: 2 + +Function: "carg_downward": +double: 1 +float: 2 +ldouble: 2 + +Function: "carg_towardzero": +double: 1 +float: 2 +ldouble: 3 + +Function: "carg_upward": +double: 1 +float: 2 +ldouble: 2 + +Function: Real part of "casin": +double: 1 +float: 1 +ldouble: 2 + +Function: Imaginary part of "casin": +double: 2 +float: 2 +ldouble: 2 + +Function: Real part of "casin_downward": +double: 3 +float: 2 +ldouble: 3 + +Function: Imaginary part of "casin_downward": +double: 5 +float: 3 +ldouble: 6 + +Function: Real part of "casin_towardzero": +double: 3 +float: 1 +ldouble: 3 + +Function: Imaginary part of "casin_towardzero": +double: 4 +float: 2 +ldouble: 5 + +Function: Real part of "casin_upward": +double: 3 +float: 2 +ldouble: 3 + +Function: Imaginary part of "casin_upward": +double: 5 +float: 7 +ldouble: 7 + +Function: Real part of "casinh": +double: 2 +float: 2 +ldouble: 2 + +Function: Imaginary part of "casinh": +double: 1 +float: 1 +ldouble: 2 + +Function: Real part of "casinh_downward": +double: 5 +float: 3 +ldouble: 6 + +Function: Imaginary part of "casinh_downward": +double: 3 +float: 2 +ldouble: 3 + +Function: Real part of "casinh_towardzero": +double: 4 +float: 2 +ldouble: 5 + +Function: Imaginary part of "casinh_towardzero": +double: 3 +float: 1 +ldouble: 3 + +Function: Real part of "casinh_upward": +double: 5 +float: 7 +ldouble: 7 + +Function: Imaginary part of "casinh_upward": +double: 3 +float: 2 +ldouble: 3 + +Function: Real part of "catan": +double: 1 +float: 1 +ldouble: 1 + +Function: Imaginary part of "catan": +double: 1 +float: 1 +ldouble: 1 + +Function: Real part of "catan_downward": +double: 1 +float: 2 +ldouble: 2 + +Function: Imaginary part of "catan_downward": +double: 2 +float: 2 +ldouble: 2 + +Function: Real part of "catan_towardzero": +double: 1 +float: 2 +ldouble: 2 + +Function: Imaginary part of "catan_towardzero": +double: 2 +float: 2 +ldouble: 2 + +Function: Real part of "catan_upward": +double: 1 +float: 1 +ldouble: 2 + +Function: Imaginary part of "catan_upward": +double: 2 +float: 2 +ldouble: 3 + +Function: Real part of "catanh": +double: 1 +float: 1 +ldouble: 1 + +Function: Imaginary part of "catanh": +double: 1 +float: 1 +ldouble: 1 + +Function: Real part of "catanh_downward": +double: 2 +float: 2 +ldouble: 2 + +Function: Imaginary part of "catanh_downward": +double: 1 +float: 2 +ldouble: 2 + +Function: Real part of "catanh_towardzero": +double: 2 +float: 2 +ldouble: 2 + +Function: Imaginary part of "catanh_towardzero": +double: 1 +float: 2 +ldouble: 2 + +Function: Real part of "catanh_upward": +double: 4 +float: 4 +ldouble: 4 + +Function: Imaginary part of "catanh_upward": +double: 1 +float: 1 +ldouble: 2 + +Function: "cbrt": +double: 4 +float: 1 +ldouble: 1 + +Function: "cbrt_downward": +double: 4 +float: 1 +ldouble: 1 + +Function: "cbrt_towardzero": +double: 3 +float: 1 +ldouble: 1 + +Function: "cbrt_upward": +double: 5 +float: 1 +ldouble: 1 + +Function: Real part of "ccos": +double: 1 +float: 1 +ldouble: 1 + +Function: Imaginary part of "ccos": +double: 1 +float: 1 +ldouble: 1 + +Function: Real part of "ccos_downward": +double: 1 +float: 1 +ldouble: 2 + +Function: Imaginary part of "ccos_downward": +double: 3 +float: 3 +ldouble: 2 + +Function: Real part of "ccos_towardzero": +double: 1 +float: 2 +ldouble: 2 + +Function: Imaginary part of "ccos_towardzero": +double: 3 +float: 3 +ldouble: 2 + +Function: Real part of "ccos_upward": +double: 1 +float: 2 +ldouble: 3 + +Function: Imaginary part of "ccos_upward": +double: 2 +float: 2 +ldouble: 2 + +Function: Real part of "ccosh": +double: 1 +float: 1 +ldouble: 1 + +Function: Imaginary part of "ccosh": +double: 1 +float: 1 +ldouble: 1 + +Function: Real part of "ccosh_downward": +double: 2 +float: 2 +ldouble: 2 + +Function: Imaginary part of "ccosh_downward": +double: 3 +float: 3 +ldouble: 2 + +Function: Real part of "ccosh_towardzero": +double: 2 +float: 3 +ldouble: 2 + +Function: Imaginary part of "ccosh_towardzero": +double: 3 +float: 3 +ldouble: 2 + +Function: Real part of "ccosh_upward": +double: 1 +float: 2 +ldouble: 3 + +Function: Imaginary part of "ccosh_upward": +double: 2 +float: 2 +ldouble: 2 + +Function: Real part of "cexp": +double: 2 +float: 1 +ldouble: 1 + +Function: Imaginary part of "cexp": +double: 1 +float: 2 +ldouble: 1 + +Function: Real part of "cexp_downward": +double: 2 +float: 2 +ldouble: 2 + +Function: Imaginary part of "cexp_downward": +double: 3 +float: 3 +ldouble: 2 + +Function: Real part of "cexp_towardzero": +double: 2 +float: 2 +ldouble: 2 + +Function: Imaginary part of "cexp_towardzero": +double: 3 +float: 3 +ldouble: 2 + +Function: Real part of "cexp_upward": +double: 1 +float: 2 +ldouble: 3 + +Function: Imaginary part of "cexp_upward": +double: 3 +float: 2 +ldouble: 3 + +Function: Real part of "clog": +double: 3 +float: 3 +ldouble: 2 + +Function: Imaginary part of "clog": +double: 1 +float: 1 +ldouble: 1 + +Function: Real part of "clog10": +double: 3 +float: 4 +ldouble: 2 + +Function: Imaginary part of "clog10": +double: 2 +float: 2 +ldouble: 2 + +Function: Real part of "clog10_downward": +double: 5 +float: 5 +ldouble: 3 + +Function: Imaginary part of "clog10_downward": +double: 2 +float: 4 +ldouble: 3 + +Function: Real part of "clog10_towardzero": +double: 5 +float: 6 +ldouble: 4 + +Function: Imaginary part of "clog10_towardzero": +double: 2 +float: 4 +ldouble: 3 + +Function: Real part of "clog10_upward": +double: 6 +float: 5 +ldouble: 4 + +Function: Imaginary part of "clog10_upward": +double: 2 +float: 4 +ldouble: 3 + +Function: Real part of "clog_downward": +double: 4 +float: 3 +ldouble: 3 + +Function: Imaginary part of "clog_downward": +double: 1 +float: 2 +ldouble: 2 + +Function: Real part of "clog_towardzero": +double: 4 +float: 4 +ldouble: 3 + +Function: Imaginary part of "clog_towardzero": +double: 1 +float: 3 +ldouble: 2 + +Function: Real part of "clog_upward": +double: 4 +float: 3 +ldouble: 4 + +Function: Imaginary part of "clog_upward": +double: 1 +float: 2 +ldouble: 2 + +Function: "cos": +double: 1 +float: 1 +ldouble: 2 + +Function: "cos_downward": +double: 1 +float: 1 +ldouble: 3 + +Function: "cos_towardzero": +double: 1 +float: 1 +ldouble: 1 + +Function: "cos_upward": +double: 1 +float: 1 +ldouble: 2 + +Function: "cosh": +double: 2 +float: 2 +ldouble: 2 + +Function: "cosh_downward": +double: 3 +float: 1 +ldouble: 3 + +Function: "cosh_towardzero": +double: 3 +float: 1 +ldouble: 3 + +Function: "cosh_upward": +double: 2 +float: 2 +ldouble: 3 + +Function: Real part of "cpow": +double: 2 +float: 5 +ldouble: 4 + +Function: Imaginary part of "cpow": +float: 2 +ldouble: 1 + +Function: Real part of "cpow_downward": +double: 5 +float: 8 +ldouble: 6 + +Function: Imaginary part of "cpow_downward": +double: 1 +float: 2 +ldouble: 2 + +Function: Real part of "cpow_towardzero": +double: 5 +float: 8 +ldouble: 6 + +Function: Imaginary part of "cpow_towardzero": +double: 1 +float: 2 +ldouble: 2 + +Function: Real part of "cpow_upward": +double: 4 +float: 1 +ldouble: 3 + +Function: Imaginary part of "cpow_upward": +double: 1 +float: 2 +ldouble: 2 + +Function: Real part of "csin": +double: 1 +float: 1 +ldouble: 1 + +Function: Imaginary part of "csin": +ldouble: 1 + +Function: Real part of "csin_downward": +double: 3 +float: 3 +ldouble: 2 + +Function: Imaginary part of "csin_downward": +double: 1 +float: 1 +ldouble: 2 + +Function: Real part of "csin_towardzero": +double: 3 +float: 3 +ldouble: 2 + +Function: Imaginary part of "csin_towardzero": +double: 1 +float: 1 +ldouble: 2 + +Function: Real part of "csin_upward": +double: 2 +float: 2 +ldouble: 2 + +Function: Imaginary part of "csin_upward": +double: 1 +float: 2 +ldouble: 3 + +Function: Real part of "csinh": +float: 1 +ldouble: 1 + +Function: Imaginary part of "csinh": +double: 1 +float: 1 +ldouble: 1 + +Function: Real part of "csinh_downward": +double: 2 +float: 1 +ldouble: 2 + +Function: Imaginary part of "csinh_downward": +double: 3 +float: 3 +ldouble: 2 + +Function: Real part of "csinh_towardzero": +double: 2 +float: 2 +ldouble: 2 + +Function: Imaginary part of "csinh_towardzero": +double: 3 +float: 3 +ldouble: 2 + +Function: Real part of "csinh_upward": +double: 1 +float: 2 +ldouble: 3 + +Function: Imaginary part of "csinh_upward": +double: 2 +float: 2 +ldouble: 2 + +Function: Real part of "csqrt": +double: 2 +float: 2 +ldouble: 2 + +Function: Imaginary part of "csqrt": +double: 2 +float: 2 +ldouble: 2 + +Function: Real part of "csqrt_downward": +double: 5 +float: 4 +ldouble: 4 + +Function: Imaginary part of "csqrt_downward": +double: 4 +float: 3 +ldouble: 3 + +Function: Real part of "csqrt_towardzero": +double: 4 +float: 3 +ldouble: 3 + +Function: Imaginary part of "csqrt_towardzero": +double: 4 +float: 3 +ldouble: 3 + +Function: Real part of "csqrt_upward": +double: 5 +float: 4 +ldouble: 4 + +Function: Imaginary part of "csqrt_upward": +double: 3 +float: 3 +ldouble: 3 + +Function: Real part of "ctan": +double: 2 +float: 1 +ldouble: 3 + +Function: Imaginary part of "ctan": +double: 2 +float: 2 +ldouble: 3 + +Function: Real part of "ctan_downward": +double: 6 +float: 5 +ldouble: 4 + +Function: Imaginary part of "ctan_downward": +double: 2 +float: 2 +ldouble: 5 + +Function: Real part of "ctan_towardzero": +double: 5 +float: 3 +ldouble: 4 + +Function: Imaginary part of "ctan_towardzero": +double: 2 +float: 2 +ldouble: 5 + +Function: Real part of "ctan_upward": +double: 2 +float: 4 +ldouble: 5 + +Function: Imaginary part of "ctan_upward": +double: 2 +float: 2 +ldouble: 5 + +Function: Real part of "ctanh": +double: 2 +float: 2 +ldouble: 3 + +Function: Imaginary part of "ctanh": +double: 2 +float: 2 +ldouble: 3 + +Function: Real part of "ctanh_downward": +double: 4 +float: 2 +ldouble: 5 + +Function: Imaginary part of "ctanh_downward": +double: 6 +float: 5 +ldouble: 4 + +Function: Real part of "ctanh_towardzero": +double: 2 +float: 2 +ldouble: 5 + +Function: Imaginary part of "ctanh_towardzero": +double: 5 +float: 3 +ldouble: 3 + +Function: Real part of "ctanh_upward": +double: 2 +float: 2 +ldouble: 5 + +Function: Imaginary part of "ctanh_upward": +double: 2 +float: 3 +ldouble: 5 + +Function: "erf": +double: 1 +float: 1 +ldouble: 1 + +Function: "erf_downward": +double: 1 +float: 1 +ldouble: 2 + +Function: "erf_towardzero": +double: 1 +float: 1 +ldouble: 1 + +Function: "erf_upward": +double: 1 +float: 1 +ldouble: 2 + +Function: "erfc": +double: 5 +float: 3 +ldouble: 4 + +Function: "erfc_downward": +double: 5 +float: 6 +ldouble: 5 + +Function: "erfc_towardzero": +double: 3 +float: 4 +ldouble: 4 + +Function: "erfc_upward": +double: 5 +float: 6 +ldouble: 5 + +Function: "exp": +double: 1 +float: 1 +ldouble: 1 + +Function: "exp10": +double: 2 +ldouble: 2 + +Function: "exp10_downward": +double: 3 +float: 1 +ldouble: 3 + +Function: "exp10_towardzero": +double: 3 +float: 1 +ldouble: 3 + +Function: "exp10_upward": +double: 2 +float: 1 +ldouble: 3 + +Function: "exp2": +double: 1 +ldouble: 1 + +Function: "exp2_downward": +double: 1 +ldouble: 1 + +Function: "exp2_towardzero": +double: 1 +ldouble: 1 + +Function: "exp2_upward": +double: 1 +float: 1 +ldouble: 2 + +Function: "exp_downward": +double: 1 +float: 1 + +Function: "exp_towardzero": +double: 1 +float: 1 + +Function: "exp_upward": +double: 1 +float: 1 + +Function: "expm1": +double: 1 +float: 1 +ldouble: 2 + +Function: "expm1_downward": +double: 1 +float: 1 +ldouble: 2 + +Function: "expm1_towardzero": +double: 1 +float: 2 +ldouble: 4 + +Function: "expm1_upward": +double: 1 +float: 1 +ldouble: 3 + +Function: "gamma": +double: 4 +float: 7 +ldouble: 5 + +Function: "gamma_downward": +double: 5 +float: 7 +ldouble: 8 + +Function: "gamma_towardzero": +double: 5 +float: 6 +ldouble: 5 + +Function: "gamma_upward": +double: 5 +float: 6 +ldouble: 8 + +Function: "hypot": +double: 1 +ldouble: 1 + +Function: "hypot_downward": +double: 1 +ldouble: 1 + +Function: "hypot_towardzero": +double: 1 +ldouble: 1 + +Function: "hypot_upward": +double: 1 +ldouble: 1 + +Function: "j0": +double: 3 +float: 9 +ldouble: 2 + +Function: "j0_downward": +double: 6 +float: 9 +ldouble: 9 + +Function: "j0_towardzero": +double: 7 +float: 9 +ldouble: 9 + +Function: "j0_upward": +double: 9 +float: 9 +ldouble: 7 + +Function: "j1": +double: 4 +float: 9 +ldouble: 4 + +Function: "j1_downward": +double: 5 +float: 8 +ldouble: 4 + +Function: "j1_towardzero": +double: 4 +float: 8 +ldouble: 4 + +Function: "j1_upward": +double: 9 +float: 9 +ldouble: 3 + +Function: "jn": +double: 4 +float: 4 +ldouble: 7 + +Function: "jn_downward": +double: 5 +float: 5 +ldouble: 8 + +Function: "jn_towardzero": +double: 5 +float: 5 +ldouble: 8 + +Function: "jn_upward": +double: 5 +float: 4 +ldouble: 7 + +Function: "lgamma": +double: 4 +float: 7 +ldouble: 5 + +Function: "lgamma_downward": +double: 5 +float: 7 +ldouble: 8 + +Function: "lgamma_towardzero": +double: 5 +float: 6 +ldouble: 5 + +Function: "lgamma_upward": +double: 5 +float: 6 +ldouble: 8 + +Function: "log": +double: 1 +ldouble: 1 + +Function: "log10": +double: 2 +float: 2 +ldouble: 2 + +Function: "log10_downward": +double: 2 +float: 3 +ldouble: 1 + +Function: "log10_towardzero": +double: 2 +float: 1 +ldouble: 1 + +Function: "log10_upward": +double: 2 +float: 2 +ldouble: 1 + +Function: "log1p": +double: 1 +float: 1 +ldouble: 3 + +Function: "log1p_downward": +double: 2 +float: 2 +ldouble: 3 + +Function: "log1p_towardzero": +double: 2 +float: 2 +ldouble: 3 + +Function: "log1p_upward": +double: 2 +float: 2 +ldouble: 2 + +Function: "log2": +double: 1 +float: 1 +ldouble: 3 + +Function: "log2_downward": +double: 3 +ldouble: 3 + +Function: "log2_towardzero": +double: 2 +ldouble: 1 + +Function: "log2_upward": +double: 3 +ldouble: 1 + +Function: "log_downward": +ldouble: 1 + +Function: "log_towardzero": +ldouble: 2 + +Function: "log_upward": +double: 1 +ldouble: 2 + +Function: "pow": +double: 1 +ldouble: 2 + +Function: "pow_downward": +double: 1 +float: 1 +ldouble: 2 + +Function: "pow_towardzero": +double: 1 +float: 1 +ldouble: 2 + +Function: "pow_upward": +double: 1 +float: 1 +ldouble: 2 + +Function: "sin": +double: 1 +float: 1 +ldouble: 2 + +Function: "sin_downward": +double: 1 +float: 1 +ldouble: 3 + +Function: "sin_towardzero": +double: 1 +float: 1 +ldouble: 2 + +Function: "sin_upward": +double: 1 +float: 1 +ldouble: 3 + +Function: "sincos": +double: 1 +ldouble: 1 + +Function: "sincos_downward": +double: 1 +float: 1 +ldouble: 3 + +Function: "sincos_towardzero": +double: 1 +float: 1 +ldouble: 2 + +Function: "sincos_upward": +double: 1 +float: 1 +ldouble: 3 + +Function: "sinh": +double: 2 +float: 2 +ldouble: 2 + +Function: "sinh_downward": +double: 3 +float: 3 +ldouble: 3 + +Function: "sinh_towardzero": +double: 3 +float: 2 +ldouble: 3 + +Function: "sinh_upward": +double: 3 +float: 3 +ldouble: 4 + +Function: "tan": +double: 1 +float: 1 +ldouble: 1 + +Function: "tan_downward": +double: 1 +float: 2 +ldouble: 1 + +Function: "tan_towardzero": +double: 1 +float: 1 +ldouble: 1 + +Function: "tan_upward": +double: 1 +float: 1 +ldouble: 1 + +Function: "tanh": +double: 2 +float: 2 +ldouble: 2 + +Function: "tanh_downward": +double: 3 +float: 3 +ldouble: 4 + +Function: "tanh_towardzero": +double: 2 +float: 2 +ldouble: 3 + +Function: "tanh_upward": +double: 3 +float: 3 +ldouble: 3 + +Function: "tgamma": +double: 9 +float: 8 +ldouble: 4 + +Function: "tgamma_downward": +double: 9 +float: 7 +ldouble: 5 + +Function: "tgamma_towardzero": +double: 9 +float: 7 +ldouble: 5 + +Function: "tgamma_upward": +double: 9 +float: 8 +ldouble: 4 + +Function: "y0": +double: 3 +float: 9 +ldouble: 3 + +Function: "y0_downward": +double: 3 +float: 9 +ldouble: 7 + +Function: "y0_towardzero": +double: 4 +float: 9 +ldouble: 3 + +Function: "y0_upward": +double: 3 +float: 9 +ldouble: 4 + +Function: "y1": +double: 3 +float: 9 +ldouble: 5 + +Function: "y1_downward": +double: 6 +float: 9 +ldouble: 5 + +Function: "y1_towardzero": +double: 3 +float: 9 +ldouble: 2 + +Function: "y1_upward": +double: 7 +float: 9 +ldouble: 5 + +Function: "yn": +double: 3 +float: 3 +ldouble: 5 + +Function: "yn_downward": +double: 3 +float: 4 +ldouble: 5 + +Function: "yn_towardzero": +double: 3 +float: 3 +ldouble: 5 + +Function: "yn_upward": +double: 4 +float: 5 +ldouble: 5 + +# end of automatic generation diff --git a/sysdeps/loongarch/lp64/libm-test-ulps-name b/sysdeps/loongarch/lp64/libm-test-ulps-name new file mode 100644 index 0000000000..ce02281eab --- /dev/null +++ b/sysdeps/loongarch/lp64/libm-test-ulps-name @@ -0,0 +1 @@ +LoongArch 64-bit diff --git a/sysdeps/loongarch/math_private.h b/sysdeps/loongarch/math_private.h new file mode 100644 index 0000000000..cdf26a78dd --- /dev/null +++ b/sysdeps/loongarch/math_private.h @@ -0,0 +1,248 @@ +/* Internal math stuff. + Copyright (C) 2022 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#ifndef LOONGARCH_MATH_PRIVATE_H +#define LOONGARCH_MATH_PRIVATE_H 1 + +/* Inline functions to speed up the math library implementation. The + default versions of these routines are in generic/math_private.h + and call fesetround, feholdexcept, etc. These routines use inlined + code instead. */ + +#ifdef __loongarch_hard_float + +#include <fenv.h> +#include <fenv_libc.h> +#include <fpu_control.h> + +#define _FPU_MASK_ALL \ + (_FPU_MASK_V | _FPU_MASK_Z | _FPU_MASK_O | _FPU_MASK_U | _FPU_MASK_I \ + | FE_ALL_EXCEPT) + +static __always_inline void +libc_feholdexcept_loongarch (fenv_t *envp) +{ + fpu_control_t cw; + + /* Save the current state. */ + _FPU_GETCW (cw); + envp->__fp_control_register = cw; + + /* Clear all exception enable bits and flags. */ + cw &= ~(_FPU_MASK_ALL); + _FPU_SETCW (cw); +} +#define libc_feholdexcept libc_feholdexcept_loongarch +#define libc_feholdexceptf libc_feholdexcept_loongarch +#define libc_feholdexceptl libc_feholdexcept_loongarch + +static __always_inline void +libc_fesetround_loongarch (int round) +{ + fpu_control_t cw; + + /* Get current state. */ + _FPU_GETCW (cw); + + /* Set rounding bits. */ + cw &= ~_FPU_RC_MASK; + cw |= round; + + /* Set new state. */ + _FPU_SETCW (cw); +} +#define libc_fesetround libc_fesetround_loongarch +#define libc_fesetroundf libc_fesetround_loongarch +#define libc_fesetroundl libc_fesetround_loongarch + +static __always_inline void +libc_feholdexcept_setround_loongarch (fenv_t *envp, int round) +{ + fpu_control_t cw; + + /* Save the current state. */ + _FPU_GETCW (cw); + envp->__fp_control_register = cw; + + /* Clear all exception enable bits and flags. */ + cw &= ~(_FPU_MASK_ALL); + + /* Set rounding bits. */ + cw &= ~_FPU_RC_MASK; + cw |= round; + + /* Set new state. */ + _FPU_SETCW (cw); +} +#define libc_feholdexcept_setround libc_feholdexcept_setround_loongarch +#define libc_feholdexcept_setroundf libc_feholdexcept_setround_loongarch +#define libc_feholdexcept_setroundl libc_feholdexcept_setround_loongarch + +#define libc_feholdsetround libc_feholdexcept_setround_loongarch +#define libc_feholdsetroundf libc_feholdexcept_setround_loongarch +#define libc_feholdsetroundl libc_feholdexcept_setround_loongarch + +static __always_inline void +libc_fesetenv_loongarch (fenv_t *envp) +{ + fpu_control_t cw __attribute__ ((unused)); + + /* Read current state to flush fpu pipeline. */ + _FPU_GETCW (cw); + + _FPU_SETCW (envp->__fp_control_register); +} +#define libc_fesetenv libc_fesetenv_loongarch +#define libc_fesetenvf libc_fesetenv_loongarch +#define libc_fesetenvl libc_fesetenv_loongarch + +static __always_inline int +libc_feupdateenv_test_loongarch (fenv_t *envp, int excepts) +{ + /* int ret = fetestexcept (excepts); feupdateenv (envp); return ret; */ + int cw, temp; + + /* Get current control word. */ + _FPU_GETCW (cw); + + /* Set flag bits (which are accumulative), and *also* set the + cause bits. The setting of the cause bits is what actually causes + the hardware to generate the exception, if the corresponding enable + bit is set as well. */ + temp = cw & FE_ALL_EXCEPT; + temp |= envp->__fp_control_register | (temp << CAUSE_SHIFT); + + /* Set new state. */ + _FPU_SETCW (temp); + + return cw & excepts & FE_ALL_EXCEPT; +} +#define libc_feupdateenv_test libc_feupdateenv_test_loongarch +#define libc_feupdateenv_testf libc_feupdateenv_test_loongarch +#define libc_feupdateenv_testl libc_feupdateenv_test_loongarch + +static __always_inline void +libc_feupdateenv_loongarch (fenv_t *envp) +{ + libc_feupdateenv_test_loongarch (envp, 0); +} +#define libc_feupdateenv libc_feupdateenv_loongarch +#define libc_feupdateenvf libc_feupdateenv_loongarch +#define libc_feupdateenvl libc_feupdateenv_loongarch + +#define libc_feresetround libc_feupdateenv_loongarch +#define libc_feresetroundf libc_feupdateenv_loongarch +#define libc_feresetroundl libc_feupdateenv_loongarch + +static __always_inline int +libc_fetestexcept_loongarch (int excepts) +{ + int cw; + + /* Get current control word. */ + _FPU_GETCW (cw); + + return cw & excepts & FE_ALL_EXCEPT; +} +#define libc_fetestexcept libc_fetestexcept_loongarch +#define libc_fetestexceptf libc_fetestexcept_loongarch +#define libc_fetestexceptl libc_fetestexcept_loongarch + +/* Enable support for rounding mode context. */ +#define HAVE_RM_CTX 1 + +static __always_inline void +libc_feholdexcept_setround_loongarch_ctx (struct rm_ctx *ctx, int round) +{ + fpu_control_t old, new; + + /* Save the current state. */ + _FPU_GETCW (old); + ctx->env.__fp_control_register = old; + + /* Clear all exception enable bits and flags. */ + new = old & ~(_FPU_MASK_ALL); + + /* Set rounding bits. */ + new = (new & ~_FPU_RC_MASK) | round; + + if (__glibc_unlikely (new != old)) + { + _FPU_SETCW (new); + ctx->updated_status = true; + } + else + ctx->updated_status = false; +} +#define libc_feholdexcept_setround_ctx libc_feholdexcept_setround_loongarch_ctx +#define libc_feholdexcept_setroundf_ctx \ + libc_feholdexcept_setround_loongarch_ctx +#define libc_feholdexcept_setroundl_ctx \ + libc_feholdexcept_setround_loongarch_ctx + +static __always_inline void +libc_fesetenv_loongarch_ctx (struct rm_ctx *ctx) +{ + libc_fesetenv_loongarch (&ctx->env); +} +#define libc_fesetenv_ctx libc_fesetenv_loongarch_ctx +#define libc_fesetenvf_ctx libc_fesetenv_loongarch_ctx +#define libc_fesetenvl_ctx libc_fesetenv_loongarch_ctx + +static __always_inline void +libc_feupdateenv_loongarch_ctx (struct rm_ctx *ctx) +{ + if (__glibc_unlikely (ctx->updated_status)) + libc_feupdateenv_test_loongarch (&ctx->env, 0); +} +#define libc_feupdateenv_ctx libc_feupdateenv_loongarch_ctx +#define libc_feupdateenvf_ctx libc_feupdateenv_loongarch_ctx +#define libc_feupdateenvl_ctx libc_feupdateenv_loongarch_ctx +#define libc_feresetround_ctx libc_feupdateenv_loongarch_ctx +#define libc_feresetroundf_ctx libc_feupdateenv_loongarch_ctx +#define libc_feresetroundl_ctx libc_feupdateenv_loongarch_ctx + +static __always_inline void +libc_feholdsetround_loongarch_ctx (struct rm_ctx *ctx, int round) +{ + fpu_control_t old, new; + + /* Save the current state. */ + _FPU_GETCW (old); + ctx->env.__fp_control_register = old; + + /* Set rounding bits. */ + new = (old & ~_FPU_RC_MASK) | round; + + if (__glibc_unlikely (new != old)) + { + _FPU_SETCW (new); + ctx->updated_status = true; + } + else + ctx->updated_status = false; +} +#define libc_feholdsetround_ctx libc_feholdsetround_loongarch_ctx +#define libc_feholdsetroundf_ctx libc_feholdsetround_loongarch_ctx +#define libc_feholdsetroundl_ctx libc_feholdsetround_loongarch_ctx + +#endif + +#include_next <math_private.h> + +#endif -- 2.31.1 ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v7 11/13] LoongArch: Hard Float Support 2022-07-19 1:22 ` [PATCH v7 11/13] LoongArch: Hard Float Support caiyinyu @ 2022-07-21 21:03 ` Adhemerval Zanella Netto 0 siblings, 0 replies; 9+ messages in thread From: Adhemerval Zanella Netto @ 2022-07-21 21:03 UTC (permalink / raw) To: caiyinyu, libc-alpha, joseph_myers, carlos, i.swmail LGTM, as for v6. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org> On 18/07/22 22:22, caiyinyu wrote: > --- > sysdeps/loongarch/fpu/fclrexcpt.c | 46 + > sysdeps/loongarch/fpu/fedisblxcpt.c | 39 + > sysdeps/loongarch/fpu/feenablxcpt.c | 39 + > sysdeps/loongarch/fpu/fegetenv.c | 31 + > sysdeps/loongarch/fpu/fegetexcept.c | 32 + > sysdeps/loongarch/fpu/fegetmode.c | 27 + > sysdeps/loongarch/fpu/fegetround.c | 33 + > sysdeps/loongarch/fpu/feholdexcpt.c | 40 + > sysdeps/loongarch/fpu/fenv_libc.h | 30 + > sysdeps/loongarch/fpu/fesetenv.c | 42 + > sysdeps/loongarch/fpu/fesetexcept.c | 32 + > sysdeps/loongarch/fpu/fesetmode.c | 38 + > sysdeps/loongarch/fpu/fesetround.c | 44 + > sysdeps/loongarch/fpu/feupdateenv.c | 43 + > sysdeps/loongarch/fpu/fgetexcptflg.c | 38 + > sysdeps/loongarch/fpu/fraiseexcpt.c | 80 + > sysdeps/loongarch/fpu/fsetexcptflg.c | 41 + > sysdeps/loongarch/fpu/ftestexcept.c | 32 + > .../loongarch/fpu/math-use-builtins-sqrt.h | 4 + > sysdeps/loongarch/lp64/libm-test-ulps | 1412 +++++++++++++++++ > sysdeps/loongarch/lp64/libm-test-ulps-name | 1 + > sysdeps/loongarch/math_private.h | 248 +++ > 22 files changed, 2372 insertions(+) > create mode 100644 sysdeps/loongarch/fpu/fclrexcpt.c > create mode 100644 sysdeps/loongarch/fpu/fedisblxcpt.c > create mode 100644 sysdeps/loongarch/fpu/feenablxcpt.c > create mode 100644 sysdeps/loongarch/fpu/fegetenv.c > create mode 100644 sysdeps/loongarch/fpu/fegetexcept.c > create mode 100644 sysdeps/loongarch/fpu/fegetmode.c > create mode 100644 sysdeps/loongarch/fpu/fegetround.c > create mode 100644 sysdeps/loongarch/fpu/feholdexcpt.c > create mode 100644 sysdeps/loongarch/fpu/fenv_libc.h > create mode 100644 sysdeps/loongarch/fpu/fesetenv.c > create mode 100644 sysdeps/loongarch/fpu/fesetexcept.c > create mode 100644 sysdeps/loongarch/fpu/fesetmode.c > create mode 100644 sysdeps/loongarch/fpu/fesetround.c > create mode 100644 sysdeps/loongarch/fpu/feupdateenv.c > create mode 100644 sysdeps/loongarch/fpu/fgetexcptflg.c > create mode 100644 sysdeps/loongarch/fpu/fraiseexcpt.c > create mode 100644 sysdeps/loongarch/fpu/fsetexcptflg.c > create mode 100644 sysdeps/loongarch/fpu/ftestexcept.c > create mode 100644 sysdeps/loongarch/fpu/math-use-builtins-sqrt.h > create mode 100644 sysdeps/loongarch/lp64/libm-test-ulps > create mode 100644 sysdeps/loongarch/lp64/libm-test-ulps-name > create mode 100644 sysdeps/loongarch/math_private.h > > diff --git a/sysdeps/loongarch/fpu/fclrexcpt.c b/sysdeps/loongarch/fpu/fclrexcpt.c > new file mode 100644 > index 0000000000..e9f33a1658 > --- /dev/null > +++ b/sysdeps/loongarch/fpu/fclrexcpt.c > @@ -0,0 +1,46 @@ > +/* Clear given exceptions in current floating-point environment. > + Copyright (C) 2022 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library. If not, see > + <https://www.gnu.org/licenses/>. */ > + > +#include <fenv.h> > +#include <fenv_libc.h> > +#include <fpu_control.h> > + > +int > +feclearexcept (int excepts) > +{ > + int cw; > + > + /* Mask out unsupported bits/exceptions. */ > + excepts &= FE_ALL_EXCEPT; > + > + /* Read the complete control word. */ > + _FPU_GETCW (cw); > + > + /* Clear exception flag bits and cause bits. If the cause bit is not > + cleared, the next CTC instruction (just below) will re-generate the > + exception. */ > + > + cw &= ~(excepts | (excepts << CAUSE_SHIFT)); > + > + /* Put the new data in effect. */ > + _FPU_SETCW (cw); > + > + /* Success. */ > + return 0; > +} > +libm_hidden_def (feclearexcept) > diff --git a/sysdeps/loongarch/fpu/fedisblxcpt.c b/sysdeps/loongarch/fpu/fedisblxcpt.c > new file mode 100644 > index 0000000000..add62946fd > --- /dev/null > +++ b/sysdeps/loongarch/fpu/fedisblxcpt.c > @@ -0,0 +1,39 @@ > +/* Disable floating-point exceptions. > + Copyright (C) 2022 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library. If not, see > + <https://www.gnu.org/licenses/>. */ > + > +#include <fenv.h> > +#include <fenv_libc.h> > +#include <fpu_control.h> > + > +int > +fedisableexcept (int excepts) > +{ > + unsigned int new_exc, old_exc; > + > + /* Get the current control word. */ > + _FPU_GETCW (new_exc); > + > + old_exc = (new_exc & ENABLE_MASK) << ENABLE_SHIFT; > + > + excepts &= FE_ALL_EXCEPT; > + > + new_exc &= ~(excepts >> ENABLE_SHIFT); > + _FPU_SETCW (new_exc); > + > + return old_exc; > +} > diff --git a/sysdeps/loongarch/fpu/feenablxcpt.c b/sysdeps/loongarch/fpu/feenablxcpt.c > new file mode 100644 > index 0000000000..ed809341f6 > --- /dev/null > +++ b/sysdeps/loongarch/fpu/feenablxcpt.c > @@ -0,0 +1,39 @@ > +/* Enable floating-point exceptions. > + Copyright (C) 2022 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library. If not, see > + <https://www.gnu.org/licenses/>. */ > + > +#include <fenv.h> > +#include <fenv_libc.h> > +#include <fpu_control.h> > + > +int > +feenableexcept (int excepts) > +{ > + unsigned int new_exc, old_exc; > + > + /* Get the current control word. */ > + _FPU_GETCW (new_exc); > + > + old_exc = (new_exc & ENABLE_MASK) << ENABLE_SHIFT; > + > + excepts &= FE_ALL_EXCEPT; > + > + new_exc |= excepts >> ENABLE_SHIFT; > + _FPU_SETCW (new_exc); > + > + return old_exc; > +} > diff --git a/sysdeps/loongarch/fpu/fegetenv.c b/sysdeps/loongarch/fpu/fegetenv.c > new file mode 100644 > index 0000000000..5a2a3d34dc > --- /dev/null > +++ b/sysdeps/loongarch/fpu/fegetenv.c > @@ -0,0 +1,31 @@ > +/* Store current floating-point environment. > + Copyright (C) 2022 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library. If not, see > + <https://www.gnu.org/licenses/>. */ > + > +#include <fenv.h> > +#include <fpu_control.h> > + > +int > +__fegetenv (fenv_t *envp) > +{ > + _FPU_GETCW (*envp); > + > + /* Success. */ > + return 0; > +} > +libm_hidden_def (__fegetenv) weak_alias (__fegetenv, fegetenv) > +libm_hidden_weak (fegetenv) > diff --git a/sysdeps/loongarch/fpu/fegetexcept.c b/sysdeps/loongarch/fpu/fegetexcept.c > new file mode 100644 > index 0000000000..ba1c1466f4 > --- /dev/null > +++ b/sysdeps/loongarch/fpu/fegetexcept.c > @@ -0,0 +1,32 @@ > +/* Get enabled floating-point exceptions. > + Copyright (C) 2022 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library. If not, see > + <https://www.gnu.org/licenses/>. */ > + > +#include <fenv.h> > +#include <fenv_libc.h> > +#include <fpu_control.h> > + > +int > +fegetexcept (void) > +{ > + unsigned int exc; > + > + /* Get the current control word. */ > + _FPU_GETCW (exc); > + > + return (exc & ENABLE_MASK) << ENABLE_SHIFT; > +} > diff --git a/sysdeps/loongarch/fpu/fegetmode.c b/sysdeps/loongarch/fpu/fegetmode.c > new file mode 100644 > index 0000000000..e3517e34f6 > --- /dev/null > +++ b/sysdeps/loongarch/fpu/fegetmode.c > @@ -0,0 +1,27 @@ > +/* Store current floating-point control modes. > + Copyright (C) 2022 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <https://www.gnu.org/licenses/>. */ > + > +#include <fenv.h> > +#include <fpu_control.h> > + > +int > +fegetmode (femode_t *modep) > +{ > + _FPU_GETCW (*modep); > + return 0; > +} > diff --git a/sysdeps/loongarch/fpu/fegetround.c b/sysdeps/loongarch/fpu/fegetround.c > new file mode 100644 > index 0000000000..ff6113eb04 > --- /dev/null > +++ b/sysdeps/loongarch/fpu/fegetround.c > @@ -0,0 +1,33 @@ > +/* Return current rounding direction. > + Copyright (C) 2022 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library. If not, see > + <https://www.gnu.org/licenses/>. */ > + > +#include <fenv.h> > +#include <fpu_control.h> > + > +int > +__fegetround (void) > +{ > + int cw; > + > + /* Get control word. */ > + _FPU_GETCW (cw); > + > + return cw & _FPU_RC_MASK; > +} > +libm_hidden_def (__fegetround) weak_alias (__fegetround, fegetround) > +libm_hidden_weak (fegetround) > diff --git a/sysdeps/loongarch/fpu/feholdexcpt.c b/sysdeps/loongarch/fpu/feholdexcpt.c > new file mode 100644 > index 0000000000..e4f9f6a23b > --- /dev/null > +++ b/sysdeps/loongarch/fpu/feholdexcpt.c > @@ -0,0 +1,40 @@ > +/* Store current floating-point environment and clear exceptions. > + Copyright (C) 2022 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library. If not, see > + <https://www.gnu.org/licenses/>. */ > + > +#include <fenv.h> > +#include <fpu_control.h> > + > +int > +__feholdexcept (fenv_t *envp) > +{ > + fpu_control_t cw; > + > + /* Save the current state. */ > + _FPU_GETCW (cw); > + envp->__fp_control_register = cw; > + > + /* Clear all exception enable bits and flags. */ > + cw &= ~(_FPU_MASK_V | _FPU_MASK_Z | _FPU_MASK_O | _FPU_MASK_U | _FPU_MASK_I > + | FE_ALL_EXCEPT); > + _FPU_SETCW (cw); > + > + return 0; > +} > + > +libm_hidden_def (__feholdexcept) weak_alias (__feholdexcept, feholdexcept) > +libm_hidden_weak (feholdexcept) > diff --git a/sysdeps/loongarch/fpu/fenv_libc.h b/sysdeps/loongarch/fpu/fenv_libc.h > new file mode 100644 > index 0000000000..8360ae0377 > --- /dev/null > +++ b/sysdeps/loongarch/fpu/fenv_libc.h > @@ -0,0 +1,30 @@ > +/* Internal libc stuff for floating point environment routines. > + Copyright (C) 2022 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library. If not, see > + <https://www.gnu.org/licenses/>. */ > + > +#ifndef _FENV_LIBC_H > +#define _FENV_LIBC_H 1 > + > +/* Mask for enabling exceptions and for the CAUSE bits. */ > +#define ENABLE_MASK 0x0000001FU > +#define CAUSE_MASK 0x1F000000U > + > +/* Shift for FE_* flags to get up to the ENABLE bits and the CAUSE bits. */ > +#define ENABLE_SHIFT 16 > +#define CAUSE_SHIFT 8 > + > +#endif /* _FENV_LIBC_H */ > diff --git a/sysdeps/loongarch/fpu/fesetenv.c b/sysdeps/loongarch/fpu/fesetenv.c > new file mode 100644 > index 0000000000..c10bd11ef9 > --- /dev/null > +++ b/sysdeps/loongarch/fpu/fesetenv.c > @@ -0,0 +1,42 @@ > +/* Install given floating-point environment. > + Copyright (C) 2022 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library. If not, see > + <https://www.gnu.org/licenses/>. */ > + > +#include <fenv.h> > +#include <fpu_control.h> > + > +int > +__fesetenv (const fenv_t *envp) > +{ > + fpu_control_t cw; > + > + /* Read first current state to flush fpu pipeline. */ > + _FPU_GETCW (cw); > + > + if (envp == FE_DFL_ENV) > + _FPU_SETCW (_FPU_DEFAULT); > + else if (envp == FE_NOMASK_ENV) > + _FPU_SETCW (_FPU_IEEE); > + else > + _FPU_SETCW (envp->__fp_control_register); > + > + /* Success. */ > + return 0; > +} > + > +libm_hidden_def (__fesetenv) weak_alias (__fesetenv, fesetenv) > +libm_hidden_weak (fesetenv) > diff --git a/sysdeps/loongarch/fpu/fesetexcept.c b/sysdeps/loongarch/fpu/fesetexcept.c > new file mode 100644 > index 0000000000..ad76d52d9e > --- /dev/null > +++ b/sysdeps/loongarch/fpu/fesetexcept.c > @@ -0,0 +1,32 @@ > +/* Set given exception flags. > + Copyright (C) 2022 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <https://www.gnu.org/licenses/>. */ > + > +#include <fenv.h> > +#include <fpu_control.h> > + > +int > +fesetexcept (int excepts) > +{ > + fpu_control_t temp; > + > + _FPU_GETCW (temp); > + temp |= excepts & FE_ALL_EXCEPT; > + _FPU_SETCW (temp); > + > + return 0; > +} > diff --git a/sysdeps/loongarch/fpu/fesetmode.c b/sysdeps/loongarch/fpu/fesetmode.c > new file mode 100644 > index 0000000000..fc52fc114b > --- /dev/null > +++ b/sysdeps/loongarch/fpu/fesetmode.c > @@ -0,0 +1,38 @@ > +/* Install given floating-point control modes. > + Copyright (C) 2022 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <https://www.gnu.org/licenses/>. */ > + > +#include <fenv.h> > +#include <fpu_control.h> > + > +#define FCSR_STATUS 0x1f1f0000 > + > +int > +fesetmode (const femode_t *modep) > +{ > + fpu_control_t cw; > + > + _FPU_GETCW (cw); > + cw &= FCSR_STATUS; > + if (modep == FE_DFL_MODE) > + cw |= _FPU_DEFAULT; > + else > + cw |= *modep & ~FCSR_STATUS; > + _FPU_SETCW (cw); > + > + return 0; > +} > diff --git a/sysdeps/loongarch/fpu/fesetround.c b/sysdeps/loongarch/fpu/fesetround.c > new file mode 100644 > index 0000000000..32acac5f96 > --- /dev/null > +++ b/sysdeps/loongarch/fpu/fesetround.c > @@ -0,0 +1,44 @@ > +/* Set current rounding direction. > + Copyright (C) 2022 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library. If not, see > + <https://www.gnu.org/licenses/>. */ > + > +#include <fenv.h> > +#include <fpu_control.h> > + > +int > +__fesetround (int round) > +{ > + fpu_control_t cw; > + > + if ((round & ~_FPU_RC_MASK) != 0) > + /* ROUND is no valid rounding mode. */ > + return 1; > + > + /* Get current state. */ > + _FPU_GETCW (cw); > + > + /* Set rounding bits. */ > + cw &= ~_FPU_RC_MASK; > + cw |= round; > + /* Set new state. */ > + _FPU_SETCW (cw); > + > + return 0; > +} > + > +libm_hidden_def (__fesetround) weak_alias (__fesetround, fesetround) > +libm_hidden_weak (fesetround) > diff --git a/sysdeps/loongarch/fpu/feupdateenv.c b/sysdeps/loongarch/fpu/feupdateenv.c > new file mode 100644 > index 0000000000..5ad862a61d > --- /dev/null > +++ b/sysdeps/loongarch/fpu/feupdateenv.c > @@ -0,0 +1,43 @@ > +/* Install given floating-point environment and raise exceptions. > + Copyright (C) 2022 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library. If not, see > + <https://www.gnu.org/licenses/>. */ > + > +#include <fenv.h> > +#include <fpu_control.h> > + > +int > +__feupdateenv (const fenv_t *envp) > +{ > + int temp; > + > + /* Save current exceptions. */ > + _FPU_GETCW (temp); > + temp &= FE_ALL_EXCEPT; > + > + /* Install new environment. */ > + __fesetenv (envp); > + > + /* Raise the safed exception. Incidently for us the implementation > + defined format of the values in objects of type fexcept_t is the > + same as the ones specified using the FE_* constants. */ > + __feraiseexcept (temp); > + > + /* Success. */ > + return 0; > +} > +libm_hidden_def (__feupdateenv) weak_alias (__feupdateenv, feupdateenv) > +libm_hidden_weak (feupdateenv) > diff --git a/sysdeps/loongarch/fpu/fgetexcptflg.c b/sysdeps/loongarch/fpu/fgetexcptflg.c > new file mode 100644 > index 0000000000..6130c632c9 > --- /dev/null > +++ b/sysdeps/loongarch/fpu/fgetexcptflg.c > @@ -0,0 +1,38 @@ > +/* Store current representation for exceptions. > + Copyright (C) 2022 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library. If not, see > + <https://www.gnu.org/licenses/>. */ > + > +#include <fenv.h> > +#include <fpu_control.h> > + > +int > +fegetexceptflag (fexcept_t *flagp, int excepts) > +{ > + fpu_control_t temp; > + > + /* Get the current exceptions. */ > + _FPU_GETCW (temp); > + > + /* We only save the relevant bits here. In particular, care has to be > + taken with the CAUSE bits, as an inadvertent restore later on could > + generate unexpected exceptions. */ > + > + *flagp = temp & excepts & FE_ALL_EXCEPT; > + > + /* Success. */ > + return 0; > +} > diff --git a/sysdeps/loongarch/fpu/fraiseexcpt.c b/sysdeps/loongarch/fpu/fraiseexcpt.c > new file mode 100644 > index 0000000000..c1c612242f > --- /dev/null > +++ b/sysdeps/loongarch/fpu/fraiseexcpt.c > @@ -0,0 +1,80 @@ > +/* Raise given exceptions. > + Copyright (C) 2022 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library. If not, see > + <https://www.gnu.org/licenses/>. */ > + > +#include <fenv.h> > +#include <fpu_control.h> > +#include <float.h> > + > +int > +__feraiseexcept (int excepts) > +{ > + const float fp_zero = 0.0f; > + const float fp_one = 1.0f; > + const float fp_max = FLT_MAX; > + const float fp_min = FLT_MIN; > + const float fp_1e32 = 1.0e32f; > + const float fp_two = 2.0f; > + const float fp_three = 3.0f; > + > + /* Raise exceptions represented by EXPECTS. But we must raise only > + one signal at a time. It is important that if the overflow/underflow > + exception and the inexact exception are given at the same time, > + the overflow/underflow exception follows the inexact exception. */ > + > + /* First: invalid exception. */ > + if (FE_INVALID & excepts) > + __asm__ __volatile__("fdiv.s $f0,%0,%0\n\t" > + : > + : "f"(fp_zero) > + : "$f0"); > + > + /* Next: division by zero. */ > + if (FE_DIVBYZERO & excepts) > + __asm__ __volatile__("fdiv.s $f0,%0,%1\n\t" > + : > + : "f"(fp_one), "f"(fp_zero) > + : "$f0"); > + > + /* Next: overflow. */ > + if (FE_OVERFLOW & excepts) > + /* There's no way to raise overflow without also raising inexact. */ > + __asm__ __volatile__("fadd.s $f0,%0,%1\n\t" > + : > + : "f"(fp_max), "f"(fp_1e32) > + : "$f0"); > + > + /* Next: underflow. */ > + if (FE_UNDERFLOW & excepts) > + __asm__ __volatile__("fdiv.s $f0,%0,%1\n\t" > + : > + : "f"(fp_min), "f"(fp_three) > + : "$f0"); > + > + /* Last: inexact. */ > + if (FE_INEXACT & excepts) > + __asm__ __volatile__("fdiv.s $f0, %0, %1\n\t" > + : > + : "f"(fp_two), "f"(fp_three) > + : "$f0"); > + > + /* Success. */ > + return 0; > +} > + > +libm_hidden_def (__feraiseexcept) weak_alias (__feraiseexcept, feraiseexcept) > +libm_hidden_weak (feraiseexcept) > diff --git a/sysdeps/loongarch/fpu/fsetexcptflg.c b/sysdeps/loongarch/fpu/fsetexcptflg.c > new file mode 100644 > index 0000000000..9c135a663d > --- /dev/null > +++ b/sysdeps/loongarch/fpu/fsetexcptflg.c > @@ -0,0 +1,41 @@ > +/* Set floating-point environment exception handling. > + Copyright (C) 2022 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library. If not, see > + <https://www.gnu.org/licenses/>. */ > + > +#include <fenv.h> > +#include <fpu_control.h> > + > +int > +fesetexceptflag (const fexcept_t *flagp, int excepts) > +{ > + fpu_control_t temp; > + > + /* Get the current exceptions. */ > + _FPU_GETCW (temp); > + > + /* Make sure the flags we want restored are legal. */ > + excepts &= FE_ALL_EXCEPT; > + > + /* Now clear the bits called for, and copy them in from flagp. Note that > + we ignore all non-flag bits from *flagp, so they don't matter. */ > + temp = (temp & ~excepts) | (*flagp & excepts); > + > + _FPU_SETCW (temp); > + > + /* Success. */ > + return 0; > +} > diff --git a/sysdeps/loongarch/fpu/ftestexcept.c b/sysdeps/loongarch/fpu/ftestexcept.c > new file mode 100644 > index 0000000000..b9563b7ae1 > --- /dev/null > +++ b/sysdeps/loongarch/fpu/ftestexcept.c > @@ -0,0 +1,32 @@ > +/* Test exception in current environment. > + Copyright (C) 2022 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library. If not, see > + <https://www.gnu.org/licenses/>. */ > + > +#include <fenv.h> > +#include <fpu_control.h> > + > +int > +fetestexcept (int excepts) > +{ > + int cw; > + > + /* Get current control word. */ > + _FPU_GETCW (cw); > + > + return cw & excepts & FE_ALL_EXCEPT; > +} > +libm_hidden_def (fetestexcept) > diff --git a/sysdeps/loongarch/fpu/math-use-builtins-sqrt.h b/sysdeps/loongarch/fpu/math-use-builtins-sqrt.h > new file mode 100644 > index 0000000000..e94c915ba6 > --- /dev/null > +++ b/sysdeps/loongarch/fpu/math-use-builtins-sqrt.h > @@ -0,0 +1,4 @@ > +#define USE_SQRT_BUILTIN 1 > +#define USE_SQRTF_BUILTIN 1 > +#define USE_SQRTL_BUILTIN 0 > +#define USE_SQRTF128_BUILTIN 0 > diff --git a/sysdeps/loongarch/lp64/libm-test-ulps b/sysdeps/loongarch/lp64/libm-test-ulps > new file mode 100644 > index 0000000000..c711531eec > --- /dev/null > +++ b/sysdeps/loongarch/lp64/libm-test-ulps > @@ -0,0 +1,1412 @@ > +# Begin of automatic generation > + > +# Maximal error of functions: > +Function: "acos": > +double: 1 > +float: 1 > +ldouble: 1 > + > +Function: "acos_downward": > +double: 1 > +float: 1 > +ldouble: 1 > + > +Function: "acos_towardzero": > +double: 1 > +float: 1 > +ldouble: 1 > + > +Function: "acos_upward": > +double: 1 > +float: 1 > +ldouble: 1 > + > +Function: "acosh": > +double: 2 > +float: 2 > +ldouble: 4 > + > +Function: "acosh_downward": > +double: 2 > +float: 2 > +ldouble: 3 > + > +Function: "acosh_towardzero": > +double: 2 > +float: 2 > +ldouble: 2 > + > +Function: "acosh_upward": > +double: 2 > +float: 2 > +ldouble: 3 > + > +Function: "asin": > +double: 1 > +float: 1 > +ldouble: 1 > + > +Function: "asin_downward": > +double: 1 > +float: 1 > +ldouble: 2 > + > +Function: "asin_towardzero": > +double: 1 > +float: 1 > +ldouble: 1 > + > +Function: "asin_upward": > +double: 2 > +float: 1 > +ldouble: 2 > + > +Function: "asinh": > +double: 2 > +float: 2 > +ldouble: 4 > + > +Function: "asinh_downward": > +double: 3 > +float: 3 > +ldouble: 4 > + > +Function: "asinh_towardzero": > +double: 2 > +float: 2 > +ldouble: 2 > + > +Function: "asinh_upward": > +double: 3 > +float: 3 > +ldouble: 4 > + > +Function: "atan": > +double: 1 > +float: 1 > +ldouble: 1 > + > +Function: "atan2": > +float: 2 > +ldouble: 2 > + > +Function: "atan2_downward": > +double: 1 > +float: 2 > +ldouble: 2 > + > +Function: "atan2_towardzero": > +double: 1 > +float: 2 > +ldouble: 3 > + > +Function: "atan2_upward": > +double: 1 > +float: 2 > +ldouble: 2 > + > +Function: "atan_downward": > +double: 1 > +float: 2 > +ldouble: 2 > + > +Function: "atan_towardzero": > +double: 1 > +float: 1 > +ldouble: 1 > + > +Function: "atan_upward": > +double: 1 > +float: 2 > +ldouble: 2 > + > +Function: "atanh": > +double: 2 > +float: 2 > +ldouble: 4 > + > +Function: "atanh_downward": > +double: 3 > +float: 3 > +ldouble: 4 > + > +Function: "atanh_towardzero": > +double: 2 > +float: 2 > +ldouble: 2 > + > +Function: "atanh_upward": > +double: 3 > +float: 3 > +ldouble: 4 > + > +Function: "cabs": > +double: 1 > +ldouble: 1 > + > +Function: "cabs_downward": > +double: 1 > +ldouble: 1 > + > +Function: "cabs_towardzero": > +double: 1 > +ldouble: 1 > + > +Function: "cabs_upward": > +double: 1 > +ldouble: 1 > + > +Function: Real part of "cacos": > +double: 1 > +float: 2 > +ldouble: 2 > + > +Function: Imaginary part of "cacos": > +double: 2 > +float: 2 > +ldouble: 2 > + > +Function: Real part of "cacos_downward": > +double: 3 > +float: 2 > +ldouble: 3 > + > +Function: Imaginary part of "cacos_downward": > +double: 5 > +float: 3 > +ldouble: 6 > + > +Function: Real part of "cacos_towardzero": > +double: 3 > +float: 2 > +ldouble: 3 > + > +Function: Imaginary part of "cacos_towardzero": > +double: 4 > +float: 2 > +ldouble: 5 > + > +Function: Real part of "cacos_upward": > +double: 2 > +float: 2 > +ldouble: 3 > + > +Function: Imaginary part of "cacos_upward": > +double: 5 > +float: 7 > +ldouble: 7 > + > +Function: Real part of "cacosh": > +double: 2 > +float: 2 > +ldouble: 2 > + > +Function: Imaginary part of "cacosh": > +double: 1 > +float: 2 > +ldouble: 2 > + > +Function: Real part of "cacosh_downward": > +double: 4 > +float: 2 > +ldouble: 5 > + > +Function: Imaginary part of "cacosh_downward": > +double: 3 > +float: 3 > +ldouble: 4 > + > +Function: Real part of "cacosh_towardzero": > +double: 4 > +float: 2 > +ldouble: 5 > + > +Function: Imaginary part of "cacosh_towardzero": > +double: 3 > +float: 2 > +ldouble: 3 > + > +Function: Real part of "cacosh_upward": > +double: 4 > +float: 3 > +ldouble: 6 > + > +Function: Imaginary part of "cacosh_upward": > +double: 3 > +float: 2 > +ldouble: 4 > + > +Function: "carg": > +float: 1 > +ldouble: 2 > + > +Function: "carg_downward": > +double: 1 > +float: 2 > +ldouble: 2 > + > +Function: "carg_towardzero": > +double: 1 > +float: 2 > +ldouble: 3 > + > +Function: "carg_upward": > +double: 1 > +float: 2 > +ldouble: 2 > + > +Function: Real part of "casin": > +double: 1 > +float: 1 > +ldouble: 2 > + > +Function: Imaginary part of "casin": > +double: 2 > +float: 2 > +ldouble: 2 > + > +Function: Real part of "casin_downward": > +double: 3 > +float: 2 > +ldouble: 3 > + > +Function: Imaginary part of "casin_downward": > +double: 5 > +float: 3 > +ldouble: 6 > + > +Function: Real part of "casin_towardzero": > +double: 3 > +float: 1 > +ldouble: 3 > + > +Function: Imaginary part of "casin_towardzero": > +double: 4 > +float: 2 > +ldouble: 5 > + > +Function: Real part of "casin_upward": > +double: 3 > +float: 2 > +ldouble: 3 > + > +Function: Imaginary part of "casin_upward": > +double: 5 > +float: 7 > +ldouble: 7 > + > +Function: Real part of "casinh": > +double: 2 > +float: 2 > +ldouble: 2 > + > +Function: Imaginary part of "casinh": > +double: 1 > +float: 1 > +ldouble: 2 > + > +Function: Real part of "casinh_downward": > +double: 5 > +float: 3 > +ldouble: 6 > + > +Function: Imaginary part of "casinh_downward": > +double: 3 > +float: 2 > +ldouble: 3 > + > +Function: Real part of "casinh_towardzero": > +double: 4 > +float: 2 > +ldouble: 5 > + > +Function: Imaginary part of "casinh_towardzero": > +double: 3 > +float: 1 > +ldouble: 3 > + > +Function: Real part of "casinh_upward": > +double: 5 > +float: 7 > +ldouble: 7 > + > +Function: Imaginary part of "casinh_upward": > +double: 3 > +float: 2 > +ldouble: 3 > + > +Function: Real part of "catan": > +double: 1 > +float: 1 > +ldouble: 1 > + > +Function: Imaginary part of "catan": > +double: 1 > +float: 1 > +ldouble: 1 > + > +Function: Real part of "catan_downward": > +double: 1 > +float: 2 > +ldouble: 2 > + > +Function: Imaginary part of "catan_downward": > +double: 2 > +float: 2 > +ldouble: 2 > + > +Function: Real part of "catan_towardzero": > +double: 1 > +float: 2 > +ldouble: 2 > + > +Function: Imaginary part of "catan_towardzero": > +double: 2 > +float: 2 > +ldouble: 2 > + > +Function: Real part of "catan_upward": > +double: 1 > +float: 1 > +ldouble: 2 > + > +Function: Imaginary part of "catan_upward": > +double: 2 > +float: 2 > +ldouble: 3 > + > +Function: Real part of "catanh": > +double: 1 > +float: 1 > +ldouble: 1 > + > +Function: Imaginary part of "catanh": > +double: 1 > +float: 1 > +ldouble: 1 > + > +Function: Real part of "catanh_downward": > +double: 2 > +float: 2 > +ldouble: 2 > + > +Function: Imaginary part of "catanh_downward": > +double: 1 > +float: 2 > +ldouble: 2 > + > +Function: Real part of "catanh_towardzero": > +double: 2 > +float: 2 > +ldouble: 2 > + > +Function: Imaginary part of "catanh_towardzero": > +double: 1 > +float: 2 > +ldouble: 2 > + > +Function: Real part of "catanh_upward": > +double: 4 > +float: 4 > +ldouble: 4 > + > +Function: Imaginary part of "catanh_upward": > +double: 1 > +float: 1 > +ldouble: 2 > + > +Function: "cbrt": > +double: 4 > +float: 1 > +ldouble: 1 > + > +Function: "cbrt_downward": > +double: 4 > +float: 1 > +ldouble: 1 > + > +Function: "cbrt_towardzero": > +double: 3 > +float: 1 > +ldouble: 1 > + > +Function: "cbrt_upward": > +double: 5 > +float: 1 > +ldouble: 1 > + > +Function: Real part of "ccos": > +double: 1 > +float: 1 > +ldouble: 1 > + > +Function: Imaginary part of "ccos": > +double: 1 > +float: 1 > +ldouble: 1 > + > +Function: Real part of "ccos_downward": > +double: 1 > +float: 1 > +ldouble: 2 > + > +Function: Imaginary part of "ccos_downward": > +double: 3 > +float: 3 > +ldouble: 2 > + > +Function: Real part of "ccos_towardzero": > +double: 1 > +float: 2 > +ldouble: 2 > + > +Function: Imaginary part of "ccos_towardzero": > +double: 3 > +float: 3 > +ldouble: 2 > + > +Function: Real part of "ccos_upward": > +double: 1 > +float: 2 > +ldouble: 3 > + > +Function: Imaginary part of "ccos_upward": > +double: 2 > +float: 2 > +ldouble: 2 > + > +Function: Real part of "ccosh": > +double: 1 > +float: 1 > +ldouble: 1 > + > +Function: Imaginary part of "ccosh": > +double: 1 > +float: 1 > +ldouble: 1 > + > +Function: Real part of "ccosh_downward": > +double: 2 > +float: 2 > +ldouble: 2 > + > +Function: Imaginary part of "ccosh_downward": > +double: 3 > +float: 3 > +ldouble: 2 > + > +Function: Real part of "ccosh_towardzero": > +double: 2 > +float: 3 > +ldouble: 2 > + > +Function: Imaginary part of "ccosh_towardzero": > +double: 3 > +float: 3 > +ldouble: 2 > + > +Function: Real part of "ccosh_upward": > +double: 1 > +float: 2 > +ldouble: 3 > + > +Function: Imaginary part of "ccosh_upward": > +double: 2 > +float: 2 > +ldouble: 2 > + > +Function: Real part of "cexp": > +double: 2 > +float: 1 > +ldouble: 1 > + > +Function: Imaginary part of "cexp": > +double: 1 > +float: 2 > +ldouble: 1 > + > +Function: Real part of "cexp_downward": > +double: 2 > +float: 2 > +ldouble: 2 > + > +Function: Imaginary part of "cexp_downward": > +double: 3 > +float: 3 > +ldouble: 2 > + > +Function: Real part of "cexp_towardzero": > +double: 2 > +float: 2 > +ldouble: 2 > + > +Function: Imaginary part of "cexp_towardzero": > +double: 3 > +float: 3 > +ldouble: 2 > + > +Function: Real part of "cexp_upward": > +double: 1 > +float: 2 > +ldouble: 3 > + > +Function: Imaginary part of "cexp_upward": > +double: 3 > +float: 2 > +ldouble: 3 > + > +Function: Real part of "clog": > +double: 3 > +float: 3 > +ldouble: 2 > + > +Function: Imaginary part of "clog": > +double: 1 > +float: 1 > +ldouble: 1 > + > +Function: Real part of "clog10": > +double: 3 > +float: 4 > +ldouble: 2 > + > +Function: Imaginary part of "clog10": > +double: 2 > +float: 2 > +ldouble: 2 > + > +Function: Real part of "clog10_downward": > +double: 5 > +float: 5 > +ldouble: 3 > + > +Function: Imaginary part of "clog10_downward": > +double: 2 > +float: 4 > +ldouble: 3 > + > +Function: Real part of "clog10_towardzero": > +double: 5 > +float: 6 > +ldouble: 4 > + > +Function: Imaginary part of "clog10_towardzero": > +double: 2 > +float: 4 > +ldouble: 3 > + > +Function: Real part of "clog10_upward": > +double: 6 > +float: 5 > +ldouble: 4 > + > +Function: Imaginary part of "clog10_upward": > +double: 2 > +float: 4 > +ldouble: 3 > + > +Function: Real part of "clog_downward": > +double: 4 > +float: 3 > +ldouble: 3 > + > +Function: Imaginary part of "clog_downward": > +double: 1 > +float: 2 > +ldouble: 2 > + > +Function: Real part of "clog_towardzero": > +double: 4 > +float: 4 > +ldouble: 3 > + > +Function: Imaginary part of "clog_towardzero": > +double: 1 > +float: 3 > +ldouble: 2 > + > +Function: Real part of "clog_upward": > +double: 4 > +float: 3 > +ldouble: 4 > + > +Function: Imaginary part of "clog_upward": > +double: 1 > +float: 2 > +ldouble: 2 > + > +Function: "cos": > +double: 1 > +float: 1 > +ldouble: 2 > + > +Function: "cos_downward": > +double: 1 > +float: 1 > +ldouble: 3 > + > +Function: "cos_towardzero": > +double: 1 > +float: 1 > +ldouble: 1 > + > +Function: "cos_upward": > +double: 1 > +float: 1 > +ldouble: 2 > + > +Function: "cosh": > +double: 2 > +float: 2 > +ldouble: 2 > + > +Function: "cosh_downward": > +double: 3 > +float: 1 > +ldouble: 3 > + > +Function: "cosh_towardzero": > +double: 3 > +float: 1 > +ldouble: 3 > + > +Function: "cosh_upward": > +double: 2 > +float: 2 > +ldouble: 3 > + > +Function: Real part of "cpow": > +double: 2 > +float: 5 > +ldouble: 4 > + > +Function: Imaginary part of "cpow": > +float: 2 > +ldouble: 1 > + > +Function: Real part of "cpow_downward": > +double: 5 > +float: 8 > +ldouble: 6 > + > +Function: Imaginary part of "cpow_downward": > +double: 1 > +float: 2 > +ldouble: 2 > + > +Function: Real part of "cpow_towardzero": > +double: 5 > +float: 8 > +ldouble: 6 > + > +Function: Imaginary part of "cpow_towardzero": > +double: 1 > +float: 2 > +ldouble: 2 > + > +Function: Real part of "cpow_upward": > +double: 4 > +float: 1 > +ldouble: 3 > + > +Function: Imaginary part of "cpow_upward": > +double: 1 > +float: 2 > +ldouble: 2 > + > +Function: Real part of "csin": > +double: 1 > +float: 1 > +ldouble: 1 > + > +Function: Imaginary part of "csin": > +ldouble: 1 > + > +Function: Real part of "csin_downward": > +double: 3 > +float: 3 > +ldouble: 2 > + > +Function: Imaginary part of "csin_downward": > +double: 1 > +float: 1 > +ldouble: 2 > + > +Function: Real part of "csin_towardzero": > +double: 3 > +float: 3 > +ldouble: 2 > + > +Function: Imaginary part of "csin_towardzero": > +double: 1 > +float: 1 > +ldouble: 2 > + > +Function: Real part of "csin_upward": > +double: 2 > +float: 2 > +ldouble: 2 > + > +Function: Imaginary part of "csin_upward": > +double: 1 > +float: 2 > +ldouble: 3 > + > +Function: Real part of "csinh": > +float: 1 > +ldouble: 1 > + > +Function: Imaginary part of "csinh": > +double: 1 > +float: 1 > +ldouble: 1 > + > +Function: Real part of "csinh_downward": > +double: 2 > +float: 1 > +ldouble: 2 > + > +Function: Imaginary part of "csinh_downward": > +double: 3 > +float: 3 > +ldouble: 2 > + > +Function: Real part of "csinh_towardzero": > +double: 2 > +float: 2 > +ldouble: 2 > + > +Function: Imaginary part of "csinh_towardzero": > +double: 3 > +float: 3 > +ldouble: 2 > + > +Function: Real part of "csinh_upward": > +double: 1 > +float: 2 > +ldouble: 3 > + > +Function: Imaginary part of "csinh_upward": > +double: 2 > +float: 2 > +ldouble: 2 > + > +Function: Real part of "csqrt": > +double: 2 > +float: 2 > +ldouble: 2 > + > +Function: Imaginary part of "csqrt": > +double: 2 > +float: 2 > +ldouble: 2 > + > +Function: Real part of "csqrt_downward": > +double: 5 > +float: 4 > +ldouble: 4 > + > +Function: Imaginary part of "csqrt_downward": > +double: 4 > +float: 3 > +ldouble: 3 > + > +Function: Real part of "csqrt_towardzero": > +double: 4 > +float: 3 > +ldouble: 3 > + > +Function: Imaginary part of "csqrt_towardzero": > +double: 4 > +float: 3 > +ldouble: 3 > + > +Function: Real part of "csqrt_upward": > +double: 5 > +float: 4 > +ldouble: 4 > + > +Function: Imaginary part of "csqrt_upward": > +double: 3 > +float: 3 > +ldouble: 3 > + > +Function: Real part of "ctan": > +double: 2 > +float: 1 > +ldouble: 3 > + > +Function: Imaginary part of "ctan": > +double: 2 > +float: 2 > +ldouble: 3 > + > +Function: Real part of "ctan_downward": > +double: 6 > +float: 5 > +ldouble: 4 > + > +Function: Imaginary part of "ctan_downward": > +double: 2 > +float: 2 > +ldouble: 5 > + > +Function: Real part of "ctan_towardzero": > +double: 5 > +float: 3 > +ldouble: 4 > + > +Function: Imaginary part of "ctan_towardzero": > +double: 2 > +float: 2 > +ldouble: 5 > + > +Function: Real part of "ctan_upward": > +double: 2 > +float: 4 > +ldouble: 5 > + > +Function: Imaginary part of "ctan_upward": > +double: 2 > +float: 2 > +ldouble: 5 > + > +Function: Real part of "ctanh": > +double: 2 > +float: 2 > +ldouble: 3 > + > +Function: Imaginary part of "ctanh": > +double: 2 > +float: 2 > +ldouble: 3 > + > +Function: Real part of "ctanh_downward": > +double: 4 > +float: 2 > +ldouble: 5 > + > +Function: Imaginary part of "ctanh_downward": > +double: 6 > +float: 5 > +ldouble: 4 > + > +Function: Real part of "ctanh_towardzero": > +double: 2 > +float: 2 > +ldouble: 5 > + > +Function: Imaginary part of "ctanh_towardzero": > +double: 5 > +float: 3 > +ldouble: 3 > + > +Function: Real part of "ctanh_upward": > +double: 2 > +float: 2 > +ldouble: 5 > + > +Function: Imaginary part of "ctanh_upward": > +double: 2 > +float: 3 > +ldouble: 5 > + > +Function: "erf": > +double: 1 > +float: 1 > +ldouble: 1 > + > +Function: "erf_downward": > +double: 1 > +float: 1 > +ldouble: 2 > + > +Function: "erf_towardzero": > +double: 1 > +float: 1 > +ldouble: 1 > + > +Function: "erf_upward": > +double: 1 > +float: 1 > +ldouble: 2 > + > +Function: "erfc": > +double: 5 > +float: 3 > +ldouble: 4 > + > +Function: "erfc_downward": > +double: 5 > +float: 6 > +ldouble: 5 > + > +Function: "erfc_towardzero": > +double: 3 > +float: 4 > +ldouble: 4 > + > +Function: "erfc_upward": > +double: 5 > +float: 6 > +ldouble: 5 > + > +Function: "exp": > +double: 1 > +float: 1 > +ldouble: 1 > + > +Function: "exp10": > +double: 2 > +ldouble: 2 > + > +Function: "exp10_downward": > +double: 3 > +float: 1 > +ldouble: 3 > + > +Function: "exp10_towardzero": > +double: 3 > +float: 1 > +ldouble: 3 > + > +Function: "exp10_upward": > +double: 2 > +float: 1 > +ldouble: 3 > + > +Function: "exp2": > +double: 1 > +ldouble: 1 > + > +Function: "exp2_downward": > +double: 1 > +ldouble: 1 > + > +Function: "exp2_towardzero": > +double: 1 > +ldouble: 1 > + > +Function: "exp2_upward": > +double: 1 > +float: 1 > +ldouble: 2 > + > +Function: "exp_downward": > +double: 1 > +float: 1 > + > +Function: "exp_towardzero": > +double: 1 > +float: 1 > + > +Function: "exp_upward": > +double: 1 > +float: 1 > + > +Function: "expm1": > +double: 1 > +float: 1 > +ldouble: 2 > + > +Function: "expm1_downward": > +double: 1 > +float: 1 > +ldouble: 2 > + > +Function: "expm1_towardzero": > +double: 1 > +float: 2 > +ldouble: 4 > + > +Function: "expm1_upward": > +double: 1 > +float: 1 > +ldouble: 3 > + > +Function: "gamma": > +double: 4 > +float: 7 > +ldouble: 5 > + > +Function: "gamma_downward": > +double: 5 > +float: 7 > +ldouble: 8 > + > +Function: "gamma_towardzero": > +double: 5 > +float: 6 > +ldouble: 5 > + > +Function: "gamma_upward": > +double: 5 > +float: 6 > +ldouble: 8 > + > +Function: "hypot": > +double: 1 > +ldouble: 1 > + > +Function: "hypot_downward": > +double: 1 > +ldouble: 1 > + > +Function: "hypot_towardzero": > +double: 1 > +ldouble: 1 > + > +Function: "hypot_upward": > +double: 1 > +ldouble: 1 > + > +Function: "j0": > +double: 3 > +float: 9 > +ldouble: 2 > + > +Function: "j0_downward": > +double: 6 > +float: 9 > +ldouble: 9 > + > +Function: "j0_towardzero": > +double: 7 > +float: 9 > +ldouble: 9 > + > +Function: "j0_upward": > +double: 9 > +float: 9 > +ldouble: 7 > + > +Function: "j1": > +double: 4 > +float: 9 > +ldouble: 4 > + > +Function: "j1_downward": > +double: 5 > +float: 8 > +ldouble: 4 > + > +Function: "j1_towardzero": > +double: 4 > +float: 8 > +ldouble: 4 > + > +Function: "j1_upward": > +double: 9 > +float: 9 > +ldouble: 3 > + > +Function: "jn": > +double: 4 > +float: 4 > +ldouble: 7 > + > +Function: "jn_downward": > +double: 5 > +float: 5 > +ldouble: 8 > + > +Function: "jn_towardzero": > +double: 5 > +float: 5 > +ldouble: 8 > + > +Function: "jn_upward": > +double: 5 > +float: 4 > +ldouble: 7 > + > +Function: "lgamma": > +double: 4 > +float: 7 > +ldouble: 5 > + > +Function: "lgamma_downward": > +double: 5 > +float: 7 > +ldouble: 8 > + > +Function: "lgamma_towardzero": > +double: 5 > +float: 6 > +ldouble: 5 > + > +Function: "lgamma_upward": > +double: 5 > +float: 6 > +ldouble: 8 > + > +Function: "log": > +double: 1 > +ldouble: 1 > + > +Function: "log10": > +double: 2 > +float: 2 > +ldouble: 2 > + > +Function: "log10_downward": > +double: 2 > +float: 3 > +ldouble: 1 > + > +Function: "log10_towardzero": > +double: 2 > +float: 1 > +ldouble: 1 > + > +Function: "log10_upward": > +double: 2 > +float: 2 > +ldouble: 1 > + > +Function: "log1p": > +double: 1 > +float: 1 > +ldouble: 3 > + > +Function: "log1p_downward": > +double: 2 > +float: 2 > +ldouble: 3 > + > +Function: "log1p_towardzero": > +double: 2 > +float: 2 > +ldouble: 3 > + > +Function: "log1p_upward": > +double: 2 > +float: 2 > +ldouble: 2 > + > +Function: "log2": > +double: 1 > +float: 1 > +ldouble: 3 > + > +Function: "log2_downward": > +double: 3 > +ldouble: 3 > + > +Function: "log2_towardzero": > +double: 2 > +ldouble: 1 > + > +Function: "log2_upward": > +double: 3 > +ldouble: 1 > + > +Function: "log_downward": > +ldouble: 1 > + > +Function: "log_towardzero": > +ldouble: 2 > + > +Function: "log_upward": > +double: 1 > +ldouble: 2 > + > +Function: "pow": > +double: 1 > +ldouble: 2 > + > +Function: "pow_downward": > +double: 1 > +float: 1 > +ldouble: 2 > + > +Function: "pow_towardzero": > +double: 1 > +float: 1 > +ldouble: 2 > + > +Function: "pow_upward": > +double: 1 > +float: 1 > +ldouble: 2 > + > +Function: "sin": > +double: 1 > +float: 1 > +ldouble: 2 > + > +Function: "sin_downward": > +double: 1 > +float: 1 > +ldouble: 3 > + > +Function: "sin_towardzero": > +double: 1 > +float: 1 > +ldouble: 2 > + > +Function: "sin_upward": > +double: 1 > +float: 1 > +ldouble: 3 > + > +Function: "sincos": > +double: 1 > +ldouble: 1 > + > +Function: "sincos_downward": > +double: 1 > +float: 1 > +ldouble: 3 > + > +Function: "sincos_towardzero": > +double: 1 > +float: 1 > +ldouble: 2 > + > +Function: "sincos_upward": > +double: 1 > +float: 1 > +ldouble: 3 > + > +Function: "sinh": > +double: 2 > +float: 2 > +ldouble: 2 > + > +Function: "sinh_downward": > +double: 3 > +float: 3 > +ldouble: 3 > + > +Function: "sinh_towardzero": > +double: 3 > +float: 2 > +ldouble: 3 > + > +Function: "sinh_upward": > +double: 3 > +float: 3 > +ldouble: 4 > + > +Function: "tan": > +double: 1 > +float: 1 > +ldouble: 1 > + > +Function: "tan_downward": > +double: 1 > +float: 2 > +ldouble: 1 > + > +Function: "tan_towardzero": > +double: 1 > +float: 1 > +ldouble: 1 > + > +Function: "tan_upward": > +double: 1 > +float: 1 > +ldouble: 1 > + > +Function: "tanh": > +double: 2 > +float: 2 > +ldouble: 2 > + > +Function: "tanh_downward": > +double: 3 > +float: 3 > +ldouble: 4 > + > +Function: "tanh_towardzero": > +double: 2 > +float: 2 > +ldouble: 3 > + > +Function: "tanh_upward": > +double: 3 > +float: 3 > +ldouble: 3 > + > +Function: "tgamma": > +double: 9 > +float: 8 > +ldouble: 4 > + > +Function: "tgamma_downward": > +double: 9 > +float: 7 > +ldouble: 5 > + > +Function: "tgamma_towardzero": > +double: 9 > +float: 7 > +ldouble: 5 > + > +Function: "tgamma_upward": > +double: 9 > +float: 8 > +ldouble: 4 > + > +Function: "y0": > +double: 3 > +float: 9 > +ldouble: 3 > + > +Function: "y0_downward": > +double: 3 > +float: 9 > +ldouble: 7 > + > +Function: "y0_towardzero": > +double: 4 > +float: 9 > +ldouble: 3 > + > +Function: "y0_upward": > +double: 3 > +float: 9 > +ldouble: 4 > + > +Function: "y1": > +double: 3 > +float: 9 > +ldouble: 5 > + > +Function: "y1_downward": > +double: 6 > +float: 9 > +ldouble: 5 > + > +Function: "y1_towardzero": > +double: 3 > +float: 9 > +ldouble: 2 > + > +Function: "y1_upward": > +double: 7 > +float: 9 > +ldouble: 5 > + > +Function: "yn": > +double: 3 > +float: 3 > +ldouble: 5 > + > +Function: "yn_downward": > +double: 3 > +float: 4 > +ldouble: 5 > + > +Function: "yn_towardzero": > +double: 3 > +float: 3 > +ldouble: 5 > + > +Function: "yn_upward": > +double: 4 > +float: 5 > +ldouble: 5 > + > +# end of automatic generation > diff --git a/sysdeps/loongarch/lp64/libm-test-ulps-name b/sysdeps/loongarch/lp64/libm-test-ulps-name > new file mode 100644 > index 0000000000..ce02281eab > --- /dev/null > +++ b/sysdeps/loongarch/lp64/libm-test-ulps-name > @@ -0,0 +1 @@ > +LoongArch 64-bit > diff --git a/sysdeps/loongarch/math_private.h b/sysdeps/loongarch/math_private.h > new file mode 100644 > index 0000000000..cdf26a78dd > --- /dev/null > +++ b/sysdeps/loongarch/math_private.h > @@ -0,0 +1,248 @@ > +/* Internal math stuff. > + Copyright (C) 2022 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <https://www.gnu.org/licenses/>. */ > + > +#ifndef LOONGARCH_MATH_PRIVATE_H > +#define LOONGARCH_MATH_PRIVATE_H 1 > + > +/* Inline functions to speed up the math library implementation. The > + default versions of these routines are in generic/math_private.h > + and call fesetround, feholdexcept, etc. These routines use inlined > + code instead. */ > + > +#ifdef __loongarch_hard_float > + > +#include <fenv.h> > +#include <fenv_libc.h> > +#include <fpu_control.h> > + > +#define _FPU_MASK_ALL \ > + (_FPU_MASK_V | _FPU_MASK_Z | _FPU_MASK_O | _FPU_MASK_U | _FPU_MASK_I \ > + | FE_ALL_EXCEPT) > + > +static __always_inline void > +libc_feholdexcept_loongarch (fenv_t *envp) > +{ > + fpu_control_t cw; > + > + /* Save the current state. */ > + _FPU_GETCW (cw); > + envp->__fp_control_register = cw; > + > + /* Clear all exception enable bits and flags. */ > + cw &= ~(_FPU_MASK_ALL); > + _FPU_SETCW (cw); > +} > +#define libc_feholdexcept libc_feholdexcept_loongarch > +#define libc_feholdexceptf libc_feholdexcept_loongarch > +#define libc_feholdexceptl libc_feholdexcept_loongarch > + > +static __always_inline void > +libc_fesetround_loongarch (int round) > +{ > + fpu_control_t cw; > + > + /* Get current state. */ > + _FPU_GETCW (cw); > + > + /* Set rounding bits. */ > + cw &= ~_FPU_RC_MASK; > + cw |= round; > + > + /* Set new state. */ > + _FPU_SETCW (cw); > +} > +#define libc_fesetround libc_fesetround_loongarch > +#define libc_fesetroundf libc_fesetround_loongarch > +#define libc_fesetroundl libc_fesetround_loongarch > + > +static __always_inline void > +libc_feholdexcept_setround_loongarch (fenv_t *envp, int round) > +{ > + fpu_control_t cw; > + > + /* Save the current state. */ > + _FPU_GETCW (cw); > + envp->__fp_control_register = cw; > + > + /* Clear all exception enable bits and flags. */ > + cw &= ~(_FPU_MASK_ALL); > + > + /* Set rounding bits. */ > + cw &= ~_FPU_RC_MASK; > + cw |= round; > + > + /* Set new state. */ > + _FPU_SETCW (cw); > +} > +#define libc_feholdexcept_setround libc_feholdexcept_setround_loongarch > +#define libc_feholdexcept_setroundf libc_feholdexcept_setround_loongarch > +#define libc_feholdexcept_setroundl libc_feholdexcept_setround_loongarch > + > +#define libc_feholdsetround libc_feholdexcept_setround_loongarch > +#define libc_feholdsetroundf libc_feholdexcept_setround_loongarch > +#define libc_feholdsetroundl libc_feholdexcept_setround_loongarch > + > +static __always_inline void > +libc_fesetenv_loongarch (fenv_t *envp) > +{ > + fpu_control_t cw __attribute__ ((unused)); > + > + /* Read current state to flush fpu pipeline. */ > + _FPU_GETCW (cw); > + > + _FPU_SETCW (envp->__fp_control_register); > +} > +#define libc_fesetenv libc_fesetenv_loongarch > +#define libc_fesetenvf libc_fesetenv_loongarch > +#define libc_fesetenvl libc_fesetenv_loongarch > + > +static __always_inline int > +libc_feupdateenv_test_loongarch (fenv_t *envp, int excepts) > +{ > + /* int ret = fetestexcept (excepts); feupdateenv (envp); return ret; */ > + int cw, temp; > + > + /* Get current control word. */ > + _FPU_GETCW (cw); > + > + /* Set flag bits (which are accumulative), and *also* set the > + cause bits. The setting of the cause bits is what actually causes > + the hardware to generate the exception, if the corresponding enable > + bit is set as well. */ > + temp = cw & FE_ALL_EXCEPT; > + temp |= envp->__fp_control_register | (temp << CAUSE_SHIFT); > + > + /* Set new state. */ > + _FPU_SETCW (temp); > + > + return cw & excepts & FE_ALL_EXCEPT; > +} > +#define libc_feupdateenv_test libc_feupdateenv_test_loongarch > +#define libc_feupdateenv_testf libc_feupdateenv_test_loongarch > +#define libc_feupdateenv_testl libc_feupdateenv_test_loongarch > + > +static __always_inline void > +libc_feupdateenv_loongarch (fenv_t *envp) > +{ > + libc_feupdateenv_test_loongarch (envp, 0); > +} > +#define libc_feupdateenv libc_feupdateenv_loongarch > +#define libc_feupdateenvf libc_feupdateenv_loongarch > +#define libc_feupdateenvl libc_feupdateenv_loongarch > + > +#define libc_feresetround libc_feupdateenv_loongarch > +#define libc_feresetroundf libc_feupdateenv_loongarch > +#define libc_feresetroundl libc_feupdateenv_loongarch > + > +static __always_inline int > +libc_fetestexcept_loongarch (int excepts) > +{ > + int cw; > + > + /* Get current control word. */ > + _FPU_GETCW (cw); > + > + return cw & excepts & FE_ALL_EXCEPT; > +} > +#define libc_fetestexcept libc_fetestexcept_loongarch > +#define libc_fetestexceptf libc_fetestexcept_loongarch > +#define libc_fetestexceptl libc_fetestexcept_loongarch > + > +/* Enable support for rounding mode context. */ > +#define HAVE_RM_CTX 1 > + > +static __always_inline void > +libc_feholdexcept_setround_loongarch_ctx (struct rm_ctx *ctx, int round) > +{ > + fpu_control_t old, new; > + > + /* Save the current state. */ > + _FPU_GETCW (old); > + ctx->env.__fp_control_register = old; > + > + /* Clear all exception enable bits and flags. */ > + new = old & ~(_FPU_MASK_ALL); > + > + /* Set rounding bits. */ > + new = (new & ~_FPU_RC_MASK) | round; > + > + if (__glibc_unlikely (new != old)) > + { > + _FPU_SETCW (new); > + ctx->updated_status = true; > + } > + else > + ctx->updated_status = false; > +} > +#define libc_feholdexcept_setround_ctx libc_feholdexcept_setround_loongarch_ctx > +#define libc_feholdexcept_setroundf_ctx \ > + libc_feholdexcept_setround_loongarch_ctx > +#define libc_feholdexcept_setroundl_ctx \ > + libc_feholdexcept_setround_loongarch_ctx > + > +static __always_inline void > +libc_fesetenv_loongarch_ctx (struct rm_ctx *ctx) > +{ > + libc_fesetenv_loongarch (&ctx->env); > +} > +#define libc_fesetenv_ctx libc_fesetenv_loongarch_ctx > +#define libc_fesetenvf_ctx libc_fesetenv_loongarch_ctx > +#define libc_fesetenvl_ctx libc_fesetenv_loongarch_ctx > + > +static __always_inline void > +libc_feupdateenv_loongarch_ctx (struct rm_ctx *ctx) > +{ > + if (__glibc_unlikely (ctx->updated_status)) > + libc_feupdateenv_test_loongarch (&ctx->env, 0); > +} > +#define libc_feupdateenv_ctx libc_feupdateenv_loongarch_ctx > +#define libc_feupdateenvf_ctx libc_feupdateenv_loongarch_ctx > +#define libc_feupdateenvl_ctx libc_feupdateenv_loongarch_ctx > +#define libc_feresetround_ctx libc_feupdateenv_loongarch_ctx > +#define libc_feresetroundf_ctx libc_feupdateenv_loongarch_ctx > +#define libc_feresetroundl_ctx libc_feupdateenv_loongarch_ctx > + > +static __always_inline void > +libc_feholdsetround_loongarch_ctx (struct rm_ctx *ctx, int round) > +{ > + fpu_control_t old, new; > + > + /* Save the current state. */ > + _FPU_GETCW (old); > + ctx->env.__fp_control_register = old; > + > + /* Set rounding bits. */ > + new = (old & ~_FPU_RC_MASK) | round; > + > + if (__glibc_unlikely (new != old)) > + { > + _FPU_SETCW (new); > + ctx->updated_status = true; > + } > + else > + ctx->updated_status = false; > +} > +#define libc_feholdsetround_ctx libc_feholdsetround_loongarch_ctx > +#define libc_feholdsetroundf_ctx libc_feholdsetround_loongarch_ctx > +#define libc_feholdsetroundl_ctx libc_feholdsetround_loongarch_ctx > + > +#endif > + > +#include_next <math_private.h> > + > +#endif ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v7 12/13] LoongArch: Update build-many-glibcs.py for the LoongArch Port. 2022-07-19 1:22 [PATCH v7 09/13] LoongArch: Add ABI Lists caiyinyu 2022-07-19 1:22 ` [PATCH v7 10/13] LoongArch: Build Infastructure caiyinyu 2022-07-19 1:22 ` [PATCH v7 11/13] LoongArch: Hard Float Support caiyinyu @ 2022-07-19 1:22 ` caiyinyu 2022-07-20 17:16 ` Adhemerval Zanella Netto 2022-07-19 1:22 ` [PATCH v7 13/13] LoongArch: Update NEWS and README for the LoongArch port caiyinyu 3 siblings, 1 reply; 9+ messages in thread From: caiyinyu @ 2022-07-19 1:22 UTC (permalink / raw) To: adhemerval.zanella, libc-alpha, joseph_myers, carlos, i.swmail; +Cc: caiyinyu --- scripts/build-many-glibcs.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/scripts/build-many-glibcs.py b/scripts/build-many-glibcs.py index cc058e115c..da9b905900 100755 --- a/scripts/build-many-glibcs.py +++ b/scripts/build-many-glibcs.py @@ -218,6 +218,10 @@ class Context(object): os_name='linux-gnu', first_gcc_cfg=['--with-system-libunwind'], binutils_cfg=['--enable-obsolete']) + self.add_config(arch='loongarch64', + os_name='linux-gnu', + variant='lp64d', + gcc_cfg=['--with-abi=lp64d','--disable-multilib']) self.add_config(arch='m68k', os_name='linux-gnu', gcc_cfg=['--disable-multilib']) @@ -1271,6 +1275,7 @@ def install_linux_headers(policy, cmdlist): 'i686': 'x86', 'i786': 'x86', 'ia64': 'ia64', + 'loongarch64': 'loongarch', 'm68k': 'm68k', 'microblaze': 'microblaze', 'mips': 'mips', -- 2.31.1 ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v7 12/13] LoongArch: Update build-many-glibcs.py for the LoongArch Port. 2022-07-19 1:22 ` [PATCH v7 12/13] LoongArch: Update build-many-glibcs.py for the LoongArch Port caiyinyu @ 2022-07-20 17:16 ` Adhemerval Zanella Netto 0 siblings, 0 replies; 9+ messages in thread From: Adhemerval Zanella Netto @ 2022-07-20 17:16 UTC (permalink / raw) To: caiyinyu, libc-alpha, joseph_myers, carlos, i.swmail LGTM, thanks. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org> On 18/07/22 22:22, caiyinyu wrote: > --- > scripts/build-many-glibcs.py | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/scripts/build-many-glibcs.py b/scripts/build-many-glibcs.py > index cc058e115c..da9b905900 100755 > --- a/scripts/build-many-glibcs.py > +++ b/scripts/build-many-glibcs.py > @@ -218,6 +218,10 @@ class Context(object): > os_name='linux-gnu', > first_gcc_cfg=['--with-system-libunwind'], > binutils_cfg=['--enable-obsolete']) > + self.add_config(arch='loongarch64', > + os_name='linux-gnu', > + variant='lp64d', > + gcc_cfg=['--with-abi=lp64d','--disable-multilib']) > self.add_config(arch='m68k', > os_name='linux-gnu', > gcc_cfg=['--disable-multilib']) > @@ -1271,6 +1275,7 @@ def install_linux_headers(policy, cmdlist): > 'i686': 'x86', > 'i786': 'x86', > 'ia64': 'ia64', > + 'loongarch64': 'loongarch', > 'm68k': 'm68k', > 'microblaze': 'microblaze', > 'mips': 'mips', ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v7 13/13] LoongArch: Update NEWS and README for the LoongArch port. 2022-07-19 1:22 [PATCH v7 09/13] LoongArch: Add ABI Lists caiyinyu ` (2 preceding siblings ...) 2022-07-19 1:22 ` [PATCH v7 12/13] LoongArch: Update build-many-glibcs.py for the LoongArch Port caiyinyu @ 2022-07-19 1:22 ` caiyinyu 2022-07-20 17:16 ` Adhemerval Zanella Netto 3 siblings, 1 reply; 9+ messages in thread From: caiyinyu @ 2022-07-19 1:22 UTC (permalink / raw) To: adhemerval.zanella, libc-alpha, joseph_myers, carlos, i.swmail; +Cc: caiyinyu --- NEWS | 8 ++++++++ README | 1 + manual/math.texi | 2 +- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index df882ec243..d2f913da06 100644 --- a/NEWS +++ b/NEWS @@ -60,6 +60,14 @@ Major new features: _GNU_SOURCE macro is defined and the C++20 __cpp_char8_t feature test macro is not defined (if __cpp_char8_t is defined, then char8_t is a builtin type). +* Support for LoongArch running on Linux has been added. This port requires + as least binutils 2.38, GCC 12, and Linux 5.19. Currently only hard-float + ABI is supported: + + - loongarch64-linux-gnu + + The LoongArch ABI is 64-bit little-endian. + Deprecated and removed features, and other changes affecting compatibility: * Support for prelink will be removed in the next release; this includes diff --git a/README b/README index 3d5a78ccff..63f3a1bebf 100644 --- a/README +++ b/README @@ -31,6 +31,7 @@ The GNU C Library supports these configurations for using Linux kernels: i[4567]86-*-linux-gnu x86_64-*-linux-gnu Can build either x86_64 or x32 ia64-*-linux-gnu + loongarch64-*-linux-gnu Hardware floating point, LE only. m68k-*-linux-gnu microblaze*-*-linux-gnu mips-*-linux-gnu diff --git a/manual/math.texi b/manual/math.texi index 477a18b6d1..105d6122df 100644 --- a/manual/math.texi +++ b/manual/math.texi @@ -70,7 +70,7 @@ provided for @code{_Float32}, @code{_Float64} and @code{_Float32x} on all platforms. It is also provided for @code{_Float128} and @code{_Float64x} on powerpc64le (PowerPC 64-bits little-endian), x86_64, x86, ia64, -aarch64, alpha, mips64, riscv, s390 and sparc. +aarch64, alpha, loongarch, mips64, riscv, s390 and sparc. @menu * Mathematical Constants:: Precise numeric values for often-used -- 2.31.1 ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v7 13/13] LoongArch: Update NEWS and README for the LoongArch port. 2022-07-19 1:22 ` [PATCH v7 13/13] LoongArch: Update NEWS and README for the LoongArch port caiyinyu @ 2022-07-20 17:16 ` Adhemerval Zanella Netto 0 siblings, 0 replies; 9+ messages in thread From: Adhemerval Zanella Netto @ 2022-07-20 17:16 UTC (permalink / raw) To: caiyinyu, libc-alpha, joseph_myers, carlos, i.swmail Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org> On 18/07/22 22:22, caiyinyu wrote: > --- > NEWS | 8 ++++++++ > README | 1 + > manual/math.texi | 2 +- > 3 files changed, 10 insertions(+), 1 deletion(-) > > diff --git a/NEWS b/NEWS > index df882ec243..d2f913da06 100644 > --- a/NEWS > +++ b/NEWS > @@ -60,6 +60,14 @@ Major new features: > _GNU_SOURCE macro is defined and the C++20 __cpp_char8_t feature test macro > is not defined (if __cpp_char8_t is defined, then char8_t is a builtin type). > > +* Support for LoongArch running on Linux has been added. This port requires > + as least binutils 2.38, GCC 12, and Linux 5.19. Currently only hard-float > + ABI is supported: > + > + - loongarch64-linux-gnu > + > + The LoongArch ABI is 64-bit little-endian. > + > Deprecated and removed features, and other changes affecting compatibility: > > * Support for prelink will be removed in the next release; this includes > diff --git a/README b/README > index 3d5a78ccff..63f3a1bebf 100644 > --- a/README > +++ b/README > @@ -31,6 +31,7 @@ The GNU C Library supports these configurations for using Linux kernels: > i[4567]86-*-linux-gnu > x86_64-*-linux-gnu Can build either x86_64 or x32 > ia64-*-linux-gnu > + loongarch64-*-linux-gnu Hardware floating point, LE only. > m68k-*-linux-gnu > microblaze*-*-linux-gnu > mips-*-linux-gnu > diff --git a/manual/math.texi b/manual/math.texi > index 477a18b6d1..105d6122df 100644 > --- a/manual/math.texi > +++ b/manual/math.texi > @@ -70,7 +70,7 @@ provided for @code{_Float32}, @code{_Float64} and @code{_Float32x} on > all platforms. > It is also provided for @code{_Float128} and @code{_Float64x} on > powerpc64le (PowerPC 64-bits little-endian), x86_64, x86, ia64, > -aarch64, alpha, mips64, riscv, s390 and sparc. > +aarch64, alpha, loongarch, mips64, riscv, s390 and sparc. > > @menu > * Mathematical Constants:: Precise numeric values for often-used ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2022-07-21 21:03 UTC | newest] Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2022-07-19 1:22 [PATCH v7 09/13] LoongArch: Add ABI Lists caiyinyu 2022-07-19 1:22 ` [PATCH v7 10/13] LoongArch: Build Infastructure caiyinyu 2022-07-20 17:14 ` Adhemerval Zanella Netto 2022-07-19 1:22 ` [PATCH v7 11/13] LoongArch: Hard Float Support caiyinyu 2022-07-21 21:03 ` Adhemerval Zanella Netto 2022-07-19 1:22 ` [PATCH v7 12/13] LoongArch: Update build-many-glibcs.py for the LoongArch Port caiyinyu 2022-07-20 17:16 ` Adhemerval Zanella Netto 2022-07-19 1:22 ` [PATCH v7 13/13] LoongArch: Update NEWS and README for the LoongArch port caiyinyu 2022-07-20 17:16 ` Adhemerval Zanella Netto
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).