mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-24 05:50:14 +00:00
Remove tilepro-*-linux-gnu support
As from previous discussions [1] this patch removes tileprox-*-linux-gnu support from GLIBC. This patch is a straigthfoward one, which just remove tilepro specific implementation and configurations (no sysdep simplfication or reorganization is done). * README: Remove tilepro-*-linux-gnu from supported architecture. * scripts/build-many-glibcs.py: Likewise. * sysdeps/tile/__tls_get_addr.S (__tls_get_addr): Likewise. * sysdeps/tile/crti.S (PREINIT_FUNCTION): Likewise. * sysdeps/tile/dl-machine.h (ELF_MACHINE_NAME, elf_machine_matches_host, elf_machine_dynamic, elf_machine_load_address, elf_machine_runtime_setup, reloc_howto howto, elf_machine_rela): Likewise * sysdeps/tile/dl-start.S (_start): Likewise. * sysdeps/tile/memcmp.c (DBLALIGN, REVBYTES): Likewise. * sysdeps/tile/memcopy.h (MEMCPY_OK_FOR_FWD_MEMMOVE, MEMCPY_OK_FOR_FWD_MEMMOVE, op_t): Likewise. * sysdeps/tile/nptl/pthread_spin_lock.c (TNS, CMPTNS): Likewise. * sysdeps/tile/nptl/pthread_spin_trylock.c (TNS): Likewise. * sysdeps/tile/nptl/pthread_spin_unlock.c (pthread_spin_unlock): Likewise. * sysdeps/tile/nptl/tls.h (DB_THREAD_SELF): Likewise. * sysdeps/tile/preconfigure: Likewise. * sysdeps/tile/stackguard-macros.h (STACK_CHK_GUARD, POINTER_CHK_GUARD): Likewise. * sysdeps/tile/stackinfo.h (__stackinfo_sub): Likewise. * sysdeps/tile/start.S (_start): Likewise. * sysdeps/tile/tls-macros.h (TLS_GD_OFFSET, TLS_IE_OFFSET, _TLS_LE): Likewise. * sysdeps/tile/sysdep.h (REGSIZE): Likewise. (LD, LD4U, ST, ST4, BNEZ, BEQZ, BEQZT, BGTZ, CMPEQI, CMPEQ, CMOVEQZ, CMOVNEZ): Remove. * sysdeps/unix/sysv/linux/tile/bits/environments.h (__ILP32_OFF32_CFLAGS, __ILP32_OFFBIG_CFLAGS, __ILP32_OFF32_LDFLAGS, __ILP32_OFFBIG_LDFLAGS, __LP64_OFF64_CFLAGS, __LP64_OFF64_LDFLAGS): Likewise. * sysdeps/tile/wordcopy.c (DBLALIGN): Likewise. * sysdeps/tile/tilepro/Implies: Remove file. * sysdeps/tile/tilepro/atomic-machine.h: Likewise. * sysdeps/tile/tilepro/bits/wordsize.h: Likewise. * sysdeps/tile/tilepro/memchr.c: Likewise. * sysdeps/tile/tilepro/memcpy.S: Likewise. * sysdeps/tile/tilepro/memset.c: Likewise. * sysdeps/tile/tilepro/memusage.h: Likewise. * sysdeps/tile/tilepro/rawmemchr.c: Likewise. * sysdeps/tile/tilepro/strchr.c: Likewise. * sysdeps/tile/tilepro/strchrnul.c: Likewise. * sysdeps/tile/tilepro/strlen.c: Likewise. * sysdeps/tile/tilepro/strrchr.c: Likewise. * sysdeps/unix/sysv/linux/tile/tilepro/Implies: Likewise. * sysdeps/unix/sysv/linux/tile/tilepro/c++-types.data: Likewise. * sysdeps/unix/sysv/linux/tile/tilepro/jmp_buf-macros.h: Likewise. * sysdeps/unix/sysv/linux/tile/tilepro/ld.abilist: Likewise. * sysdeps/unix/sysv/linux/tile/tilepro/ldconfig.h: Likewise. * sysdeps/unix/sysv/linux/tile/tilepro/libBrokenLocale.abilist: Likewise. * sysdeps/unix/sysv/linux/tile/tilepro/libanl.abilist: Likewise. * sysdeps/unix/sysv/linux/tile/tilepro/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/tile/tilepro/libcrypt.abilist: Likewise. * sysdeps/unix/sysv/linux/tile/tilepro/libdl.abilist: Likewise. * sysdeps/unix/sysv/linux/tile/tilepro/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/tile/tilepro/libnsl.abilist: Likewise. * sysdeps/unix/sysv/linux/tile/tilepro/libpthread.abilist: Likewise. * sysdeps/unix/sysv/linux/tile/tilepro/libresolv.abilist: Likewise. * sysdeps/unix/sysv/linux/tile/tilepro/librt.abilist: Likewise. * sysdeps/unix/sysv/linux/tile/tilepro/libthread_db.abilist: Likewise. * sysdeps/unix/sysv/linux/tile/tilepro/libutil.abilist: Likewise. * sysdeps/unix/sysv/linux/tile/tilepro/register-dump.h: Likewise. * sysdeps/unix/sysv/linux/tile/sysconf.c (linux_sysconf): Remove tilepro mention in comment. [1] https://sourceware.org/ml/libc-alpha/2017-12/msg00038.html
This commit is contained in:
parent
4735850f7a
commit
ed95f61149
66
ChangeLog
66
ChangeLog
@ -1,5 +1,71 @@
|
||||
2017-12-20 Adhemerval Zanella <adhemerval.zanella@linaro.org>
|
||||
|
||||
* README: Remove tilepro-*-linux-gnu from supported architecture.
|
||||
* scripts/build-many-glibcs.py: Likewise.
|
||||
* sysdeps/tile/__tls_get_addr.S (__tls_get_addr): Likewise.
|
||||
* sysdeps/tile/crti.S (PREINIT_FUNCTION): Likewise.
|
||||
* sysdeps/tile/dl-machine.h (ELF_MACHINE_NAME,
|
||||
elf_machine_matches_host, elf_machine_dynamic,
|
||||
elf_machine_load_address, elf_machine_runtime_setup, reloc_howto
|
||||
howto, elf_machine_rela): Likewise.
|
||||
* sysdeps/tile/dl-start.S (_start): Likewise.
|
||||
* sysdeps/tile/memcmp.c (DBLALIGN, REVBYTES): Likewise.
|
||||
* sysdeps/tile/memcopy.h (MEMCPY_OK_FOR_FWD_MEMMOVE,
|
||||
MEMCPY_OK_FOR_FWD_MEMMOVE, op_t): Likewise.
|
||||
* sysdeps/tile/nptl/pthread_spin_lock.c (TNS, CMPTNS): Likewise.
|
||||
* sysdeps/tile/nptl/pthread_spin_trylock.c (TNS): Likewise.
|
||||
* sysdeps/tile/nptl/pthread_spin_unlock.c (pthread_spin_unlock):
|
||||
Likewise.
|
||||
* sysdeps/tile/nptl/tls.h (DB_THREAD_SELF): Likewise.
|
||||
* sysdeps/tile/preconfigure: Likewise.
|
||||
* sysdeps/tile/stackguard-macros.h (STACK_CHK_GUARD,
|
||||
POINTER_CHK_GUARD): Likewise.
|
||||
* sysdeps/tile/stackinfo.h (__stackinfo_sub): Likewise.
|
||||
* sysdeps/tile/start.S (_start): Likewise.
|
||||
* sysdeps/tile/tls-macros.h (TLS_GD_OFFSET, TLS_IE_OFFSET, _TLS_LE):
|
||||
Likewise.
|
||||
* sysdeps/tile/sysdep.h (REGSIZE): Likewise.
|
||||
(LD, LD4U, ST, ST4, BNEZ, BEQZ, BEQZT, BGTZ, CMPEQI, CMPEQ, CMOVEQZ,
|
||||
CMOVNEZ): Remove.
|
||||
* sysdeps/unix/sysv/linux/tile/bits/environments.h
|
||||
(__ILP32_OFF32_CFLAGS, __ILP32_OFFBIG_CFLAGS, __ILP32_OFF32_LDFLAGS,
|
||||
__ILP32_OFFBIG_LDFLAGS, __LP64_OFF64_CFLAGS, __LP64_OFF64_LDFLAGS):
|
||||
Likewise.
|
||||
* sysdeps/tile/wordcopy.c (DBLALIGN): Likewise.
|
||||
* sysdeps/tile/tilepro/Implies: Remove file.
|
||||
* sysdeps/tile/tilepro/atomic-machine.h: Likewise.
|
||||
* sysdeps/tile/tilepro/bits/wordsize.h: Likewise.
|
||||
* sysdeps/tile/tilepro/memchr.c: Likewise.
|
||||
* sysdeps/tile/tilepro/memcpy.S: Likewise.
|
||||
* sysdeps/tile/tilepro/memset.c: Likewise.
|
||||
* sysdeps/tile/tilepro/memusage.h: Likewise.
|
||||
* sysdeps/tile/tilepro/rawmemchr.c: Likewise.
|
||||
* sysdeps/tile/tilepro/strchr.c: Likewise.
|
||||
* sysdeps/tile/tilepro/strchrnul.c: Likewise.
|
||||
* sysdeps/tile/tilepro/strlen.c: Likewise.
|
||||
* sysdeps/tile/tilepro/strrchr.c: Likewise.
|
||||
* sysdeps/unix/sysv/linux/tile/tilepro/Implies: Likewise.
|
||||
* sysdeps/unix/sysv/linux/tile/tilepro/c++-types.data: Likewise.
|
||||
* sysdeps/unix/sysv/linux/tile/tilepro/jmp_buf-macros.h: Likewise.
|
||||
* sysdeps/unix/sysv/linux/tile/tilepro/ld.abilist: Likewise.
|
||||
* sysdeps/unix/sysv/linux/tile/tilepro/ldconfig.h: Likewise.
|
||||
* sysdeps/unix/sysv/linux/tile/tilepro/libBrokenLocale.abilist:
|
||||
Likewise.
|
||||
* sysdeps/unix/sysv/linux/tile/tilepro/libanl.abilist: Likewise.
|
||||
* sysdeps/unix/sysv/linux/tile/tilepro/libc.abilist: Likewise.
|
||||
* sysdeps/unix/sysv/linux/tile/tilepro/libcrypt.abilist: Likewise.
|
||||
* sysdeps/unix/sysv/linux/tile/tilepro/libdl.abilist: Likewise.
|
||||
* sysdeps/unix/sysv/linux/tile/tilepro/libm.abilist: Likewise.
|
||||
* sysdeps/unix/sysv/linux/tile/tilepro/libnsl.abilist: Likewise.
|
||||
* sysdeps/unix/sysv/linux/tile/tilepro/libpthread.abilist: Likewise.
|
||||
* sysdeps/unix/sysv/linux/tile/tilepro/libresolv.abilist: Likewise.
|
||||
* sysdeps/unix/sysv/linux/tile/tilepro/librt.abilist: Likewise.
|
||||
* sysdeps/unix/sysv/linux/tile/tilepro/libthread_db.abilist: Likewise.
|
||||
* sysdeps/unix/sysv/linux/tile/tilepro/libutil.abilist: Likewise.
|
||||
* sysdeps/unix/sysv/linux/tile/tilepro/register-dump.h: Likewise.
|
||||
* sysdeps/unix/sysv/linux/tile/sysconf.c (linux_sysconf): Remove
|
||||
tilepro mention in comment.
|
||||
|
||||
* nptl/Makefile (libpthread-routines): Add pthread_join_common.
|
||||
* nptl/pthreadP.h (__pthread_timedjoin_ex): New prototype.
|
||||
* nptl/pthread_join_common.c: New file: common function used on
|
||||
|
2
NEWS
2
NEWS
@ -106,6 +106,8 @@ Deprecated and removed features, and other changes affecting compatibility:
|
||||
* The libresolv function p_secstodate is no longer supported for new
|
||||
programs.
|
||||
|
||||
* The tilepro-*-linux-gnu configuration is no longer supported.
|
||||
|
||||
Changes to build and runtime requirements:
|
||||
|
||||
* bison version 2.7 or later is required to generate code in the 'intl'
|
||||
|
1
README
1
README
@ -43,7 +43,6 @@ The GNU C Library supports these configurations for using Linux kernels:
|
||||
sparc*-*-linux-gnu
|
||||
sparc64*-*-linux-gnu
|
||||
tilegx-*-linux-gnu
|
||||
tilepro-*-linux-gnu
|
||||
|
||||
If you are interested in doing a port, please contact the glibc
|
||||
maintainers; see http://www.gnu.org/software/libc/ for more
|
||||
|
@ -359,8 +359,6 @@ class Context(object):
|
||||
os_name='linux-gnu',
|
||||
glibcs=[{},
|
||||
{'variant': '32', 'ccopts': '-m32'}])
|
||||
self.add_config(arch='tilepro',
|
||||
os_name='linux-gnu')
|
||||
self.add_config(arch='x86_64',
|
||||
os_name='linux-gnu',
|
||||
gcc_cfg=['--with-multilib-list=m64,m32,mx32'],
|
||||
|
@ -37,7 +37,6 @@ ENTRY (__tls_get_addr)
|
||||
ADDI_PTR r27, tp, DTV_OFFSET
|
||||
}
|
||||
.Llnk:
|
||||
#ifdef __tilegx__
|
||||
{
|
||||
LD_PTR r27, r27 /* r27 = THREAD_DTV() */
|
||||
moveli r26, hw1_last(_rtld_local + TLS_GENERATION_OFFSET - .Llnk)
|
||||
@ -47,16 +46,6 @@ ENTRY (__tls_get_addr)
|
||||
ADD_PTR r25, r25, r26
|
||||
LD_PTR r26, r0 /* r26 = ti_module */
|
||||
}
|
||||
#else
|
||||
{
|
||||
LD_PTR r27, r27 /* r27 = THREAD_DTV() */
|
||||
addli r25, r25, lo16(_rtld_local + TLS_GENERATION_OFFSET - .Llnk)
|
||||
}
|
||||
{
|
||||
auli r25, r25, ha16(_rtld_local + TLS_GENERATION_OFFSET - .Llnk)
|
||||
LD_PTR r26, r0 /* r26 = ti_module */
|
||||
}
|
||||
#endif
|
||||
LD_PTR r25, r25 /* r25 = DL(dl_tls_generation) */
|
||||
{
|
||||
LD_PTR r28, r27 /* r28 = THREAD_DTV()->counter */
|
||||
|
@ -70,7 +70,6 @@ _init:
|
||||
#if PREINIT_FUNCTION_WEAK
|
||||
lnk r2
|
||||
0:
|
||||
# ifdef __tilegx__
|
||||
moveli r1, hw2_last(_GLOBAL_OFFSET_TABLE_ - 0b)
|
||||
{
|
||||
shl16insli r1, r1, hw1(_GLOBAL_OFFSET_TABLE_ - 0b)
|
||||
@ -80,22 +79,12 @@ _init:
|
||||
shl16insli r1, r1, hw0(_GLOBAL_OFFSET_TABLE_ - 0b)
|
||||
shl16insli r0, r0, hw0_got(PREINIT_FUNCTION)
|
||||
}
|
||||
# else
|
||||
{
|
||||
moveli r1, lo16(_GLOBAL_OFFSET_TABLE_ - 0b)
|
||||
moveli r0, got_lo16(PREINIT_FUNCTION)
|
||||
}
|
||||
{
|
||||
auli r1, r1, ha16(_GLOBAL_OFFSET_TABLE_ - 0b)
|
||||
auli r0, r0, got_ha16(PREINIT_FUNCTION)
|
||||
}
|
||||
# endif
|
||||
ADD_PTR r0, r0, r1
|
||||
ADD_PTR r0, r0, r2
|
||||
LD_PTR r0, r0
|
||||
BEQZ r0, .Lno_weak_fn
|
||||
jalr r0
|
||||
#elif defined(__tilegx__) && !defined(NO_PLT_PCREL)
|
||||
#elif !defined(NO_PLT_PCREL)
|
||||
/* Since we are calling from the start of the object to the PLT,
|
||||
call by loading the full address into a register. */
|
||||
lnk r2
|
||||
|
@ -20,11 +20,7 @@
|
||||
#ifndef dl_machine_h
|
||||
#define dl_machine_h
|
||||
|
||||
#ifdef __tilegx__
|
||||
#define ELF_MACHINE_NAME "tilegx"
|
||||
#else
|
||||
#define ELF_MACHINE_NAME "tilepro"
|
||||
#endif
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <string.h>
|
||||
@ -37,18 +33,12 @@
|
||||
static inline int
|
||||
elf_machine_matches_host (const ElfW(Ehdr) *ehdr)
|
||||
{
|
||||
#if defined __tilegx__
|
||||
if (ehdr->e_machine != EM_TILEGX)
|
||||
return 0;
|
||||
# if __WORDSIZE == 32
|
||||
#if __WORDSIZE == 32
|
||||
return (ehdr->e_ident[EI_CLASS] == ELFCLASS32);
|
||||
# else
|
||||
return (ehdr->e_ident[EI_CLASS] == ELFCLASS64);
|
||||
# endif
|
||||
#elif defined __tilepro__
|
||||
return ehdr->e_machine == EM_TILEPRO;
|
||||
#else
|
||||
# error "Unknown tile architecture."
|
||||
return (ehdr->e_ident[EI_CLASS] == ELFCLASS64);
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -62,19 +52,12 @@ elf_machine_dynamic (void)
|
||||
{
|
||||
ElfW(Addr) *got;
|
||||
|
||||
#ifdef __tilegx__
|
||||
ElfW(Addr) tmp;
|
||||
asm( " { lnk %0; moveli %1, hw2_last(_GLOBAL_OFFSET_TABLE_ - 1f) }\n"
|
||||
"1: shl16insli %1, %1, hw1(_GLOBAL_OFFSET_TABLE_ - 1b)\n"
|
||||
" shl16insli %1, %1, hw0(_GLOBAL_OFFSET_TABLE_ - 1b)\n"
|
||||
" add %0, %0, %1"
|
||||
: "=r" (got), "=r" (tmp));
|
||||
#else
|
||||
asm( " lnk %0\n"
|
||||
"1: addli %0, %0, lo16(_GLOBAL_OFFSET_TABLE_ - 1b)\n"
|
||||
" auli %0, %0, ha16(_GLOBAL_OFFSET_TABLE_ - 1b)"
|
||||
: "=r" (got));
|
||||
#endif
|
||||
|
||||
return *got;
|
||||
}
|
||||
@ -86,9 +69,8 @@ elf_machine_load_address (void)
|
||||
{
|
||||
ElfW(Addr) *got;
|
||||
ElfW(Addr) dynamic;
|
||||
|
||||
#ifdef __tilegx__
|
||||
ElfW(Addr) tmp;
|
||||
|
||||
asm( " lnk %2\n"
|
||||
"1: {\n"
|
||||
" moveli %0, hw2_last(_GLOBAL_OFFSET_TABLE_ - 1b)\n"
|
||||
@ -107,18 +89,6 @@ elf_machine_load_address (void)
|
||||
" add %1, %1, %2\n"
|
||||
" }"
|
||||
: "=r" (got), "=r" (dynamic), "=r" (tmp));
|
||||
#else
|
||||
asm( " lnk %0\n"
|
||||
"1: {\n"
|
||||
" addli %0, %0, lo16(_GLOBAL_OFFSET_TABLE_ - 1b)\n"
|
||||
" addli %1, %0, lo16(_DYNAMIC - 1b)\n"
|
||||
" }\n"
|
||||
" {\n"
|
||||
" auli %0, %0, ha16(_GLOBAL_OFFSET_TABLE_ - 1b)\n"
|
||||
" auli %1, %1, ha16(_DYNAMIC - 1b)\n"
|
||||
" }\n"
|
||||
: "=r" (got), "=r" (dynamic));
|
||||
#endif
|
||||
|
||||
return dynamic - *got;
|
||||
}
|
||||
@ -197,15 +167,10 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
|
||||
#endif
|
||||
|
||||
/* Wrap a generic Tilera relocation type. */
|
||||
#ifdef __tilegx__
|
||||
#define R_TILE(x) R_TILEGX_##x
|
||||
#define __R_TILE_TLS(x,c) R_TILEGX_TLS_##x##c
|
||||
#define _R_TILE_TLS(x,c) __R_TILE_TLS(x,c)
|
||||
#define R_TILE_TLS(x) _R_TILE_TLS(x,__ELF_NATIVE_CLASS)
|
||||
#else
|
||||
#define R_TILE(x) R_TILEPRO_##x
|
||||
#define R_TILE_TLS(x) R_TILEPRO_TLS_##x##32
|
||||
#endif
|
||||
|
||||
/* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry or
|
||||
TLS variable, so undefined references should not be allowed to
|
||||
@ -272,13 +237,8 @@ struct reloc_howto
|
||||
/* Right shift operand by this number of bits. */
|
||||
unsigned char right_shift;
|
||||
|
||||
#ifdef __tilegx__
|
||||
/* If nonzero, this is updating a code bundle. */
|
||||
unsigned char is_bundle_update;
|
||||
#else
|
||||
/* If nonzero, add 0x8000 to the value. */
|
||||
unsigned char add_0x8000;
|
||||
#endif
|
||||
|
||||
/* If nonzero, subtract the containing address from the address. */
|
||||
unsigned char is_pcrel;
|
||||
@ -291,19 +251,17 @@ struct reloc_howto
|
||||
because then the table would not be position-independent. */
|
||||
static const struct reloc_howto howto[] =
|
||||
{
|
||||
#ifdef __tilegx__
|
||||
|
||||
# if __WORDSIZE == 32
|
||||
#if __WORDSIZE == 32
|
||||
/* The GX -m32 loader only handles 32-bit types, so it will be confused
|
||||
by shifts larger than that. We convert them to just sign-extend;
|
||||
they usually indicate a program bug or missed optimization, but we
|
||||
have to handle them correctly anyway. */
|
||||
# define S32 31
|
||||
# define S48 31
|
||||
# else
|
||||
# define S32 32
|
||||
# define S48 48
|
||||
# endif
|
||||
# define S32 31
|
||||
# define S48 31
|
||||
#else
|
||||
# define S32 32
|
||||
# define S48 48
|
||||
#endif
|
||||
|
||||
/* R_TILEGX_NONE */ { 0, 0, 0, 0 },
|
||||
/* R_TILEGX_64 */ { 0, 0, 0, 8 },
|
||||
@ -417,93 +375,6 @@ static const struct reloc_howto howto[] =
|
||||
/* R_TILEGX_TLS_DTPMOD32 */ { 0, 0, 0, 0 },
|
||||
/* R_TILEGX_TLS_DTPOFF32 */ { 0, 0, 0, 0 },
|
||||
/* R_TILEGX_TLS_TPOFF32 */ { 0, 0, 0, 0 }
|
||||
#else
|
||||
/* R_TILEPRO_NONE */ { 0, 0, 0, 0 },
|
||||
/* R_TILEPRO_32 */ { 0, 0, 0, 4 },
|
||||
/* R_TILEPRO_16 */ { 0, 0, 0, 2 },
|
||||
/* R_TILEPRO_8 */ { 0, 0, 0, 1 },
|
||||
/* R_TILEPRO_32_PCREL */ { 0, 0, 1, 4 },
|
||||
/* R_TILEPRO_16_PCREL */ { 0, 0, 1, 2 },
|
||||
/* R_TILEPRO_8_PCREL */ { 0, 0, 1, 1 },
|
||||
/* R_TILEPRO_LO16 */ { 0, 0, 0, 2 },
|
||||
/* R_TILEPRO_HI16 */ { 16, 0, 0, 2 },
|
||||
/* R_TILEPRO_HA16 */ { 16, 1, 0, 2 },
|
||||
/* R_TILEPRO_COPY */ { 0, 0, 0, 0 },
|
||||
/* R_TILEPRO_GLOB_DAT */ { 0, 0, 0, 4 },
|
||||
/* R_TILEPRO_JMP_SLOT */ { 0, 0, 0, 0 },
|
||||
/* R_TILEPRO_RELATIVE */ { 0, 0, 0, 0 },
|
||||
/* R_TILEPRO_BROFF_X1 */ { 3, 0, 1, 8 },
|
||||
/* R_TILEPRO_JOFFLONG_X1 */ { 3, 0, 1, 8 },
|
||||
/* R_TILEPRO_JOFFLONG_X1_PLT */ { 3, 0, 1, 8 },
|
||||
/* R_TILEPRO_IMM8_X0 */ { 0, 0, 0, 8 },
|
||||
/* R_TILEPRO_IMM8_Y0 */ { 0, 0, 0, 8 },
|
||||
/* R_TILEPRO_IMM8_X1 */ { 0, 0, 0, 8 },
|
||||
/* R_TILEPRO_IMM8_Y1 */ { 0, 0, 0, 8 },
|
||||
/* R_TILEPRO_MT_IMM15_X1 */ { 0, 0, 0, 8 },
|
||||
/* R_TILEPRO_MF_IMM15_X1 */ { 0, 0, 0, 8 },
|
||||
/* R_TILEPRO_IMM16_X0 */ { 0, 0, 0, 8 },
|
||||
/* R_TILEPRO_IMM16_X1 */ { 0, 0, 0, 8 },
|
||||
/* R_TILEPRO_IMM16_X0_LO */ { 0, 0, 0, 8 },
|
||||
/* R_TILEPRO_IMM16_X1_LO */ { 0, 0, 0, 8 },
|
||||
/* R_TILEPRO_IMM16_X0_HI */ { 16, 0, 0, 8 },
|
||||
/* R_TILEPRO_IMM16_X1_HI */ { 16, 0, 0, 8 },
|
||||
/* R_TILEPRO_IMM16_X0_HA */ { 16, 1, 0, 8 },
|
||||
/* R_TILEPRO_IMM16_X1_HA */ { 16, 1, 0, 8 },
|
||||
/* R_TILEPRO_IMM16_X0_PCREL */ { 0, 0, 1, 8 },
|
||||
/* R_TILEPRO_IMM16_X1_PCREL */ { 0, 0, 1, 8 },
|
||||
/* R_TILEPRO_IMM16_X0_LO_PCREL */ { 0, 0, 1, 8 },
|
||||
/* R_TILEPRO_IMM16_X1_LO_PCREL */ { 0, 0, 1, 8 },
|
||||
/* R_TILEPRO_IMM16_X0_HI_PCREL */ { 16, 0, 1, 8 },
|
||||
/* R_TILEPRO_IMM16_X1_HI_PCREL */ { 16, 0, 1, 8 },
|
||||
/* R_TILEPRO_IMM16_X0_HA_PCREL */ { 16, 1, 1, 8 },
|
||||
/* R_TILEPRO_IMM16_X1_HA_PCREL */ { 16, 1, 1, 8 },
|
||||
/* R_TILEPRO_IMM16_X0_GOT */ { 0, 0, 0, 0 },
|
||||
/* R_TILEPRO_IMM16_X1_GOT */ { 0, 0, 0, 0 },
|
||||
/* R_TILEPRO_IMM16_X0_GOT_LO */ { 0, 0, 0, 0 },
|
||||
/* R_TILEPRO_IMM16_X1_GOT_LO */ { 0, 0, 0, 0 },
|
||||
/* R_TILEPRO_IMM16_X0_GOT_HI */ { 0, 0, 0, 0 },
|
||||
/* R_TILEPRO_IMM16_X1_GOT_HI */ { 0, 0, 0, 0 },
|
||||
/* R_TILEPRO_IMM16_X0_GOT_HA */ { 0, 0, 0, 0 },
|
||||
/* R_TILEPRO_IMM16_X1_GOT_HA */ { 0, 0, 0, 0 },
|
||||
/* R_TILEPRO_MMSTART_X0 */ { 0, 0, 0, 8 },
|
||||
/* R_TILEPRO_MMEND_X0 */ { 0, 0, 0, 8 },
|
||||
/* R_TILEPRO_MMSTART_X1 */ { 0, 0, 0, 8 },
|
||||
/* R_TILEPRO_MMEND_X1 */ { 0, 0, 0, 8 },
|
||||
/* R_TILEPRO_SHAMT_X0 */ { 0, 0, 0, 8 },
|
||||
/* R_TILEPRO_SHAMT_X1 */ { 0, 0, 0, 8 },
|
||||
/* R_TILEPRO_SHAMT_Y0 */ { 0, 0, 0, 8 },
|
||||
/* R_TILEPRO_SHAMT_Y1 */ { 0, 0, 0, 8 },
|
||||
/* R_TILEPRO_SN_BROFF */ { 0, 0, 0, 0 },
|
||||
/* R_TILEPRO_SN_IMM8 */ { 0, 0, 0, 0 },
|
||||
/* R_TILEPRO_SN_UIMM8 */ { 0, 0, 0, 0 },
|
||||
/* R_TILEPRO_SN_BYTE0 */ { 0, 0, 0, 0 },
|
||||
/* R_TILEPRO_SN_BYTE1 */ { 0, 0, 0, 0 },
|
||||
/* R_TILEPRO_SN_BYTE2 */ { 0, 0, 0, 0 },
|
||||
/* R_TILEPRO_SN_BYTE3 */ { 0, 0, 0, 0 },
|
||||
/* R_TILEPRO_SN_SPCREL0 */ { 0, 0, 0, 0 },
|
||||
/* R_TILEPRO_SN_SPCREL1 */ { 0, 0, 0, 0 },
|
||||
/* R_TILEPRO_SN_SPCREL2 */ { 0, 0, 0, 0 },
|
||||
/* R_TILEPRO_SN_SPCREL3 */ { 0, 0, 0, 0 },
|
||||
/* R_TILEPRO_IMM16_X0_TLS_GD */ { 0, 0, 0, 8 },
|
||||
/* R_TILEPRO_IMM16_X1_TLS_GD */ { 0, 0, 0, 8 },
|
||||
/* R_TILEPRO_IMM16_X0_TLS_GD_LO */ { 0, 0, 0, 8 },
|
||||
/* R_TILEPRO_IMM16_X1_TLS_GD_LO */ { 0, 0, 0, 8 },
|
||||
/* R_TILEPRO_IMM16_X0_TLS_GD_HI */ { 16, 0, 0, 8 },
|
||||
/* R_TILEPRO_IMM16_X1_TLS_GD_HI */ { 16, 0, 0, 8 },
|
||||
/* R_TILEPRO_IMM16_X0_TLS_GD_HA */ { 16, 1, 0, 8 },
|
||||
/* R_TILEPRO_IMM16_X1_TLS_GD_HA */ { 16, 1, 0, 8 },
|
||||
/* R_TILEPRO_IMM16_X0_TLS_IE */ { 0, 0, 0, 8 },
|
||||
/* R_TILEPRO_IMM16_X1_TLS_IE */ { 0, 0, 0, 8 },
|
||||
/* R_TILEPRO_IMM16_X0_TLS_IE_LO */ { 0, 0, 0, 8 },
|
||||
/* R_TILEPRO_IMM16_X1_TLS_IE_LO */ { 0, 0, 0, 8 },
|
||||
/* R_TILEPRO_IMM16_X0_TLS_IE_HI */ { 16, 0, 0, 8 },
|
||||
/* R_TILEPRO_IMM16_X1_TLS_IE_HI */ { 16, 0, 0, 8 },
|
||||
/* R_TILEPRO_IMM16_X0_TLS_IE_HA */ { 16, 1, 0, 8 },
|
||||
/* R_TILEPRO_IMM16_X1_TLS_IE_HA */ { 16, 1, 0, 8 },
|
||||
/* R_TILEPRO_TLS_DTPMOD32 */ { 0, 0, 0, 0 },
|
||||
/* R_TILEPRO_TLS_DTPOFF32 */ { 0, 0, 0, 0 },
|
||||
/* R_TILEPRO_TLS_TPOFF32 */ { 0, 0, 0, 0 },
|
||||
#endif
|
||||
};
|
||||
|
||||
#if __ELF_NATIVE_CLASS == 32
|
||||
@ -653,11 +524,6 @@ elf_machine_rela (struct link_map *map, const ElfW(Rela) *reloc,
|
||||
if (h->is_pcrel)
|
||||
value -= (ElfW(Addr)) reloc_addr;
|
||||
|
||||
#ifndef __tilegx__
|
||||
if (h->add_0x8000)
|
||||
value += 0x8000;
|
||||
#endif
|
||||
|
||||
value = ((long) value) >> h->right_shift;
|
||||
|
||||
switch (h->byte_size)
|
||||
@ -671,14 +537,12 @@ elf_machine_rela (struct link_map *map, const ElfW(Rela) *reloc,
|
||||
case 4:
|
||||
*(int *) reloc_addr = value;
|
||||
return;
|
||||
#ifdef __tilegx__
|
||||
case 8:
|
||||
if (!h->is_bundle_update)
|
||||
{
|
||||
*(ElfW(Addr) *) reloc_addr = value;
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/* We are updating a bundle, so use the function pointer that
|
||||
@ -704,7 +568,6 @@ elf_machine_rela (struct link_map *map, const ElfW(Rela) *reloc,
|
||||
|
||||
switch (r_type)
|
||||
{
|
||||
#ifdef __tilegx__
|
||||
case R_TILEGX_BROFF_X1:
|
||||
MUNGE_SIGNED (BrOff_X1, 17);
|
||||
break;
|
||||
@ -796,97 +659,6 @@ elf_machine_rela (struct link_map *map, const ElfW(Rela) *reloc,
|
||||
case R_TILEGX_SHAMT_Y1:
|
||||
MUNGE (ShAmt_Y1);
|
||||
break;
|
||||
#else
|
||||
case R_TILEPRO_BROFF_X1:
|
||||
MUNGE_SIGNED (BrOff_X1, 17);
|
||||
break;
|
||||
case R_TILEPRO_JOFFLONG_X1:
|
||||
case R_TILEPRO_JOFFLONG_X1_PLT:
|
||||
MUNGE_NOCHECK (JOffLong_X1); /* holds full 32-bit value */
|
||||
break;
|
||||
case R_TILEPRO_IMM8_X0:
|
||||
MUNGE_SIGNED (Imm8_X0, 8);
|
||||
break;
|
||||
case R_TILEPRO_IMM8_Y0:
|
||||
MUNGE_SIGNED (Imm8_Y0, 8);
|
||||
break;
|
||||
case R_TILEPRO_IMM8_X1:
|
||||
MUNGE_SIGNED (Imm8_X1, 8);
|
||||
break;
|
||||
case R_TILEPRO_IMM8_Y1:
|
||||
MUNGE_SIGNED (Imm8_Y1, 8);
|
||||
break;
|
||||
case R_TILEPRO_MT_IMM15_X1:
|
||||
MUNGE (MT_Imm15_X1);
|
||||
break;
|
||||
case R_TILEPRO_MF_IMM15_X1:
|
||||
MUNGE (MF_Imm15_X1);
|
||||
break;
|
||||
case R_TILEPRO_IMM16_X0_LO:
|
||||
case R_TILEPRO_IMM16_X0_HI:
|
||||
case R_TILEPRO_IMM16_X0_HA:
|
||||
case R_TILEPRO_IMM16_X0_LO_PCREL:
|
||||
case R_TILEPRO_IMM16_X0_HI_PCREL:
|
||||
case R_TILEPRO_IMM16_X0_HA_PCREL:
|
||||
case R_TILEPRO_IMM16_X0_TLS_GD_LO:
|
||||
case R_TILEPRO_IMM16_X0_TLS_GD_HI:
|
||||
case R_TILEPRO_IMM16_X0_TLS_GD_HA:
|
||||
case R_TILEPRO_IMM16_X0_TLS_IE_LO:
|
||||
case R_TILEPRO_IMM16_X0_TLS_IE_HI:
|
||||
case R_TILEPRO_IMM16_X0_TLS_IE_HA:
|
||||
MUNGE_NOCHECK (Imm16_X0);
|
||||
break;
|
||||
case R_TILEPRO_IMM16_X0:
|
||||
case R_TILEPRO_IMM16_X0_PCREL:
|
||||
case R_TILEPRO_IMM16_X0_TLS_GD:
|
||||
case R_TILEPRO_IMM16_X0_TLS_IE:
|
||||
MUNGE_SIGNED (Imm16_X0, 16);
|
||||
break;
|
||||
case R_TILEPRO_IMM16_X1_LO:
|
||||
case R_TILEPRO_IMM16_X1_HI:
|
||||
case R_TILEPRO_IMM16_X1_HA:
|
||||
case R_TILEPRO_IMM16_X1_LO_PCREL:
|
||||
case R_TILEPRO_IMM16_X1_HI_PCREL:
|
||||
case R_TILEPRO_IMM16_X1_HA_PCREL:
|
||||
case R_TILEPRO_IMM16_X1_TLS_GD_LO:
|
||||
case R_TILEPRO_IMM16_X1_TLS_GD_HI:
|
||||
case R_TILEPRO_IMM16_X1_TLS_GD_HA:
|
||||
case R_TILEPRO_IMM16_X1_TLS_IE_LO:
|
||||
case R_TILEPRO_IMM16_X1_TLS_IE_HI:
|
||||
case R_TILEPRO_IMM16_X1_TLS_IE_HA:
|
||||
MUNGE_NOCHECK (Imm16_X1);
|
||||
break;
|
||||
case R_TILEPRO_IMM16_X1:
|
||||
case R_TILEPRO_IMM16_X1_PCREL:
|
||||
case R_TILEPRO_IMM16_X1_TLS_GD:
|
||||
case R_TILEPRO_IMM16_X1_TLS_IE:
|
||||
MUNGE_SIGNED (Imm16_X1, 16);
|
||||
break;
|
||||
case R_TILEPRO_MMSTART_X0:
|
||||
MUNGE (MMStart_X0);
|
||||
break;
|
||||
case R_TILEPRO_MMEND_X0:
|
||||
MUNGE (MMEnd_X0);
|
||||
break;
|
||||
case R_TILEPRO_MMSTART_X1:
|
||||
MUNGE (MMStart_X1);
|
||||
break;
|
||||
case R_TILEPRO_MMEND_X1:
|
||||
MUNGE (MMEnd_X1);
|
||||
break;
|
||||
case R_TILEPRO_SHAMT_X0:
|
||||
MUNGE (ShAmt_X0);
|
||||
break;
|
||||
case R_TILEPRO_SHAMT_X1:
|
||||
MUNGE (ShAmt_X1);
|
||||
break;
|
||||
case R_TILEPRO_SHAMT_Y0:
|
||||
MUNGE (ShAmt_Y0);
|
||||
break;
|
||||
case R_TILEPRO_SHAMT_Y1:
|
||||
MUNGE (ShAmt_Y1);
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
#undef MUNGE
|
||||
*p = bits;
|
||||
|
@ -20,14 +20,9 @@
|
||||
|
||||
/* Get address of "sym" in "reg" assuming r51 holds ".Llink". */
|
||||
.macro pic_addr reg, sym
|
||||
#ifdef __tilegx__
|
||||
moveli \reg, hw1_last(\sym - .Llink)
|
||||
shl16insli \reg, \reg, hw0(\sym - .Llink)
|
||||
ADD_PTR \reg, r51, \reg
|
||||
#else
|
||||
ADDLI_PTR \reg, r51, lo16(\sym - .Llink)
|
||||
auli \reg, \reg, ha16(\sym - .Llink)
|
||||
#endif
|
||||
.endm
|
||||
|
||||
.text
|
||||
|
@ -59,13 +59,8 @@ typedef unsigned char byte;
|
||||
/* Provide the appropriate builtins to shift two registers based on
|
||||
the alignment of a pointer held in a third register, and to reverse
|
||||
the bytes in a word. */
|
||||
#ifdef __tilegx__
|
||||
#define DBLALIGN __insn_dblalign
|
||||
#define REVBYTES __insn_revbytes
|
||||
#else
|
||||
#define DBLALIGN __insn_dword_align
|
||||
#define REVBYTES __insn_bytex
|
||||
#endif
|
||||
|
||||
#ifdef WORDS_BIGENDIAN
|
||||
# define CMP_LT_OR_GT(a, b) ((a) > (b) ? 1 : -1)
|
||||
|
@ -20,14 +20,12 @@
|
||||
#include <bits/wordsize.h>
|
||||
|
||||
/* The tilegx implementation of memcpy is safe to use for memmove. */
|
||||
#ifdef __tilegx__
|
||||
# undef MEMCPY_OK_FOR_FWD_MEMMOVE
|
||||
# define MEMCPY_OK_FOR_FWD_MEMMOVE 1
|
||||
#endif
|
||||
#undef MEMCPY_OK_FOR_FWD_MEMMOVE
|
||||
#define MEMCPY_OK_FOR_FWD_MEMMOVE 1
|
||||
|
||||
/* Support more efficient copying on tilegx32, which supports
|
||||
long long as a native 64-bit type. */
|
||||
#if defined (__tilegx__) && __WORDSIZE == 32
|
||||
#if __WORDSIZE == 32
|
||||
# undef op_t
|
||||
# define op_t unsigned long long int
|
||||
#endif
|
||||
|
@ -26,16 +26,10 @@
|
||||
/* Initial cycle delay for exponential backoff */
|
||||
#define BACKOFF_START 32
|
||||
|
||||
#ifdef __tilegx__
|
||||
/* Use cmpexch() after the initial fast-path exch to avoid
|
||||
invalidating the cache line of the lock holder. */
|
||||
# define TNS(p) atomic_exchange_acq((p), 1)
|
||||
# define CMPTNS(p) atomic_compare_and_exchange_val_acq((p), 1, 0)
|
||||
#else
|
||||
# define TNS(p) __insn_tns(p)
|
||||
# define CMPTNS(p) __insn_tns(p)
|
||||
# define SPR_CYCLE SPR_CYCLE_LOW /* The low 32 bits are sufficient. */
|
||||
#endif
|
||||
#define TNS(p) atomic_exchange_acq((p), 1)
|
||||
#define CMPTNS(p) atomic_compare_and_exchange_val_acq((p), 1, 0)
|
||||
|
||||
int
|
||||
pthread_spin_lock (pthread_spinlock_t *lock)
|
||||
|
@ -19,11 +19,7 @@
|
||||
#include "pthreadP.h"
|
||||
#include <errno.h>
|
||||
|
||||
#ifdef __tilegx__
|
||||
#define TNS(p) __insn_exch4((p), 1)
|
||||
#else
|
||||
#define TNS(p) __insn_tns(p)
|
||||
#endif
|
||||
|
||||
int
|
||||
pthread_spin_trylock (pthread_spinlock_t *lock)
|
||||
|
@ -22,12 +22,7 @@
|
||||
int
|
||||
pthread_spin_unlock (pthread_spinlock_t *lock)
|
||||
{
|
||||
#ifdef __tilegx__
|
||||
/* Use exchange() to bypass the write buffer. */
|
||||
atomic_exchange_rel (lock, 0);
|
||||
#else
|
||||
atomic_full_barrier ();
|
||||
*lock = 0;
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
@ -113,13 +113,8 @@ register void *__thread_pointer asm ("tp");
|
||||
- TLS_TCB_OFFSET - TLS_PRE_TCB_SIZE))
|
||||
|
||||
/* Magic for libthread_db to know how to do THREAD_SELF. */
|
||||
#ifdef __tilegx__
|
||||
# define DB_THREAD_SELF \
|
||||
REGISTER (64, 64, REG_TP * 8, - TLS_TCB_OFFSET - TLS_PRE_TCB_SIZE)
|
||||
#else
|
||||
# define DB_THREAD_SELF \
|
||||
REGISTER (32, 32, REG_TP * 4, - TLS_TCB_OFFSET - TLS_PRE_TCB_SIZE)
|
||||
#endif
|
||||
REGISTER (64, 64, REG_TP * 8, - TLS_TCB_OFFSET - TLS_PRE_TCB_SIZE)
|
||||
|
||||
/* Read member of the thread descriptor directly. */
|
||||
# define THREAD_GETMEM(descr, member) (descr->member)
|
||||
|
@ -1,7 +1,5 @@
|
||||
# This is a -*- sh -*-
|
||||
case "$machine" in
|
||||
tilepro)
|
||||
base_machine=tile machine=tile/tilepro ;;
|
||||
tilegx*)
|
||||
base_machine=tile
|
||||
if $CC $CFLAGS $CPPFLAGS -E -dM -xc /dev/null | grep -q __LP64__; then
|
||||
|
@ -1,20 +1,13 @@
|
||||
#include <bits/wordsize.h>
|
||||
|
||||
#ifdef __tilegx__
|
||||
# if __WORDSIZE == 64
|
||||
# define STACK_CHK_GUARD \
|
||||
#if __WORDSIZE == 64
|
||||
# define STACK_CHK_GUARD \
|
||||
({ uintptr_t x; asm ("addi %0, tp, -16; ld %0, %0" : "=r" (x)); x; })
|
||||
# define POINTER_CHK_GUARD \
|
||||
# define POINTER_CHK_GUARD \
|
||||
({ uintptr_t x; asm ("addi %0, tp, -24; ld %0, %0" : "=r" (x)); x; })
|
||||
# else
|
||||
# define STACK_CHK_GUARD \
|
||||
({ uintptr_t x; asm ("addi %0, tp, -8; ld4s %0, %0" : "=r" (x)); x; })
|
||||
# define POINTER_CHK_GUARD \
|
||||
({ uintptr_t x; asm ("addi %0, tp, -12; ld4s %0, %0" : "=r" (x)); x; })
|
||||
# endif
|
||||
#else
|
||||
# define STACK_CHK_GUARD \
|
||||
({ uintptr_t x; asm ("addi %0, tp, -8; lw %0, %0" : "=r" (x)); x; })
|
||||
({ uintptr_t x; asm ("addi %0, tp, -8; ld4s %0, %0" : "=r" (x)); x; })
|
||||
# define POINTER_CHK_GUARD \
|
||||
({ uintptr_t x; asm ("addi %0, tp, -12; lw %0, %0" : "=r" (x)); x; })
|
||||
({ uintptr_t x; asm ("addi %0, tp, -12; ld4s %0, %0" : "=r" (x)); x; })
|
||||
#endif
|
||||
|
@ -35,7 +35,7 @@
|
||||
(unnecessary) parameters. */
|
||||
#define stackinfo_get_sp() \
|
||||
({ void *p__; asm volatile ("move %0, sp" : "=r" (p__)); p__; })
|
||||
#if defined __tilegx__ && __WORDSIZE == 32
|
||||
#if __WORDSIZE == 32
|
||||
#define __stackinfo_sub "subx"
|
||||
#else
|
||||
#define __stackinfo_sub "sub"
|
||||
|
@ -129,7 +129,6 @@ _start:
|
||||
|
||||
/* Pass address of main() in r0, and of our own entry
|
||||
points to .fini and .init in r3 and r4. */
|
||||
#ifdef __tilegx__
|
||||
moveli r0, hw2_last(main - .Lmy_pc)
|
||||
}
|
||||
{
|
||||
@ -162,30 +161,12 @@ _start:
|
||||
}
|
||||
{
|
||||
ADD_PTR r4, r4, r13
|
||||
# ifdef NO_PLT_PCREL
|
||||
#ifdef NO_PLT_PCREL
|
||||
j plt(__libc_start_main)
|
||||
# else
|
||||
jr r12
|
||||
# endif
|
||||
}
|
||||
#else
|
||||
addli r0, r13, lo16(main - .Lmy_pc)
|
||||
}
|
||||
{
|
||||
auli r0, r0, ha16(main - .Lmy_pc)
|
||||
addli r3, r13, lo16(__libc_csu_init - .Lmy_pc)
|
||||
}
|
||||
{
|
||||
auli r3, r3, ha16(__libc_csu_init - .Lmy_pc)
|
||||
addli r4, r13, lo16(__libc_csu_fini - .Lmy_pc)
|
||||
}
|
||||
{
|
||||
auli r4, r4, ha16(__libc_csu_fini - .Lmy_pc)
|
||||
/* Call the user's main function, and exit with its value.
|
||||
But let the libc call main. */
|
||||
j plt(__libc_start_main)
|
||||
}
|
||||
jr r12
|
||||
#endif
|
||||
}
|
||||
|
||||
{
|
||||
/* Tell backtracer to give up (_start has no caller). */
|
||||
|
@ -60,34 +60,11 @@
|
||||
#define L(name) .L##name
|
||||
|
||||
/* Specify the size in bytes of a machine register. */
|
||||
#ifdef __tilegx__
|
||||
#define REGSIZE 8
|
||||
#else
|
||||
#define REGSIZE 4
|
||||
#endif
|
||||
|
||||
/* Support a limited form of shared assembly between tilepro and tilegx.
|
||||
The presumption is that LD/ST are used for manipulating registers.
|
||||
Since opcode parsing is case-insensitive, we don't need to provide
|
||||
definitions for these on tilegx. */
|
||||
#ifndef __tilegx__
|
||||
#define LD lw
|
||||
#define LD4U lw
|
||||
#define ST sw
|
||||
#define ST4 sw
|
||||
#define BNEZ bnz
|
||||
#define BEQZ bz
|
||||
#define BEQZT bzt
|
||||
#define BGTZ bgz
|
||||
#define CMPEQI seqi
|
||||
#define CMPEQ seq
|
||||
#define CMOVEQZ mvz
|
||||
#define CMOVNEZ mvnz
|
||||
#endif
|
||||
|
||||
/* Provide "pointer-oriented" instruction variants. These differ not
|
||||
just for tilepro vs tilegx, but also for tilegx -m64 vs -m32. */
|
||||
#if defined __tilegx__ && __WORDSIZE == 32
|
||||
#if __WORDSIZE == 32
|
||||
#define ADD_PTR addx
|
||||
#define ADDI_PTR addxi
|
||||
#define ADDLI_PTR addxli
|
||||
@ -100,11 +77,7 @@
|
||||
#define ADDLI_PTR addli
|
||||
#define LD_PTR LD
|
||||
#define ST_PTR ST
|
||||
#ifdef __tilegx__
|
||||
#define SHL_PTR_ADD shl3add
|
||||
#else
|
||||
#define SHL_PTR_ADD s2a
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif /* __ASSEMBLER__ */
|
||||
|
@ -1,2 +0,0 @@
|
||||
tile
|
||||
wordsize-32
|
@ -1,99 +0,0 @@
|
||||
/* Copyright (C) 2011-2017 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Chris Metcalf <cmetcalf@tilera.com>, 2011.
|
||||
|
||||
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
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#ifndef _ATOMIC_MACHINE_H
|
||||
#define _ATOMIC_MACHINE_H 1
|
||||
|
||||
#include <asm/unistd.h>
|
||||
|
||||
#define __HAVE_64B_ATOMICS 0
|
||||
#define USE_ATOMIC_COMPILER_BUILTINS 0
|
||||
#define ATOMIC_EXCHANGE_USES_CAS 0
|
||||
|
||||
/* 32-bit integer compare-and-exchange. */
|
||||
static __inline __attribute__ ((always_inline))
|
||||
int __atomic_cmpxchg_32 (volatile int *mem, int newval, int oldval)
|
||||
{
|
||||
int result;
|
||||
__asm__ __volatile__ ("swint1"
|
||||
: "=R00" (result), "=m" (*mem)
|
||||
: "R10" (__NR_FAST_cmpxchg), "R00" (mem),
|
||||
"R01" (oldval), "R02" (newval), "m" (*mem)
|
||||
: "r20", "r21", "r22", "r23", "r24",
|
||||
"r25", "r26", "r27", "r28", "r29", "memory");
|
||||
return result;
|
||||
}
|
||||
|
||||
#define atomic_compare_and_exchange_val_acq(mem, n, o) \
|
||||
({ \
|
||||
if (sizeof (*(mem)) != 4) \
|
||||
__atomic_error_bad_argument_size (); \
|
||||
(__typeof (*(mem))) \
|
||||
__atomic_cmpxchg_32 ((int *) (mem), (int) (n), (int) (o)); \
|
||||
})
|
||||
|
||||
/* Atomically compute:
|
||||
int old = *ptr;
|
||||
*ptr = (old & mask) + addend;
|
||||
return old; */
|
||||
|
||||
static __inline __attribute__ ((always_inline))
|
||||
int __atomic_update_32 (volatile int *mem, int mask, int addend)
|
||||
{
|
||||
int result;
|
||||
__asm__ __volatile__ ("swint1"
|
||||
: "=R00" (result), "=m" (*mem)
|
||||
: "R10" (__NR_FAST_atomic_update), "R00" (mem),
|
||||
"R01" (mask), "R02" (addend), "m" (*mem)
|
||||
: "r20", "r21", "r22", "r23", "r24",
|
||||
"r25", "r26", "r27", "r28", "r29", "memory");
|
||||
return result;
|
||||
}
|
||||
|
||||
/* Size-checked verson of __atomic_update_32. */
|
||||
#define __atomic_update(mem, mask, addend) \
|
||||
({ \
|
||||
if (sizeof (*(mem)) != 4) \
|
||||
__atomic_error_bad_argument_size (); \
|
||||
(__typeof (*(mem))) \
|
||||
__atomic_update_32 ((int *) (mem), (int) (mask), (int) (addend)); \
|
||||
})
|
||||
|
||||
#define atomic_exchange_acq(mem, newvalue) \
|
||||
__atomic_update ((mem), 0, (newvalue))
|
||||
#define atomic_exchange_and_add(mem, value) \
|
||||
__atomic_update ((mem), -1, (value))
|
||||
#define atomic_and_val(mem, mask) \
|
||||
__atomic_update ((mem), (mask), 0)
|
||||
#define atomic_or_val(mem, mask) \
|
||||
({ __typeof (mask) __att1_v = (mask); \
|
||||
__atomic_update ((mem), ~__att1_v, __att1_v); })
|
||||
|
||||
/*
|
||||
* We must use the kernel atomics for atomic_store, since otherwise an
|
||||
* unsynchronized store could become visible after another core's
|
||||
* kernel-atomic implementation had read the memory word in question,
|
||||
* but before it had written the updated value to it, which would
|
||||
* cause the unsynchronized store to be lost.
|
||||
*/
|
||||
#define atomic_store_relaxed(mem, val) atomic_exchange_acq (mem, val)
|
||||
#define atomic_store_release(mem, val) atomic_exchange_rel (mem, val)
|
||||
|
||||
#include <sysdeps/tile/atomic-machine.h>
|
||||
|
||||
#endif /* atomic-machine.h */
|
@ -1,6 +0,0 @@
|
||||
/* Determine the wordsize from the preprocessor defines. */
|
||||
|
||||
#define __WORDSIZE 32
|
||||
#define __WORDSIZE_TIME64_COMPAT32 0
|
||||
#define __WORDSIZE32_SIZE_ULONG 0
|
||||
#define __WORDSIZE32_PTRDIFF_LONG 0
|
@ -1,76 +0,0 @@
|
||||
/* Copyright (C) 2011-2017 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Chris Metcalf <cmetcalf@tilera.com>, 2011.
|
||||
|
||||
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
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
|
||||
void *
|
||||
__memchr (const void *s, int c, size_t n)
|
||||
{
|
||||
const uint32_t *last_word_ptr;
|
||||
const uint32_t *p;
|
||||
const char *last_byte_ptr;
|
||||
uintptr_t s_int;
|
||||
uint32_t goal, before_mask, v, bits;
|
||||
char *ret;
|
||||
|
||||
if (__builtin_expect (n == 0, 0))
|
||||
{
|
||||
/* Don't dereference any memory if the array is empty. */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Get an aligned pointer. */
|
||||
s_int = (uintptr_t) s;
|
||||
p = (const uint32_t *) (s_int & -4);
|
||||
|
||||
/* Create four copies of the byte for which we are looking. */
|
||||
goal = 0x01010101 * (uint8_t) c;
|
||||
|
||||
/* Read the first word, but munge it so that bytes before the array
|
||||
will not match goal. Note that this shift count expression works
|
||||
because we know shift counts are taken mod 32. */
|
||||
before_mask = (1 << (s_int << 3)) - 1;
|
||||
v = (*p | before_mask) ^ (goal & before_mask);
|
||||
|
||||
/* Compute the address of the last byte. */
|
||||
last_byte_ptr = (const char *) s + n - 1;
|
||||
|
||||
/* Handle possible addition overflow. */
|
||||
if (__glibc_unlikely ((uintptr_t) last_byte_ptr < (uintptr_t) s))
|
||||
last_byte_ptr = (const char *) UINTPTR_MAX;
|
||||
|
||||
/* Compute the address of the word containing the last byte. */
|
||||
last_word_ptr = (const uint32_t *) ((uintptr_t) last_byte_ptr & -4);
|
||||
|
||||
while ((bits = __insn_seqb (v, goal)) == 0)
|
||||
{
|
||||
if (__builtin_expect (p == last_word_ptr, 0))
|
||||
{
|
||||
/* We already read the last word in the array, so give up. */
|
||||
return NULL;
|
||||
}
|
||||
v = *++p;
|
||||
}
|
||||
|
||||
/* We found a match, but it might be in a byte past the end of the array. */
|
||||
ret = ((char *) p) + (__insn_ctz (bits) >> 3);
|
||||
return (ret <= last_byte_ptr) ? ret : NULL;
|
||||
}
|
||||
weak_alias (__memchr, memchr)
|
||||
libc_hidden_builtin_def (memchr)
|
@ -1,397 +0,0 @@
|
||||
/* Copyright (C) 2011-2017 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Chris Metcalf <cmetcalf@tilera.com>, 2011.
|
||||
|
||||
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
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <arch/chip.h>
|
||||
#include <sysdep.h>
|
||||
|
||||
.text
|
||||
ENTRY (__memcpy)
|
||||
FEEDBACK_ENTER(__memcpy)
|
||||
|
||||
/* r0 is the dest, r1 is the source, r2 is the size. */
|
||||
|
||||
/* Save aside original dest so we can return it at the end. */
|
||||
{ sw sp, lr; move r23, r0; or r4, r0, r1 }
|
||||
cfi_offset (lr, 0)
|
||||
|
||||
/* Check for an empty size. */
|
||||
{ bz r2, .Ldone; andi r4, r4, 3 }
|
||||
|
||||
/* Check for an unaligned source or dest. */
|
||||
{ bnz r4, .Lcopy_unaligned_maybe_many; addli r4, r2, -256 }
|
||||
|
||||
.Lcheck_aligned_copy_size:
|
||||
/* If we are copying < 256 bytes, branch to simple case. */
|
||||
{ blzt r4, .Lcopy_8_check; slti_u r8, r2, 8 }
|
||||
|
||||
/* Copying >= 256 bytes, so jump to complex prefetching loop. */
|
||||
{ andi r6, r1, 63; j .Lcopy_many }
|
||||
|
||||
/* Aligned 4 byte at a time copy loop. */
|
||||
|
||||
.Lcopy_8_loop:
|
||||
/* Copy two words at a time to hide load latency. */
|
||||
{ lw r3, r1; addi r1, r1, 4; slti_u r8, r2, 16 }
|
||||
{ lw r4, r1; addi r1, r1, 4 }
|
||||
{ sw r0, r3; addi r0, r0, 4; addi r2, r2, -4 }
|
||||
{ sw r0, r4; addi r0, r0, 4; addi r2, r2, -4 }
|
||||
.Lcopy_8_check:
|
||||
{ bzt r8, .Lcopy_8_loop; slti_u r4, r2, 4 }
|
||||
|
||||
/* Copy odd leftover word, if any. */
|
||||
{ bnzt r4, .Lcheck_odd_stragglers }
|
||||
{ lw r3, r1; addi r1, r1, 4 }
|
||||
{ sw r0, r3; addi r0, r0, 4; addi r2, r2, -4 }
|
||||
|
||||
.Lcheck_odd_stragglers:
|
||||
{ bnz r2, .Lcopy_unaligned_few }
|
||||
|
||||
.Ldone:
|
||||
{ move r0, r23; jrp lr }
|
||||
|
||||
/* Prefetching multiple cache line copy handler (for large transfers). */
|
||||
|
||||
/* Copy words until r1 is cache-line-aligned. */
|
||||
.Lalign_loop:
|
||||
{ lw r3, r1; addi r1, r1, 4 }
|
||||
{ andi r6, r1, 63 }
|
||||
{ sw r0, r3; addi r0, r0, 4; addi r2, r2, -4 }
|
||||
.Lcopy_many:
|
||||
{ bnzt r6, .Lalign_loop; addi r9, r0, 63 }
|
||||
|
||||
{ addi r3, r1, 60; andi r9, r9, -64 }
|
||||
|
||||
/* No need to prefetch dst, we'll just do the wh64
|
||||
right before we copy a line. */
|
||||
{ lw r5, r3; addi r3, r3, 64; movei r4, 1 }
|
||||
/* Intentionally stall for a few cycles to leave L2 cache alone. */
|
||||
{ bnzt zero, .; move r27, lr }
|
||||
{ lw r6, r3; addi r3, r3, 64 }
|
||||
/* Intentionally stall for a few cycles to leave L2 cache alone. */
|
||||
{ bnzt zero, . }
|
||||
{ lw r7, r3; addi r3, r3, 64 }
|
||||
/* Intentionally stall for a few cycles to leave L2 cache alone. */
|
||||
{ bz zero, .Lbig_loop2 }
|
||||
|
||||
/* On entry to this loop:
|
||||
- r0 points to the start of dst line 0
|
||||
- r1 points to start of src line 0
|
||||
- r2 >= (256 - 60), only the first time the loop trips.
|
||||
- r3 contains r1 + 128 + 60 [pointer to end of source line 2]
|
||||
This is our prefetch address. When we get near the end
|
||||
rather than prefetching off the end this is changed to point
|
||||
to some "safe" recently loaded address.
|
||||
- r5 contains *(r1 + 60) [i.e. last word of source line 0]
|
||||
- r6 contains *(r1 + 64 + 60) [i.e. last word of source line 1]
|
||||
- r9 contains ((r0 + 63) & -64)
|
||||
[start of next dst cache line.] */
|
||||
|
||||
.Lbig_loop:
|
||||
{ jal .Lcopy_line2; add r15, r1, r2 }
|
||||
|
||||
.Lbig_loop2:
|
||||
/* Copy line 0, first stalling until r5 is ready. */
|
||||
{ move r12, r5; lw r16, r1 }
|
||||
{ bz r4, .Lcopy_8_check; slti_u r8, r2, 8 }
|
||||
/* Prefetch several lines ahead. */
|
||||
{ lw r5, r3; addi r3, r3, 64 }
|
||||
{ jal .Lcopy_line }
|
||||
|
||||
/* Copy line 1, first stalling until r6 is ready. */
|
||||
{ move r12, r6; lw r16, r1 }
|
||||
{ bz r4, .Lcopy_8_check; slti_u r8, r2, 8 }
|
||||
/* Prefetch several lines ahead. */
|
||||
{ lw r6, r3; addi r3, r3, 64 }
|
||||
{ jal .Lcopy_line }
|
||||
|
||||
/* Copy line 2, first stalling until r7 is ready. */
|
||||
{ move r12, r7; lw r16, r1 }
|
||||
{ bz r4, .Lcopy_8_check; slti_u r8, r2, 8 }
|
||||
/* Prefetch several lines ahead. */
|
||||
{ lw r7, r3; addi r3, r3, 64 }
|
||||
/* Use up a caches-busy cycle by jumping back to the top of the
|
||||
loop. Might as well get it out of the way now. */
|
||||
{ j .Lbig_loop }
|
||||
|
||||
|
||||
/* On entry:
|
||||
- r0 points to the destination line.
|
||||
- r1 points to the source line.
|
||||
- r3 is the next prefetch address.
|
||||
- r9 holds the last address used for wh64.
|
||||
- r12 = WORD_15
|
||||
- r16 = WORD_0.
|
||||
- r17 == r1 + 16.
|
||||
- r27 holds saved lr to restore.
|
||||
|
||||
On exit:
|
||||
- r0 is incremented by 64.
|
||||
- r1 is incremented by 64, unless that would point to a word
|
||||
beyond the end of the source array, in which case it is redirected
|
||||
to point to an arbitrary word already in the cache.
|
||||
- r2 is decremented by 64.
|
||||
- r3 is unchanged, unless it points to a word beyond the
|
||||
end of the source array, in which case it is redirected
|
||||
to point to an arbitrary word already in the cache.
|
||||
Redirecting is OK since if we are that close to the end
|
||||
of the array we will not come back to this subroutine
|
||||
and use the contents of the prefetched address.
|
||||
- r4 is nonzero iff r2 >= 64.
|
||||
- r9 is incremented by 64, unless it points beyond the
|
||||
end of the last full destination cache line, in which
|
||||
case it is redirected to a "safe address" that can be
|
||||
clobbered (sp - 64)
|
||||
- lr contains the value in r27. */
|
||||
|
||||
/* r26 unused */
|
||||
|
||||
.Lcopy_line:
|
||||
/* TODO: when r3 goes past the end, we would like to redirect it
|
||||
to prefetch the last partial cache line (if any) just once, for the
|
||||
benefit of the final cleanup loop. But we don't want to
|
||||
prefetch that line more than once, or subsequent prefetches
|
||||
will go into the RTF. But then .Lbig_loop should unconditionally
|
||||
branch to top of loop to execute final prefetch, and its
|
||||
nop should become a conditional branch. */
|
||||
|
||||
/* We need two non-memory cycles here to cover the resources
|
||||
used by the loads initiated by the caller. */
|
||||
{ add r15, r1, r2 }
|
||||
.Lcopy_line2:
|
||||
{ slt_u r13, r3, r15; addi r17, r1, 16 }
|
||||
|
||||
/* NOTE: this will stall for one cycle as L1 is busy. */
|
||||
|
||||
/* Fill second L1D line. */
|
||||
{ lw r17, r17; addi r1, r1, 48; mvz r3, r13, r1 } /* r17 = WORD_4 */
|
||||
|
||||
/* Prepare destination line for writing. */
|
||||
{ wh64 r9; addi r9, r9, 64 }
|
||||
|
||||
/* Load seven words that are L1D hits to cover wh64 L2 usage. */
|
||||
|
||||
/* Load the three remaining words from the last L1D line, which
|
||||
we know has already filled the L1D. */
|
||||
{ lw r4, r1; addi r1, r1, 4; addi r20, r1, 16 } /* r4 = WORD_12 */
|
||||
{ lw r8, r1; addi r1, r1, 4; slt_u r13, r20, r15 }/* r8 = WORD_13 */
|
||||
{ lw r11, r1; addi r1, r1, -52; mvz r20, r13, r1 } /* r11 = WORD_14 */
|
||||
|
||||
/* Load the three remaining words from the first L1D line, first
|
||||
stalling until it has filled by "looking at" r16. */
|
||||
{ lw r13, r1; addi r1, r1, 4; move zero, r16 } /* r13 = WORD_1 */
|
||||
{ lw r14, r1; addi r1, r1, 4 } /* r14 = WORD_2 */
|
||||
{ lw r15, r1; addi r1, r1, 8; addi r10, r0, 60 } /* r15 = WORD_3 */
|
||||
|
||||
/* Load second word from the second L1D line, first
|
||||
stalling until it has filled by "looking at" r17. */
|
||||
{ lw r19, r1; addi r1, r1, 4; move zero, r17 } /* r19 = WORD_5 */
|
||||
|
||||
/* Store last word to the destination line, potentially dirtying it
|
||||
for the first time, which keeps the L2 busy for two cycles. */
|
||||
{ sw r10, r12 } /* store(WORD_15) */
|
||||
|
||||
/* Use two L1D hits to cover the sw L2 access above. */
|
||||
{ lw r10, r1; addi r1, r1, 4 } /* r10 = WORD_6 */
|
||||
{ lw r12, r1; addi r1, r1, 4 } /* r12 = WORD_7 */
|
||||
|
||||
/* Fill third L1D line. */
|
||||
{ lw r18, r1; addi r1, r1, 4 } /* r18 = WORD_8 */
|
||||
|
||||
/* Store first L1D line. */
|
||||
{ sw r0, r16; addi r0, r0, 4; add r16, r0, r2 } /* store(WORD_0) */
|
||||
{ sw r0, r13; addi r0, r0, 4; andi r16, r16, -64 } /* store(WORD_1) */
|
||||
{ sw r0, r14; addi r0, r0, 4; slt_u r16, r9, r16 } /* store(WORD_2) */
|
||||
{ sw r0, r15; addi r0, r0, 4; addi r13, sp, -64 } /* store(WORD_3) */
|
||||
|
||||
/* Store second L1D line. */
|
||||
{ sw r0, r17; addi r0, r0, 4; mvz r9, r16, r13 }/* store(WORD_4) */
|
||||
{ sw r0, r19; addi r0, r0, 4 } /* store(WORD_5) */
|
||||
{ sw r0, r10; addi r0, r0, 4 } /* store(WORD_6) */
|
||||
{ sw r0, r12; addi r0, r0, 4 } /* store(WORD_7) */
|
||||
|
||||
{ lw r13, r1; addi r1, r1, 4; move zero, r18 } /* r13 = WORD_9 */
|
||||
{ lw r14, r1; addi r1, r1, 4 } /* r14 = WORD_10 */
|
||||
{ lw r15, r1; move r1, r20 } /* r15 = WORD_11 */
|
||||
|
||||
/* Store third L1D line. */
|
||||
{ sw r0, r18; addi r0, r0, 4 } /* store(WORD_8) */
|
||||
{ sw r0, r13; addi r0, r0, 4 } /* store(WORD_9) */
|
||||
{ sw r0, r14; addi r0, r0, 4 } /* store(WORD_10) */
|
||||
{ sw r0, r15; addi r0, r0, 4 } /* store(WORD_11) */
|
||||
|
||||
/* Store rest of fourth L1D line. */
|
||||
{ sw r0, r4; addi r0, r0, 4 } /* store(WORD_12) */
|
||||
{
|
||||
sw r0, r8 /* store(WORD_13) */
|
||||
addi r0, r0, 4
|
||||
/* Will r2 be > 64 after we subtract 64 below? */
|
||||
shri r4, r2, 7
|
||||
}
|
||||
{
|
||||
sw r0, r11 /* store(WORD_14) */
|
||||
addi r0, r0, 8
|
||||
/* Record 64 bytes successfully copied. */
|
||||
addi r2, r2, -64
|
||||
}
|
||||
|
||||
{ jrp lr; move lr, r27 }
|
||||
|
||||
/* Convey to the backtrace library that the stack frame is
|
||||
size zero, and the real return address is on the stack
|
||||
rather than in 'lr'. */
|
||||
{ info 8 }
|
||||
|
||||
.align 64
|
||||
.Lcopy_unaligned_maybe_many:
|
||||
/* Skip the setup overhead if we aren't copying many bytes. */
|
||||
{ slti_u r8, r2, 20; sub r4, zero, r0 }
|
||||
{ bnzt r8, .Lcopy_unaligned_few; andi r4, r4, 3 }
|
||||
{ bz r4, .Ldest_is_word_aligned; add r18, r1, r2 }
|
||||
|
||||
/* Unaligned 4 byte at a time copy handler. */
|
||||
|
||||
/* Copy single bytes until r0 == 0 mod 4, so we can store words. */
|
||||
.Lalign_dest_loop:
|
||||
{ lb_u r3, r1; addi r1, r1, 1; addi r4, r4, -1 }
|
||||
{ sb r0, r3; addi r0, r0, 1; addi r2, r2, -1 }
|
||||
{ bnzt r4, .Lalign_dest_loop; andi r3, r1, 3 }
|
||||
|
||||
/* If source and dest are now *both* aligned, do an aligned copy. */
|
||||
{ bz r3, .Lcheck_aligned_copy_size; addli r4, r2, -256 }
|
||||
|
||||
.Ldest_is_word_aligned:
|
||||
|
||||
{ andi r8, r0, 63; lwadd_na r6, r1, 4}
|
||||
{ slti_u r9, r2, 64; bz r8, .Ldest_is_L2_line_aligned }
|
||||
|
||||
/* This copies unaligned words until either there are fewer
|
||||
than 4 bytes left to copy, or until the destination pointer
|
||||
is cache-aligned, whichever comes first.
|
||||
|
||||
On entry:
|
||||
- r0 is the next store address.
|
||||
- r1 points 4 bytes past the load address corresponding to r0.
|
||||
- r2 >= 4
|
||||
- r6 is the next aligned word loaded. */
|
||||
.Lcopy_unaligned_src_words:
|
||||
{ lwadd_na r7, r1, 4; slti_u r8, r2, 4 + 4 }
|
||||
/* stall */
|
||||
{ dword_align r6, r7, r1; slti_u r9, r2, 64 + 4 }
|
||||
{ swadd r0, r6, 4; addi r2, r2, -4 }
|
||||
{ bnz r8, .Lcleanup_unaligned_words; andi r8, r0, 63 }
|
||||
{ bnzt r8, .Lcopy_unaligned_src_words; move r6, r7 }
|
||||
|
||||
/* On entry:
|
||||
- r0 is the next store address.
|
||||
- r1 points 4 bytes past the load address corresponding to r0.
|
||||
- r2 >= 4 (# of bytes left to store).
|
||||
- r6 is the next aligned src word value.
|
||||
- r9 = (r2 < 64U).
|
||||
- r18 points one byte past the end of source memory. */
|
||||
.Ldest_is_L2_line_aligned:
|
||||
|
||||
{
|
||||
/* Not a full cache line remains. */
|
||||
bnz r9, .Lcleanup_unaligned_words
|
||||
move r7, r6
|
||||
}
|
||||
|
||||
/* r2 >= 64 */
|
||||
|
||||
/* Kick off two prefetches, but don't go past the end. */
|
||||
{ addi r3, r1, 63 - 4; addi r8, r1, 64 + 63 - 4 }
|
||||
{ prefetch r3; move r3, r8; slt_u r8, r8, r18 }
|
||||
{ mvz r3, r8, r1; addi r8, r3, 64 }
|
||||
{ prefetch r3; move r3, r8; slt_u r8, r8, r18 }
|
||||
{ mvz r3, r8, r1; movei r17, 0 }
|
||||
|
||||
.Lcopy_unaligned_line:
|
||||
/* Prefetch another line. */
|
||||
{ prefetch r3; addi r15, r1, 60; addi r3, r3, 64 }
|
||||
/* Fire off a load of the last word we are about to copy. */
|
||||
{ lw_na r15, r15; slt_u r8, r3, r18 }
|
||||
|
||||
{ mvz r3, r8, r1; wh64 r0 }
|
||||
|
||||
/* This loop runs twice.
|
||||
|
||||
On entry:
|
||||
- r17 is even before the first iteration, and odd before
|
||||
the second. It is incremented inside the loop. Encountering
|
||||
an even value at the end of the loop makes it stop. */
|
||||
.Lcopy_half_an_unaligned_line:
|
||||
{
|
||||
/* Stall until the last byte is ready. In the steady state this
|
||||
guarantees all words to load below will be in the L2 cache, which
|
||||
avoids shunting the loads to the RTF. */
|
||||
move zero, r15
|
||||
lwadd_na r7, r1, 16
|
||||
}
|
||||
{ lwadd_na r11, r1, 12 }
|
||||
{ lwadd_na r14, r1, -24 }
|
||||
{ lwadd_na r8, r1, 4 }
|
||||
{ lwadd_na r9, r1, 4 }
|
||||
{
|
||||
lwadd_na r10, r1, 8
|
||||
/* r16 = (r2 < 64), after we subtract 32 from r2 below. */
|
||||
slti_u r16, r2, 64 + 32
|
||||
}
|
||||
{ lwadd_na r12, r1, 4; addi r17, r17, 1 }
|
||||
{ lwadd_na r13, r1, 8; dword_align r6, r7, r1 }
|
||||
{ swadd r0, r6, 4; dword_align r7, r8, r1 }
|
||||
{ swadd r0, r7, 4; dword_align r8, r9, r1 }
|
||||
{ swadd r0, r8, 4; dword_align r9, r10, r1 }
|
||||
{ swadd r0, r9, 4; dword_align r10, r11, r1 }
|
||||
{ swadd r0, r10, 4; dword_align r11, r12, r1 }
|
||||
{ swadd r0, r11, 4; dword_align r12, r13, r1 }
|
||||
{ swadd r0, r12, 4; dword_align r13, r14, r1 }
|
||||
{ swadd r0, r13, 4; addi r2, r2, -32 }
|
||||
{ move r6, r14; bbst r17, .Lcopy_half_an_unaligned_line }
|
||||
|
||||
{ bzt r16, .Lcopy_unaligned_line; move r7, r6 }
|
||||
|
||||
/* On entry:
|
||||
- r0 is the next store address.
|
||||
- r1 points 4 bytes past the load address corresponding to r0.
|
||||
- r2 >= 0 (# of bytes left to store).
|
||||
- r7 is the next aligned src word value. */
|
||||
.Lcleanup_unaligned_words:
|
||||
/* Handle any trailing bytes. */
|
||||
{ bz r2, .Lcopy_unaligned_done; slti_u r8, r2, 4 }
|
||||
{ bzt r8, .Lcopy_unaligned_src_words; move r6, r7 }
|
||||
|
||||
/* Move r1 back to the point where it corresponds to r0. */
|
||||
{ addi r1, r1, -4 }
|
||||
|
||||
/* Fall through */
|
||||
|
||||
/* 1 byte at a time copy handler. */
|
||||
|
||||
.Lcopy_unaligned_few:
|
||||
{ lb_u r3, r1; addi r1, r1, 1 }
|
||||
{ sb r0, r3; addi r0, r0, 1; addi r2, r2, -1 }
|
||||
{ bnzt r2, .Lcopy_unaligned_few }
|
||||
|
||||
.Lcopy_unaligned_done:
|
||||
|
||||
{ move r0, r23; jrp lr }
|
||||
|
||||
END (__memcpy)
|
||||
|
||||
weak_alias (__memcpy, memcpy)
|
||||
libc_hidden_builtin_def (memcpy)
|
@ -1,151 +0,0 @@
|
||||
/* Copyright (C) 2011-2017 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Chris Metcalf <cmetcalf@tilera.com>, 2011.
|
||||
|
||||
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
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
#include <arch/chip.h>
|
||||
|
||||
void * inhibit_loop_to_libcall
|
||||
__memset (void *s, int c, size_t n)
|
||||
{
|
||||
uint32_t *out32;
|
||||
int n32;
|
||||
uint32_t v16, v32;
|
||||
uint8_t *out8 = s;
|
||||
int to_align32;
|
||||
|
||||
/* Experimentation shows that a trivial tight loop is a win up until
|
||||
around a size of 20, where writing a word at a time starts to win. */
|
||||
#define BYTE_CUTOFF 20
|
||||
|
||||
#if BYTE_CUTOFF < 3
|
||||
/* This must be at least at least this big, or some code later
|
||||
on doesn't work. */
|
||||
# error "BYTE_CUTOFF is too small."
|
||||
#endif
|
||||
|
||||
if (n < BYTE_CUTOFF)
|
||||
{
|
||||
/* Strangely, this turns out to be the tightest way to write
|
||||
this loop. */
|
||||
if (n != 0)
|
||||
{
|
||||
do
|
||||
{
|
||||
/* Strangely, combining these into one line performs worse. */
|
||||
*out8 = c;
|
||||
out8++;
|
||||
}
|
||||
while (--n != 0);
|
||||
}
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
/* Align 'out8'. We know n >= 3 so this won't write past the end. */
|
||||
while (((uintptr_t) out8 & 3) != 0)
|
||||
{
|
||||
*out8++ = c;
|
||||
--n;
|
||||
}
|
||||
|
||||
/* Align 'n'. */
|
||||
while (n & 3)
|
||||
out8[--n] = c;
|
||||
|
||||
out32 = (uint32_t *) out8;
|
||||
n32 = n >> 2;
|
||||
|
||||
/* Tile input byte out to 32 bits. */
|
||||
v16 = __insn_intlb (c, c);
|
||||
v32 = __insn_intlh (v16, v16);
|
||||
|
||||
/* This must be at least 8 or the following loop doesn't work. */
|
||||
#define CACHE_LINE_SIZE_IN_WORDS (CHIP_L2_LINE_SIZE() / 4)
|
||||
|
||||
/* Determine how many words we need to emit before the 'out32'
|
||||
pointer becomes aligned modulo the cache line size. */
|
||||
to_align32 = (-((uintptr_t) out32 >> 2)) & (CACHE_LINE_SIZE_IN_WORDS - 1);
|
||||
|
||||
/* Only bother aligning and using wh64 if there is at least one full
|
||||
cache line to process. This check also prevents overrunning the
|
||||
end of the buffer with alignment words. */
|
||||
if (to_align32 <= n32 - CACHE_LINE_SIZE_IN_WORDS)
|
||||
{
|
||||
int lines_left;
|
||||
|
||||
/* Align out32 mod the cache line size so we can use wh64. */
|
||||
n32 -= to_align32;
|
||||
for (; to_align32 != 0; to_align32--)
|
||||
{
|
||||
*out32 = v32;
|
||||
out32++;
|
||||
}
|
||||
|
||||
/* Use unsigned divide to turn this into a right shift. */
|
||||
lines_left = (unsigned) n32 / CACHE_LINE_SIZE_IN_WORDS;
|
||||
|
||||
do
|
||||
{
|
||||
/* Only wh64 a few lines at a time, so we don't exceed the
|
||||
maximum number of victim lines. */
|
||||
int x = ((lines_left < CHIP_MAX_OUTSTANDING_VICTIMS ())? lines_left
|
||||
: CHIP_MAX_OUTSTANDING_VICTIMS ());
|
||||
uint32_t *wh = out32;
|
||||
int i = x;
|
||||
int j;
|
||||
|
||||
lines_left -= x;
|
||||
|
||||
do
|
||||
{
|
||||
__insn_wh64 (wh);
|
||||
wh += CACHE_LINE_SIZE_IN_WORDS;
|
||||
}
|
||||
while (--i);
|
||||
|
||||
for (j = x * (CACHE_LINE_SIZE_IN_WORDS / 4); j != 0; j--)
|
||||
{
|
||||
*out32++ = v32;
|
||||
*out32++ = v32;
|
||||
*out32++ = v32;
|
||||
*out32++ = v32;
|
||||
}
|
||||
}
|
||||
while (lines_left != 0);
|
||||
|
||||
/* We processed all full lines above, so only this many words
|
||||
remain to be processed. */
|
||||
n32 &= CACHE_LINE_SIZE_IN_WORDS - 1;
|
||||
}
|
||||
|
||||
/* Now handle any leftover values. */
|
||||
if (n32 != 0)
|
||||
{
|
||||
do
|
||||
{
|
||||
*out32 = v32;
|
||||
out32++;
|
||||
}
|
||||
while (--n32 != 0);
|
||||
}
|
||||
|
||||
return s;
|
||||
}
|
||||
weak_alias (__memset, memset)
|
||||
libc_hidden_builtin_def (memset)
|
@ -1,29 +0,0 @@
|
||||
/* Copyright (C) 2011-2017 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Chris Metcalf <cmetcalf@tilera.com>, 2011.
|
||||
|
||||
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
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <arch/spr_def.h>
|
||||
|
||||
#define GETSP() ({ register uintptr_t stack_ptr asm ("sp"); stack_ptr; })
|
||||
|
||||
#define GETTIME(low,high) \
|
||||
{ \
|
||||
low = __insn_mfspr (SPR_CYCLE_LOW); \
|
||||
high = __insn_mfspr (SPR_CYCLE_HIGH); \
|
||||
}
|
||||
|
||||
#include <sysdeps/generic/memusage.h>
|
@ -1,45 +0,0 @@
|
||||
/* Copyright (C) 2011-2017 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Chris Metcalf <cmetcalf@tilera.com>, 2011.
|
||||
|
||||
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
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
|
||||
void *
|
||||
__rawmemchr (const void *s, int c)
|
||||
{
|
||||
/* Get an aligned pointer. */
|
||||
const uintptr_t s_int = (uintptr_t) s;
|
||||
const uint32_t *p = (const uint32_t *) (s_int & -4);
|
||||
|
||||
/* Create four copies of the byte for which we are looking. */
|
||||
const uint32_t goal = 0x01010101 * (uint8_t) c;
|
||||
|
||||
/* Read the first word, but munge it so that bytes before the array
|
||||
will not match goal. Note that this shift count expression works
|
||||
because we know shift counts are taken mod 32. */
|
||||
const uint32_t before_mask = (1 << (s_int << 3)) - 1;
|
||||
uint32_t v = (*p | before_mask) ^ (goal & before_mask);
|
||||
|
||||
uint32_t bits;
|
||||
while ((bits = __insn_seqb (v, goal)) == 0)
|
||||
v = *++p;
|
||||
|
||||
return ((char *) p) + (__insn_ctz (bits) >> 3);
|
||||
}
|
||||
libc_hidden_def (__rawmemchr)
|
||||
weak_alias (__rawmemchr, rawmemchr)
|
@ -1,68 +0,0 @@
|
||||
/* Copyright (C) 2011-2017 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Chris Metcalf <cmetcalf@tilera.com>, 2011.
|
||||
|
||||
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
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#undef strchr
|
||||
|
||||
char *
|
||||
strchr (const char *s, int c)
|
||||
{
|
||||
int z, g;
|
||||
|
||||
/* Get an aligned pointer. */
|
||||
const uintptr_t s_int = (uintptr_t) s;
|
||||
const uint32_t *p = (const uint32_t *) (s_int & -4);
|
||||
|
||||
/* Create four copies of the byte for which we are looking. */
|
||||
const uint32_t goal = 0x01010101 * (uint8_t) c;
|
||||
|
||||
/* Read the first aligned word, but force bytes before the string to
|
||||
match neither zero nor goal (we make sure the high bit of each
|
||||
byte is 1, and the low 7 bits are all the opposite of the goal
|
||||
byte). Note that this shift count expression works because we
|
||||
know shift counts are taken mod 32. */
|
||||
const uint32_t before_mask = (1 << (s_int << 3)) - 1;
|
||||
uint32_t v = (*p | before_mask) ^ (goal & __insn_shrib (before_mask, 1));
|
||||
|
||||
uint32_t zero_matches, goal_matches;
|
||||
while (1)
|
||||
{
|
||||
/* Look for a terminating '\0'. */
|
||||
zero_matches = __insn_seqb (v, 0);
|
||||
|
||||
/* Look for the goal byte. */
|
||||
goal_matches = __insn_seqb (v, goal);
|
||||
|
||||
if (__builtin_expect ((zero_matches | goal_matches) != 0, 0))
|
||||
break;
|
||||
|
||||
v = *++p;
|
||||
}
|
||||
|
||||
z = __insn_ctz (zero_matches);
|
||||
g = __insn_ctz (goal_matches);
|
||||
|
||||
/* If we found c before '\0' we got a match. Note that if c == '\0'
|
||||
then g == z, and we correctly return the address of the '\0'
|
||||
rather than NULL. */
|
||||
return (g <= z) ? ((char *) p) + (g >> 3) : NULL;
|
||||
}
|
||||
weak_alias (strchr, index)
|
||||
libc_hidden_builtin_def (strchr)
|
@ -1,65 +0,0 @@
|
||||
/* Copyright (C) 2011-2017 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Chris Metcalf <cmetcalf@tilera.com>, 2011.
|
||||
|
||||
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
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
|
||||
char *
|
||||
__strchrnul (const char *s, int c)
|
||||
{
|
||||
int z, g;
|
||||
|
||||
/* Get an aligned pointer. */
|
||||
const uintptr_t s_int = (uintptr_t) s;
|
||||
const uint32_t *p = (const uint32_t *) (s_int & -4);
|
||||
|
||||
/* Create four copies of the byte for which we are looking. */
|
||||
const uint32_t goal = 0x01010101 * (uint8_t) c;
|
||||
|
||||
/* Read the first aligned word, but force bytes before the string to
|
||||
match neither zero nor goal (we make sure the high bit of each
|
||||
byte is 1, and the low 7 bits are all the opposite of the goal
|
||||
byte). Note that this shift count expression works because we
|
||||
know shift counts are taken mod 32. */
|
||||
const uint32_t before_mask = (1 << (s_int << 3)) - 1;
|
||||
uint32_t v = (*p | before_mask) ^ (goal & __insn_shrib (before_mask, 1));
|
||||
|
||||
uint32_t zero_matches, goal_matches;
|
||||
while (1)
|
||||
{
|
||||
/* Look for a terminating '\0'. */
|
||||
zero_matches = __insn_seqb (v, 0);
|
||||
|
||||
/* Look for the goal byte. */
|
||||
goal_matches = __insn_seqb (v, goal);
|
||||
|
||||
if (__builtin_expect ((zero_matches | goal_matches) != 0, 0))
|
||||
break;
|
||||
|
||||
v = *++p;
|
||||
}
|
||||
|
||||
z = __insn_ctz (zero_matches);
|
||||
g = __insn_ctz (goal_matches);
|
||||
|
||||
/* Return a pointer to the NUL or goal, whichever is first. */
|
||||
if (z < g)
|
||||
g = z;
|
||||
return ((char *) p) + (g >> 3);
|
||||
}
|
||||
weak_alias (__strchrnul, strchrnul)
|
@ -1,39 +0,0 @@
|
||||
/* Copyright (C) 2011-2017 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Chris Metcalf <cmetcalf@tilera.com>, 2011.
|
||||
|
||||
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
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
|
||||
size_t
|
||||
strlen (const char *s)
|
||||
{
|
||||
/* Get an aligned pointer. */
|
||||
const uintptr_t s_int = (uintptr_t) s;
|
||||
const uint32_t *p = (const uint32_t *) (s_int & -4);
|
||||
|
||||
/* Read the first word, but force bytes before the string to be nonzero.
|
||||
This expression works because we know shift counts are taken mod 32. */
|
||||
uint32_t v = *p | ((1 << (s_int << 3)) - 1);
|
||||
|
||||
uint32_t bits;
|
||||
while ((bits = __insn_seqb (v, 0)) == 0)
|
||||
v = *++p;
|
||||
|
||||
return ((const char *) p) + (__insn_ctz (bits) >> 3) - s;
|
||||
}
|
||||
libc_hidden_builtin_def (strlen)
|
@ -1,73 +0,0 @@
|
||||
/* Copyright (C) 2011-2017 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Chris Metcalf <cmetcalf@tilera.com>, 2011.
|
||||
|
||||
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
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
|
||||
char *
|
||||
strrchr (const char *s, int c)
|
||||
{
|
||||
/* Get an aligned pointer. */
|
||||
const uintptr_t s_int = (uintptr_t) s;
|
||||
const uint32_t *p = (const uint32_t *) (s_int & -4);
|
||||
|
||||
/* Create four copies of the byte for which we are looking. */
|
||||
const uint32_t goal = 0x01010101 * (uint8_t) c;
|
||||
|
||||
/* Read the first aligned word, but force bytes before the string to
|
||||
match neither zero nor goal (we make sure the high bit of each
|
||||
byte is 1, and the low 7 bits are all the opposite of the goal
|
||||
byte). Note that this shift count expression works because we
|
||||
know shift counts are taken mod 32. */
|
||||
const uint32_t before_mask = (1 << (s_int << 3)) - 1;
|
||||
uint32_t v = (*p | before_mask) ^ (goal & __insn_shrib (before_mask, 1));
|
||||
const char *found = NULL;
|
||||
uint32_t zero_matches, goal_matches;
|
||||
while (1)
|
||||
{
|
||||
/* Look for a terminating '\0'. */
|
||||
zero_matches = __insn_seqb (v, 0);
|
||||
|
||||
/* Look for the goal byte. */
|
||||
goal_matches = __insn_seqb (v, goal);
|
||||
|
||||
/* If we found the goal, record the last offset. */
|
||||
if (__builtin_expect (goal_matches != 0, 0))
|
||||
{
|
||||
if (__builtin_expect (zero_matches != 0, 0))
|
||||
{
|
||||
/* Clear any goal after the first zero. */
|
||||
int first_nul = __insn_ctz (zero_matches);
|
||||
/* The number of top bits we need to clear is
|
||||
32 - (first_nul + 8). */
|
||||
int shift_amt = (24 - first_nul);
|
||||
goal_matches <<= shift_amt;
|
||||
goal_matches >>= shift_amt;
|
||||
}
|
||||
if (__builtin_expect (goal_matches != 0, 1))
|
||||
found = ((char *) p) + 3 - (__insn_clz (goal_matches) >> 3);
|
||||
}
|
||||
|
||||
if (__builtin_expect (zero_matches != 0, 0))
|
||||
return (char *) found;
|
||||
|
||||
v = *++p;
|
||||
}
|
||||
}
|
||||
weak_alias (strrchr, rindex)
|
||||
libc_hidden_builtin_def (strrchr)
|
@ -16,16 +16,10 @@
|
||||
License along with the GNU C Library. If not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#ifdef __tilegx__
|
||||
#define TLS_GD_OFFSET(x) \
|
||||
"moveli r0, hw1_last_tls_gd(" #x ")\n\t" \
|
||||
"shl16insli r0, r0, hw0_tls_gd(" #x ")\n\t" \
|
||||
"addi r0, %1, tls_add(" #x ")\n\t"
|
||||
#else
|
||||
#define TLS_GD_OFFSET(x) \
|
||||
"auli r0, %1, tls_gd_ha16(" #x ")\n\t" \
|
||||
"addli r0, r0, tls_gd_lo16(" #x ")\n\t"
|
||||
#endif
|
||||
|
||||
#define TLS_GD(x) \
|
||||
({ \
|
||||
@ -42,18 +36,11 @@
|
||||
/* No special support for LD mode. */
|
||||
#define TLS_LD TLS_GD
|
||||
|
||||
#ifdef __tilegx__
|
||||
#define TLS_IE_OFFSET(x) \
|
||||
"moveli %0, hw1_last_tls_ie(" #x ")\n\t" \
|
||||
"shl16insli %0, %0, hw0_tls_ie(" #x ")\n\t" \
|
||||
"addi %0, %1, tls_add(" #x ")\n\t"
|
||||
#define LD_TLS "ld_tls"
|
||||
#else
|
||||
#define TLS_IE_OFFSET(x) \
|
||||
"auli %0, %1, tls_ie_ha16(" #x ")\n\t" \
|
||||
"addli %0, %0, tls_ie_lo16(" #x ")\n\t"
|
||||
#define LD_TLS "lw_tls"
|
||||
#endif
|
||||
|
||||
#define TLS_IE(x) \
|
||||
({ \
|
||||
@ -66,16 +53,10 @@
|
||||
"=&r" (__retval) : "r" (_GLOBAL_OFFSET_TABLE_)); \
|
||||
__retval; })
|
||||
|
||||
#ifdef __tilegx__
|
||||
#define _TLS_LE(x) \
|
||||
"moveli %0, hw1_last_tls_le(" #x ")\n\t" \
|
||||
"shl16insli %0, %0, hw0_tls_le(" #x ")\n\t" \
|
||||
"add %0, %0, tp"
|
||||
#else
|
||||
#define _TLS_LE(x) \
|
||||
"auli %0, tp, tls_le_ha16(" #x ")\n\t" \
|
||||
"addli %0, %0, tls_le_lo16(" #x ")\n\t"
|
||||
#endif
|
||||
|
||||
#define TLS_LE(x) \
|
||||
({ \
|
||||
|
@ -31,11 +31,7 @@
|
||||
|
||||
/* Provide the appropriate dblalign builtin to shift two registers
|
||||
based on the alignment of a pointer held in a third register. */
|
||||
#ifdef __tilegx__
|
||||
#define DBLALIGN __insn_dblalign
|
||||
#else
|
||||
#define DBLALIGN __insn_dword_align
|
||||
#endif
|
||||
|
||||
/* _wordcopy_fwd_aligned -- Copy block beginning at SRCP to
|
||||
block beginning at DSTP with LEN `op_t' words (not LEN bytes!).
|
||||
|
@ -89,12 +89,10 @@
|
||||
|
||||
#endif /* __WORDSIZE == 32 */
|
||||
|
||||
#ifdef __tilegx__
|
||||
/* Only TILE-Gx has the ability to choose 32- or 64-bit. */
|
||||
/* TILE-Gx has the ability to choose 32- or 64-bit. */
|
||||
#define __ILP32_OFF32_CFLAGS "-m32"
|
||||
#define __ILP32_OFFBIG_CFLAGS "-m32 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
|
||||
#define __ILP32_OFF32_LDFLAGS "-m32"
|
||||
#define __ILP32_OFFBIG_LDFLAGS "-m32"
|
||||
#define __LP64_OFF64_CFLAGS "-m64"
|
||||
#define __LP64_OFF64_LDFLAGS "-m64"
|
||||
#endif
|
||||
|
@ -25,8 +25,8 @@ static long int linux_sysconf (int name);
|
||||
long int
|
||||
__sysconf (int name)
|
||||
{
|
||||
/* Currently we support only tilepro and tilegx, which have
|
||||
statically-known cache sizes. */
|
||||
/* Currently we support only tilegx, which have statically-known cache
|
||||
sizes. */
|
||||
switch (name)
|
||||
{
|
||||
/* Level 1 cache. */
|
||||
|
@ -1,3 +0,0 @@
|
||||
unix/sysv/linux/tile
|
||||
unix/sysv/linux/generic/wordsize-32
|
||||
unix/sysv/linux/generic
|
@ -1,67 +0,0 @@
|
||||
blkcnt64_t:x
|
||||
blkcnt_t:l
|
||||
blksize_t:i
|
||||
caddr_t:Pc
|
||||
clockid_t:i
|
||||
clock_t:l
|
||||
daddr_t:i
|
||||
dev_t:y
|
||||
fd_mask:l
|
||||
fsblkcnt64_t:y
|
||||
fsblkcnt_t:m
|
||||
fsfilcnt64_t:y
|
||||
fsfilcnt_t:m
|
||||
fsid_t:8__fsid_t
|
||||
gid_t:j
|
||||
id_t:j
|
||||
ino64_t:y
|
||||
ino_t:m
|
||||
int16_t:s
|
||||
int32_t:i
|
||||
int64_t:x
|
||||
int8_t:a
|
||||
intptr_t:i
|
||||
key_t:i
|
||||
loff_t:x
|
||||
mode_t:j
|
||||
nlink_t:j
|
||||
off64_t:x
|
||||
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:x
|
||||
register_t:i
|
||||
rlim64_t:y
|
||||
rlim_t:m
|
||||
sigset_t:10__sigset_t
|
||||
size_t:j
|
||||
socklen_t:j
|
||||
ssize_t:i
|
||||
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:y
|
||||
u_int8_t:h
|
||||
ulong:m
|
||||
u_long:m
|
||||
u_quad_t:y
|
||||
useconds_t:j
|
||||
ushort:t
|
||||
u_short:t
|
@ -1,6 +0,0 @@
|
||||
#define JMP_BUF_SIZE 260
|
||||
#define SIGJMP_BUF_SIZE 260
|
||||
#define JMP_BUF_ALIGN 4
|
||||
#define SIGJMP_BUF_ALIGN 4
|
||||
#define MASK_WAS_SAVED_OFFSET 128
|
||||
#define SAVED_MASK_OFFSET 132
|
@ -1,9 +0,0 @@
|
||||
GLIBC_2.12 GLIBC_2.12 A
|
||||
GLIBC_2.12 __libc_stack_end D 0x4
|
||||
GLIBC_2.12 __tls_get_addr F
|
||||
GLIBC_2.12 _dl_mcount F
|
||||
GLIBC_2.12 _r_debug D 0x14
|
||||
GLIBC_2.12 calloc F
|
||||
GLIBC_2.12 free F
|
||||
GLIBC_2.12 malloc F
|
||||
GLIBC_2.12 realloc F
|
@ -1,25 +0,0 @@
|
||||
/* Copyright (C) 2011-2017 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Chris Metcalf <cmetcalf@tilera.com>, 2011.
|
||||
|
||||
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
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <sysdeps/generic/ldconfig.h>
|
||||
|
||||
#define SYSDEP_KNOWN_INTERPRETER_NAMES \
|
||||
{ "/lib/ld.so.1", FLAG_ELF_LIBC6 },
|
||||
#define SYSDEP_KNOWN_LIBRARY_NAMES \
|
||||
{ "libc.so.6", FLAG_ELF_LIBC6 }, \
|
||||
{ "libm.so.6", FLAG_ELF_LIBC6 },
|
@ -1,2 +0,0 @@
|
||||
GLIBC_2.12 GLIBC_2.12 A
|
||||
GLIBC_2.12 __ctype_get_mb_cur_max F
|
@ -1,5 +0,0 @@
|
||||
GLIBC_2.12 GLIBC_2.12 A
|
||||
GLIBC_2.12 gai_cancel F
|
||||
GLIBC_2.12 gai_error F
|
||||
GLIBC_2.12 gai_suspend F
|
||||
GLIBC_2.12 getaddrinfo_a F
|
File diff suppressed because it is too large
Load Diff
@ -1,8 +0,0 @@
|
||||
GLIBC_2.12 GLIBC_2.12 A
|
||||
GLIBC_2.12 crypt F
|
||||
GLIBC_2.12 crypt_r F
|
||||
GLIBC_2.12 encrypt F
|
||||
GLIBC_2.12 encrypt_r F
|
||||
GLIBC_2.12 fcrypt F
|
||||
GLIBC_2.12 setkey F
|
||||
GLIBC_2.12 setkey_r F
|
@ -1,10 +0,0 @@
|
||||
GLIBC_2.12 GLIBC_2.12 A
|
||||
GLIBC_2.12 dladdr F
|
||||
GLIBC_2.12 dladdr1 F
|
||||
GLIBC_2.12 dlclose F
|
||||
GLIBC_2.12 dlerror F
|
||||
GLIBC_2.12 dlinfo F
|
||||
GLIBC_2.12 dlmopen F
|
||||
GLIBC_2.12 dlopen F
|
||||
GLIBC_2.12 dlsym F
|
||||
GLIBC_2.12 dlvsym F
|
@ -1,749 +0,0 @@
|
||||
GLIBC_2.12 GLIBC_2.12 A
|
||||
GLIBC_2.12 _LIB_VERSION D 0x4
|
||||
GLIBC_2.12 __clog10 F
|
||||
GLIBC_2.12 __clog10f F
|
||||
GLIBC_2.12 __clog10l F
|
||||
GLIBC_2.12 __finite F
|
||||
GLIBC_2.12 __finitef F
|
||||
GLIBC_2.12 __fpclassify F
|
||||
GLIBC_2.12 __fpclassifyf F
|
||||
GLIBC_2.12 __signbit F
|
||||
GLIBC_2.12 __signbitf F
|
||||
GLIBC_2.12 acos F
|
||||
GLIBC_2.12 acosf F
|
||||
GLIBC_2.12 acosh F
|
||||
GLIBC_2.12 acoshf F
|
||||
GLIBC_2.12 acoshl F
|
||||
GLIBC_2.12 acosl F
|
||||
GLIBC_2.12 asin F
|
||||
GLIBC_2.12 asinf F
|
||||
GLIBC_2.12 asinh F
|
||||
GLIBC_2.12 asinhf F
|
||||
GLIBC_2.12 asinhl F
|
||||
GLIBC_2.12 asinl F
|
||||
GLIBC_2.12 atan F
|
||||
GLIBC_2.12 atan2 F
|
||||
GLIBC_2.12 atan2f F
|
||||
GLIBC_2.12 atan2l F
|
||||
GLIBC_2.12 atanf F
|
||||
GLIBC_2.12 atanh F
|
||||
GLIBC_2.12 atanhf F
|
||||
GLIBC_2.12 atanhl F
|
||||
GLIBC_2.12 atanl F
|
||||
GLIBC_2.12 cabs F
|
||||
GLIBC_2.12 cabsf F
|
||||
GLIBC_2.12 cabsl F
|
||||
GLIBC_2.12 cacos F
|
||||
GLIBC_2.12 cacosf F
|
||||
GLIBC_2.12 cacosh F
|
||||
GLIBC_2.12 cacoshf F
|
||||
GLIBC_2.12 cacoshl F
|
||||
GLIBC_2.12 cacosl F
|
||||
GLIBC_2.12 carg F
|
||||
GLIBC_2.12 cargf F
|
||||
GLIBC_2.12 cargl F
|
||||
GLIBC_2.12 casin F
|
||||
GLIBC_2.12 casinf F
|
||||
GLIBC_2.12 casinh F
|
||||
GLIBC_2.12 casinhf F
|
||||
GLIBC_2.12 casinhl F
|
||||
GLIBC_2.12 casinl F
|
||||
GLIBC_2.12 catan F
|
||||
GLIBC_2.12 catanf F
|
||||
GLIBC_2.12 catanh F
|
||||
GLIBC_2.12 catanhf F
|
||||
GLIBC_2.12 catanhl F
|
||||
GLIBC_2.12 catanl F
|
||||
GLIBC_2.12 cbrt F
|
||||
GLIBC_2.12 cbrtf F
|
||||
GLIBC_2.12 cbrtl F
|
||||
GLIBC_2.12 ccos F
|
||||
GLIBC_2.12 ccosf F
|
||||
GLIBC_2.12 ccosh F
|
||||
GLIBC_2.12 ccoshf F
|
||||
GLIBC_2.12 ccoshl F
|
||||
GLIBC_2.12 ccosl F
|
||||
GLIBC_2.12 ceil F
|
||||
GLIBC_2.12 ceilf F
|
||||
GLIBC_2.12 ceill F
|
||||
GLIBC_2.12 cexp F
|
||||
GLIBC_2.12 cexpf F
|
||||
GLIBC_2.12 cexpl F
|
||||
GLIBC_2.12 cimag F
|
||||
GLIBC_2.12 cimagf F
|
||||
GLIBC_2.12 cimagl F
|
||||
GLIBC_2.12 clog F
|
||||
GLIBC_2.12 clog10 F
|
||||
GLIBC_2.12 clog10f F
|
||||
GLIBC_2.12 clog10l F
|
||||
GLIBC_2.12 clogf F
|
||||
GLIBC_2.12 clogl F
|
||||
GLIBC_2.12 conj F
|
||||
GLIBC_2.12 conjf F
|
||||
GLIBC_2.12 conjl F
|
||||
GLIBC_2.12 copysign F
|
||||
GLIBC_2.12 copysignf F
|
||||
GLIBC_2.12 copysignl F
|
||||
GLIBC_2.12 cos F
|
||||
GLIBC_2.12 cosf F
|
||||
GLIBC_2.12 cosh F
|
||||
GLIBC_2.12 coshf F
|
||||
GLIBC_2.12 coshl F
|
||||
GLIBC_2.12 cosl F
|
||||
GLIBC_2.12 cpow F
|
||||
GLIBC_2.12 cpowf F
|
||||
GLIBC_2.12 cpowl F
|
||||
GLIBC_2.12 cproj F
|
||||
GLIBC_2.12 cprojf F
|
||||
GLIBC_2.12 cprojl F
|
||||
GLIBC_2.12 creal F
|
||||
GLIBC_2.12 crealf F
|
||||
GLIBC_2.12 creall F
|
||||
GLIBC_2.12 csin F
|
||||
GLIBC_2.12 csinf F
|
||||
GLIBC_2.12 csinh F
|
||||
GLIBC_2.12 csinhf F
|
||||
GLIBC_2.12 csinhl F
|
||||
GLIBC_2.12 csinl F
|
||||
GLIBC_2.12 csqrt F
|
||||
GLIBC_2.12 csqrtf F
|
||||
GLIBC_2.12 csqrtl F
|
||||
GLIBC_2.12 ctan F
|
||||
GLIBC_2.12 ctanf F
|
||||
GLIBC_2.12 ctanh F
|
||||
GLIBC_2.12 ctanhf F
|
||||
GLIBC_2.12 ctanhl F
|
||||
GLIBC_2.12 ctanl F
|
||||
GLIBC_2.12 drem F
|
||||
GLIBC_2.12 dremf F
|
||||
GLIBC_2.12 dreml F
|
||||
GLIBC_2.12 erf F
|
||||
GLIBC_2.12 erfc F
|
||||
GLIBC_2.12 erfcf F
|
||||
GLIBC_2.12 erfcl F
|
||||
GLIBC_2.12 erff F
|
||||
GLIBC_2.12 erfl F
|
||||
GLIBC_2.12 exp F
|
||||
GLIBC_2.12 exp10 F
|
||||
GLIBC_2.12 exp10f F
|
||||
GLIBC_2.12 exp10l F
|
||||
GLIBC_2.12 exp2 F
|
||||
GLIBC_2.12 exp2f F
|
||||
GLIBC_2.12 exp2l F
|
||||
GLIBC_2.12 expf F
|
||||
GLIBC_2.12 expl F
|
||||
GLIBC_2.12 expm1 F
|
||||
GLIBC_2.12 expm1f F
|
||||
GLIBC_2.12 expm1l F
|
||||
GLIBC_2.12 fabs F
|
||||
GLIBC_2.12 fabsf F
|
||||
GLIBC_2.12 fabsl F
|
||||
GLIBC_2.12 fdim F
|
||||
GLIBC_2.12 fdimf F
|
||||
GLIBC_2.12 fdiml F
|
||||
GLIBC_2.12 feclearexcept F
|
||||
GLIBC_2.12 fedisableexcept F
|
||||
GLIBC_2.12 feenableexcept F
|
||||
GLIBC_2.12 fegetenv F
|
||||
GLIBC_2.12 fegetexcept F
|
||||
GLIBC_2.12 fegetexceptflag F
|
||||
GLIBC_2.12 fegetround F
|
||||
GLIBC_2.12 feholdexcept F
|
||||
GLIBC_2.12 feraiseexcept F
|
||||
GLIBC_2.12 fesetenv F
|
||||
GLIBC_2.12 fesetexceptflag F
|
||||
GLIBC_2.12 fesetround F
|
||||
GLIBC_2.12 fetestexcept F
|
||||
GLIBC_2.12 feupdateenv F
|
||||
GLIBC_2.12 finite F
|
||||
GLIBC_2.12 finitef F
|
||||
GLIBC_2.12 finitel F
|
||||
GLIBC_2.12 floor F
|
||||
GLIBC_2.12 floorf F
|
||||
GLIBC_2.12 floorl F
|
||||
GLIBC_2.12 fma F
|
||||
GLIBC_2.12 fmaf F
|
||||
GLIBC_2.12 fmal F
|
||||
GLIBC_2.12 fmax F
|
||||
GLIBC_2.12 fmaxf F
|
||||
GLIBC_2.12 fmaxl F
|
||||
GLIBC_2.12 fmin F
|
||||
GLIBC_2.12 fminf F
|
||||
GLIBC_2.12 fminl F
|
||||
GLIBC_2.12 fmod F
|
||||
GLIBC_2.12 fmodf F
|
||||
GLIBC_2.12 fmodl F
|
||||
GLIBC_2.12 frexp F
|
||||
GLIBC_2.12 frexpf F
|
||||
GLIBC_2.12 frexpl F
|
||||
GLIBC_2.12 gamma F
|
||||
GLIBC_2.12 gammaf F
|
||||
GLIBC_2.12 gammal F
|
||||
GLIBC_2.12 hypot F
|
||||
GLIBC_2.12 hypotf F
|
||||
GLIBC_2.12 hypotl F
|
||||
GLIBC_2.12 ilogb F
|
||||
GLIBC_2.12 ilogbf F
|
||||
GLIBC_2.12 ilogbl F
|
||||
GLIBC_2.12 j0 F
|
||||
GLIBC_2.12 j0f F
|
||||
GLIBC_2.12 j0l F
|
||||
GLIBC_2.12 j1 F
|
||||
GLIBC_2.12 j1f F
|
||||
GLIBC_2.12 j1l F
|
||||
GLIBC_2.12 jn F
|
||||
GLIBC_2.12 jnf F
|
||||
GLIBC_2.12 jnl F
|
||||
GLIBC_2.12 ldexp F
|
||||
GLIBC_2.12 ldexpf F
|
||||
GLIBC_2.12 ldexpl F
|
||||
GLIBC_2.12 lgamma F
|
||||
GLIBC_2.12 lgamma_r F
|
||||
GLIBC_2.12 lgammaf F
|
||||
GLIBC_2.12 lgammaf_r F
|
||||
GLIBC_2.12 lgammal F
|
||||
GLIBC_2.12 lgammal_r F
|
||||
GLIBC_2.12 llrint F
|
||||
GLIBC_2.12 llrintf F
|
||||
GLIBC_2.12 llrintl F
|
||||
GLIBC_2.12 llround F
|
||||
GLIBC_2.12 llroundf F
|
||||
GLIBC_2.12 llroundl F
|
||||
GLIBC_2.12 log F
|
||||
GLIBC_2.12 log10 F
|
||||
GLIBC_2.12 log10f F
|
||||
GLIBC_2.12 log10l F
|
||||
GLIBC_2.12 log1p F
|
||||
GLIBC_2.12 log1pf F
|
||||
GLIBC_2.12 log1pl F
|
||||
GLIBC_2.12 log2 F
|
||||
GLIBC_2.12 log2f F
|
||||
GLIBC_2.12 log2l F
|
||||
GLIBC_2.12 logb F
|
||||
GLIBC_2.12 logbf F
|
||||
GLIBC_2.12 logbl F
|
||||
GLIBC_2.12 logf F
|
||||
GLIBC_2.12 logl F
|
||||
GLIBC_2.12 lrint F
|
||||
GLIBC_2.12 lrintf F
|
||||
GLIBC_2.12 lrintl F
|
||||
GLIBC_2.12 lround F
|
||||
GLIBC_2.12 lroundf F
|
||||
GLIBC_2.12 lroundl F
|
||||
GLIBC_2.12 matherr F
|
||||
GLIBC_2.12 modf F
|
||||
GLIBC_2.12 modff F
|
||||
GLIBC_2.12 modfl F
|
||||
GLIBC_2.12 nan F
|
||||
GLIBC_2.12 nanf F
|
||||
GLIBC_2.12 nanl F
|
||||
GLIBC_2.12 nearbyint F
|
||||
GLIBC_2.12 nearbyintf F
|
||||
GLIBC_2.12 nearbyintl F
|
||||
GLIBC_2.12 nextafter F
|
||||
GLIBC_2.12 nextafterf F
|
||||
GLIBC_2.12 nextafterl F
|
||||
GLIBC_2.12 nexttoward F
|
||||
GLIBC_2.12 nexttowardf F
|
||||
GLIBC_2.12 nexttowardl F
|
||||
GLIBC_2.12 pow F
|
||||
GLIBC_2.12 pow10 F
|
||||
GLIBC_2.12 pow10f F
|
||||
GLIBC_2.12 pow10l F
|
||||
GLIBC_2.12 powf F
|
||||
GLIBC_2.12 powl F
|
||||
GLIBC_2.12 remainder F
|
||||
GLIBC_2.12 remainderf F
|
||||
GLIBC_2.12 remainderl F
|
||||
GLIBC_2.12 remquo F
|
||||
GLIBC_2.12 remquof F
|
||||
GLIBC_2.12 remquol F
|
||||
GLIBC_2.12 rint F
|
||||
GLIBC_2.12 rintf F
|
||||
GLIBC_2.12 rintl F
|
||||
GLIBC_2.12 round F
|
||||
GLIBC_2.12 roundf F
|
||||
GLIBC_2.12 roundl F
|
||||
GLIBC_2.12 scalb F
|
||||
GLIBC_2.12 scalbf F
|
||||
GLIBC_2.12 scalbl F
|
||||
GLIBC_2.12 scalbln F
|
||||
GLIBC_2.12 scalblnf F
|
||||
GLIBC_2.12 scalblnl F
|
||||
GLIBC_2.12 scalbn F
|
||||
GLIBC_2.12 scalbnf F
|
||||
GLIBC_2.12 scalbnl F
|
||||
GLIBC_2.12 signgam D 0x4
|
||||
GLIBC_2.12 significand F
|
||||
GLIBC_2.12 significandf F
|
||||
GLIBC_2.12 significandl F
|
||||
GLIBC_2.12 sin F
|
||||
GLIBC_2.12 sincos F
|
||||
GLIBC_2.12 sincosf F
|
||||
GLIBC_2.12 sincosl F
|
||||
GLIBC_2.12 sinf F
|
||||
GLIBC_2.12 sinh F
|
||||
GLIBC_2.12 sinhf F
|
||||
GLIBC_2.12 sinhl F
|
||||
GLIBC_2.12 sinl F
|
||||
GLIBC_2.12 sqrt F
|
||||
GLIBC_2.12 sqrtf F
|
||||
GLIBC_2.12 sqrtl F
|
||||
GLIBC_2.12 tan F
|
||||
GLIBC_2.12 tanf F
|
||||
GLIBC_2.12 tanh F
|
||||
GLIBC_2.12 tanhf F
|
||||
GLIBC_2.12 tanhl F
|
||||
GLIBC_2.12 tanl F
|
||||
GLIBC_2.12 tgamma F
|
||||
GLIBC_2.12 tgammaf F
|
||||
GLIBC_2.12 tgammal F
|
||||
GLIBC_2.12 trunc F
|
||||
GLIBC_2.12 truncf F
|
||||
GLIBC_2.12 truncl F
|
||||
GLIBC_2.12 y0 F
|
||||
GLIBC_2.12 y0f F
|
||||
GLIBC_2.12 y0l F
|
||||
GLIBC_2.12 y1 F
|
||||
GLIBC_2.12 y1f F
|
||||
GLIBC_2.12 y1l F
|
||||
GLIBC_2.12 yn F
|
||||
GLIBC_2.12 ynf F
|
||||
GLIBC_2.12 ynl F
|
||||
GLIBC_2.15 GLIBC_2.15 A
|
||||
GLIBC_2.15 __acos_finite F
|
||||
GLIBC_2.15 __acosf_finite F
|
||||
GLIBC_2.15 __acosh_finite F
|
||||
GLIBC_2.15 __acoshf_finite F
|
||||
GLIBC_2.15 __asin_finite F
|
||||
GLIBC_2.15 __asinf_finite F
|
||||
GLIBC_2.15 __atan2_finite F
|
||||
GLIBC_2.15 __atan2f_finite F
|
||||
GLIBC_2.15 __atanh_finite F
|
||||
GLIBC_2.15 __atanhf_finite F
|
||||
GLIBC_2.15 __cosh_finite F
|
||||
GLIBC_2.15 __coshf_finite F
|
||||
GLIBC_2.15 __exp10_finite F
|
||||
GLIBC_2.15 __exp10f_finite F
|
||||
GLIBC_2.15 __exp2_finite F
|
||||
GLIBC_2.15 __exp2f_finite F
|
||||
GLIBC_2.15 __exp_finite F
|
||||
GLIBC_2.15 __expf_finite F
|
||||
GLIBC_2.15 __fmod_finite F
|
||||
GLIBC_2.15 __fmodf_finite F
|
||||
GLIBC_2.15 __gamma_r_finite F
|
||||
GLIBC_2.15 __gammaf_r_finite F
|
||||
GLIBC_2.15 __hypot_finite F
|
||||
GLIBC_2.15 __hypotf_finite F
|
||||
GLIBC_2.15 __j0_finite F
|
||||
GLIBC_2.15 __j0f_finite F
|
||||
GLIBC_2.15 __j1_finite F
|
||||
GLIBC_2.15 __j1f_finite F
|
||||
GLIBC_2.15 __jn_finite F
|
||||
GLIBC_2.15 __jnf_finite F
|
||||
GLIBC_2.15 __lgamma_r_finite F
|
||||
GLIBC_2.15 __lgammaf_r_finite F
|
||||
GLIBC_2.15 __log10_finite F
|
||||
GLIBC_2.15 __log10f_finite F
|
||||
GLIBC_2.15 __log2_finite F
|
||||
GLIBC_2.15 __log2f_finite F
|
||||
GLIBC_2.15 __log_finite F
|
||||
GLIBC_2.15 __logf_finite F
|
||||
GLIBC_2.15 __pow_finite F
|
||||
GLIBC_2.15 __powf_finite F
|
||||
GLIBC_2.15 __remainder_finite F
|
||||
GLIBC_2.15 __remainderf_finite F
|
||||
GLIBC_2.15 __scalb_finite F
|
||||
GLIBC_2.15 __scalbf_finite F
|
||||
GLIBC_2.15 __sinh_finite F
|
||||
GLIBC_2.15 __sinhf_finite F
|
||||
GLIBC_2.15 __sqrt_finite F
|
||||
GLIBC_2.15 __sqrtf_finite F
|
||||
GLIBC_2.15 __y0_finite F
|
||||
GLIBC_2.15 __y0f_finite F
|
||||
GLIBC_2.15 __y1_finite F
|
||||
GLIBC_2.15 __y1f_finite F
|
||||
GLIBC_2.15 __yn_finite F
|
||||
GLIBC_2.15 __ynf_finite F
|
||||
GLIBC_2.18 GLIBC_2.18 A
|
||||
GLIBC_2.18 __issignaling F
|
||||
GLIBC_2.18 __issignalingf F
|
||||
GLIBC_2.23 GLIBC_2.23 A
|
||||
GLIBC_2.23 __signgam D 0x4
|
||||
GLIBC_2.23 lgamma F
|
||||
GLIBC_2.23 lgammaf F
|
||||
GLIBC_2.23 lgammal F
|
||||
GLIBC_2.24 GLIBC_2.24 A
|
||||
GLIBC_2.24 nextdown F
|
||||
GLIBC_2.24 nextdownf F
|
||||
GLIBC_2.24 nextdownl F
|
||||
GLIBC_2.24 nextup F
|
||||
GLIBC_2.24 nextupf F
|
||||
GLIBC_2.24 nextupl F
|
||||
GLIBC_2.25 GLIBC_2.25 A
|
||||
GLIBC_2.25 __iseqsig F
|
||||
GLIBC_2.25 __iseqsigf F
|
||||
GLIBC_2.25 canonicalize F
|
||||
GLIBC_2.25 canonicalizef F
|
||||
GLIBC_2.25 canonicalizel F
|
||||
GLIBC_2.25 fegetmode F
|
||||
GLIBC_2.25 fesetexcept F
|
||||
GLIBC_2.25 fesetmode F
|
||||
GLIBC_2.25 fetestexceptflag F
|
||||
GLIBC_2.25 fmaxmag F
|
||||
GLIBC_2.25 fmaxmagf F
|
||||
GLIBC_2.25 fmaxmagl F
|
||||
GLIBC_2.25 fminmag F
|
||||
GLIBC_2.25 fminmagf F
|
||||
GLIBC_2.25 fminmagl F
|
||||
GLIBC_2.25 fromfp F
|
||||
GLIBC_2.25 fromfpf F
|
||||
GLIBC_2.25 fromfpl F
|
||||
GLIBC_2.25 fromfpx F
|
||||
GLIBC_2.25 fromfpxf F
|
||||
GLIBC_2.25 fromfpxl F
|
||||
GLIBC_2.25 getpayload F
|
||||
GLIBC_2.25 getpayloadf F
|
||||
GLIBC_2.25 getpayloadl F
|
||||
GLIBC_2.25 llogb F
|
||||
GLIBC_2.25 llogbf F
|
||||
GLIBC_2.25 llogbl F
|
||||
GLIBC_2.25 roundeven F
|
||||
GLIBC_2.25 roundevenf F
|
||||
GLIBC_2.25 roundevenl F
|
||||
GLIBC_2.25 setpayload F
|
||||
GLIBC_2.25 setpayloadf F
|
||||
GLIBC_2.25 setpayloadl F
|
||||
GLIBC_2.25 setpayloadsig F
|
||||
GLIBC_2.25 setpayloadsigf F
|
||||
GLIBC_2.25 setpayloadsigl F
|
||||
GLIBC_2.25 totalorder F
|
||||
GLIBC_2.25 totalorderf F
|
||||
GLIBC_2.25 totalorderl F
|
||||
GLIBC_2.25 totalordermag F
|
||||
GLIBC_2.25 totalordermagf F
|
||||
GLIBC_2.25 totalordermagl F
|
||||
GLIBC_2.25 ufromfp F
|
||||
GLIBC_2.25 ufromfpf F
|
||||
GLIBC_2.25 ufromfpl F
|
||||
GLIBC_2.25 ufromfpx F
|
||||
GLIBC_2.25 ufromfpxf F
|
||||
GLIBC_2.25 ufromfpxl F
|
||||
GLIBC_2.27 GLIBC_2.27 A
|
||||
GLIBC_2.27 acosf32 F
|
||||
GLIBC_2.27 acosf32x F
|
||||
GLIBC_2.27 acosf64 F
|
||||
GLIBC_2.27 acoshf32 F
|
||||
GLIBC_2.27 acoshf32x F
|
||||
GLIBC_2.27 acoshf64 F
|
||||
GLIBC_2.27 asinf32 F
|
||||
GLIBC_2.27 asinf32x F
|
||||
GLIBC_2.27 asinf64 F
|
||||
GLIBC_2.27 asinhf32 F
|
||||
GLIBC_2.27 asinhf32x F
|
||||
GLIBC_2.27 asinhf64 F
|
||||
GLIBC_2.27 atan2f32 F
|
||||
GLIBC_2.27 atan2f32x F
|
||||
GLIBC_2.27 atan2f64 F
|
||||
GLIBC_2.27 atanf32 F
|
||||
GLIBC_2.27 atanf32x F
|
||||
GLIBC_2.27 atanf64 F
|
||||
GLIBC_2.27 atanhf32 F
|
||||
GLIBC_2.27 atanhf32x F
|
||||
GLIBC_2.27 atanhf64 F
|
||||
GLIBC_2.27 cabsf32 F
|
||||
GLIBC_2.27 cabsf32x F
|
||||
GLIBC_2.27 cabsf64 F
|
||||
GLIBC_2.27 cacosf32 F
|
||||
GLIBC_2.27 cacosf32x F
|
||||
GLIBC_2.27 cacosf64 F
|
||||
GLIBC_2.27 cacoshf32 F
|
||||
GLIBC_2.27 cacoshf32x F
|
||||
GLIBC_2.27 cacoshf64 F
|
||||
GLIBC_2.27 canonicalizef32 F
|
||||
GLIBC_2.27 canonicalizef32x F
|
||||
GLIBC_2.27 canonicalizef64 F
|
||||
GLIBC_2.27 cargf32 F
|
||||
GLIBC_2.27 cargf32x F
|
||||
GLIBC_2.27 cargf64 F
|
||||
GLIBC_2.27 casinf32 F
|
||||
GLIBC_2.27 casinf32x F
|
||||
GLIBC_2.27 casinf64 F
|
||||
GLIBC_2.27 casinhf32 F
|
||||
GLIBC_2.27 casinhf32x F
|
||||
GLIBC_2.27 casinhf64 F
|
||||
GLIBC_2.27 catanf32 F
|
||||
GLIBC_2.27 catanf32x F
|
||||
GLIBC_2.27 catanf64 F
|
||||
GLIBC_2.27 catanhf32 F
|
||||
GLIBC_2.27 catanhf32x F
|
||||
GLIBC_2.27 catanhf64 F
|
||||
GLIBC_2.27 cbrtf32 F
|
||||
GLIBC_2.27 cbrtf32x F
|
||||
GLIBC_2.27 cbrtf64 F
|
||||
GLIBC_2.27 ccosf32 F
|
||||
GLIBC_2.27 ccosf32x F
|
||||
GLIBC_2.27 ccosf64 F
|
||||
GLIBC_2.27 ccoshf32 F
|
||||
GLIBC_2.27 ccoshf32x F
|
||||
GLIBC_2.27 ccoshf64 F
|
||||
GLIBC_2.27 ceilf32 F
|
||||
GLIBC_2.27 ceilf32x F
|
||||
GLIBC_2.27 ceilf64 F
|
||||
GLIBC_2.27 cexpf32 F
|
||||
GLIBC_2.27 cexpf32x F
|
||||
GLIBC_2.27 cexpf64 F
|
||||
GLIBC_2.27 cimagf32 F
|
||||
GLIBC_2.27 cimagf32x F
|
||||
GLIBC_2.27 cimagf64 F
|
||||
GLIBC_2.27 clog10f32 F
|
||||
GLIBC_2.27 clog10f32x F
|
||||
GLIBC_2.27 clog10f64 F
|
||||
GLIBC_2.27 clogf32 F
|
||||
GLIBC_2.27 clogf32x F
|
||||
GLIBC_2.27 clogf64 F
|
||||
GLIBC_2.27 conjf32 F
|
||||
GLIBC_2.27 conjf32x F
|
||||
GLIBC_2.27 conjf64 F
|
||||
GLIBC_2.27 copysignf32 F
|
||||
GLIBC_2.27 copysignf32x F
|
||||
GLIBC_2.27 copysignf64 F
|
||||
GLIBC_2.27 cosf32 F
|
||||
GLIBC_2.27 cosf32x F
|
||||
GLIBC_2.27 cosf64 F
|
||||
GLIBC_2.27 coshf32 F
|
||||
GLIBC_2.27 coshf32x F
|
||||
GLIBC_2.27 coshf64 F
|
||||
GLIBC_2.27 cpowf32 F
|
||||
GLIBC_2.27 cpowf32x F
|
||||
GLIBC_2.27 cpowf64 F
|
||||
GLIBC_2.27 cprojf32 F
|
||||
GLIBC_2.27 cprojf32x F
|
||||
GLIBC_2.27 cprojf64 F
|
||||
GLIBC_2.27 crealf32 F
|
||||
GLIBC_2.27 crealf32x F
|
||||
GLIBC_2.27 crealf64 F
|
||||
GLIBC_2.27 csinf32 F
|
||||
GLIBC_2.27 csinf32x F
|
||||
GLIBC_2.27 csinf64 F
|
||||
GLIBC_2.27 csinhf32 F
|
||||
GLIBC_2.27 csinhf32x F
|
||||
GLIBC_2.27 csinhf64 F
|
||||
GLIBC_2.27 csqrtf32 F
|
||||
GLIBC_2.27 csqrtf32x F
|
||||
GLIBC_2.27 csqrtf64 F
|
||||
GLIBC_2.27 ctanf32 F
|
||||
GLIBC_2.27 ctanf32x F
|
||||
GLIBC_2.27 ctanf64 F
|
||||
GLIBC_2.27 ctanhf32 F
|
||||
GLIBC_2.27 ctanhf32x F
|
||||
GLIBC_2.27 ctanhf64 F
|
||||
GLIBC_2.27 erfcf32 F
|
||||
GLIBC_2.27 erfcf32x F
|
||||
GLIBC_2.27 erfcf64 F
|
||||
GLIBC_2.27 erff32 F
|
||||
GLIBC_2.27 erff32x F
|
||||
GLIBC_2.27 erff64 F
|
||||
GLIBC_2.27 exp10f32 F
|
||||
GLIBC_2.27 exp10f32x F
|
||||
GLIBC_2.27 exp10f64 F
|
||||
GLIBC_2.27 exp2f F
|
||||
GLIBC_2.27 exp2f32 F
|
||||
GLIBC_2.27 exp2f32x F
|
||||
GLIBC_2.27 exp2f64 F
|
||||
GLIBC_2.27 expf F
|
||||
GLIBC_2.27 expf32 F
|
||||
GLIBC_2.27 expf32x F
|
||||
GLIBC_2.27 expf64 F
|
||||
GLIBC_2.27 expm1f32 F
|
||||
GLIBC_2.27 expm1f32x F
|
||||
GLIBC_2.27 expm1f64 F
|
||||
GLIBC_2.27 fabsf32 F
|
||||
GLIBC_2.27 fabsf32x F
|
||||
GLIBC_2.27 fabsf64 F
|
||||
GLIBC_2.27 fdimf32 F
|
||||
GLIBC_2.27 fdimf32x F
|
||||
GLIBC_2.27 fdimf64 F
|
||||
GLIBC_2.27 floorf32 F
|
||||
GLIBC_2.27 floorf32x F
|
||||
GLIBC_2.27 floorf64 F
|
||||
GLIBC_2.27 fmaf32 F
|
||||
GLIBC_2.27 fmaf32x F
|
||||
GLIBC_2.27 fmaf64 F
|
||||
GLIBC_2.27 fmaxf32 F
|
||||
GLIBC_2.27 fmaxf32x F
|
||||
GLIBC_2.27 fmaxf64 F
|
||||
GLIBC_2.27 fmaxmagf32 F
|
||||
GLIBC_2.27 fmaxmagf32x F
|
||||
GLIBC_2.27 fmaxmagf64 F
|
||||
GLIBC_2.27 fminf32 F
|
||||
GLIBC_2.27 fminf32x F
|
||||
GLIBC_2.27 fminf64 F
|
||||
GLIBC_2.27 fminmagf32 F
|
||||
GLIBC_2.27 fminmagf32x F
|
||||
GLIBC_2.27 fminmagf64 F
|
||||
GLIBC_2.27 fmodf32 F
|
||||
GLIBC_2.27 fmodf32x F
|
||||
GLIBC_2.27 fmodf64 F
|
||||
GLIBC_2.27 frexpf32 F
|
||||
GLIBC_2.27 frexpf32x F
|
||||
GLIBC_2.27 frexpf64 F
|
||||
GLIBC_2.27 fromfpf32 F
|
||||
GLIBC_2.27 fromfpf32x F
|
||||
GLIBC_2.27 fromfpf64 F
|
||||
GLIBC_2.27 fromfpxf32 F
|
||||
GLIBC_2.27 fromfpxf32x F
|
||||
GLIBC_2.27 fromfpxf64 F
|
||||
GLIBC_2.27 getpayloadf32 F
|
||||
GLIBC_2.27 getpayloadf32x F
|
||||
GLIBC_2.27 getpayloadf64 F
|
||||
GLIBC_2.27 hypotf32 F
|
||||
GLIBC_2.27 hypotf32x F
|
||||
GLIBC_2.27 hypotf64 F
|
||||
GLIBC_2.27 ilogbf32 F
|
||||
GLIBC_2.27 ilogbf32x F
|
||||
GLIBC_2.27 ilogbf64 F
|
||||
GLIBC_2.27 j0f32 F
|
||||
GLIBC_2.27 j0f32x F
|
||||
GLIBC_2.27 j0f64 F
|
||||
GLIBC_2.27 j1f32 F
|
||||
GLIBC_2.27 j1f32x F
|
||||
GLIBC_2.27 j1f64 F
|
||||
GLIBC_2.27 jnf32 F
|
||||
GLIBC_2.27 jnf32x F
|
||||
GLIBC_2.27 jnf64 F
|
||||
GLIBC_2.27 ldexpf32 F
|
||||
GLIBC_2.27 ldexpf32x F
|
||||
GLIBC_2.27 ldexpf64 F
|
||||
GLIBC_2.27 lgammaf32 F
|
||||
GLIBC_2.27 lgammaf32_r F
|
||||
GLIBC_2.27 lgammaf32x F
|
||||
GLIBC_2.27 lgammaf32x_r F
|
||||
GLIBC_2.27 lgammaf64 F
|
||||
GLIBC_2.27 lgammaf64_r F
|
||||
GLIBC_2.27 llogbf32 F
|
||||
GLIBC_2.27 llogbf32x F
|
||||
GLIBC_2.27 llogbf64 F
|
||||
GLIBC_2.27 llrintf32 F
|
||||
GLIBC_2.27 llrintf32x F
|
||||
GLIBC_2.27 llrintf64 F
|
||||
GLIBC_2.27 llroundf32 F
|
||||
GLIBC_2.27 llroundf32x F
|
||||
GLIBC_2.27 llroundf64 F
|
||||
GLIBC_2.27 log10f32 F
|
||||
GLIBC_2.27 log10f32x F
|
||||
GLIBC_2.27 log10f64 F
|
||||
GLIBC_2.27 log1pf32 F
|
||||
GLIBC_2.27 log1pf32x F
|
||||
GLIBC_2.27 log1pf64 F
|
||||
GLIBC_2.27 log2f F
|
||||
GLIBC_2.27 log2f32 F
|
||||
GLIBC_2.27 log2f32x F
|
||||
GLIBC_2.27 log2f64 F
|
||||
GLIBC_2.27 logbf32 F
|
||||
GLIBC_2.27 logbf32x F
|
||||
GLIBC_2.27 logbf64 F
|
||||
GLIBC_2.27 logf F
|
||||
GLIBC_2.27 logf32 F
|
||||
GLIBC_2.27 logf32x F
|
||||
GLIBC_2.27 logf64 F
|
||||
GLIBC_2.27 lrintf32 F
|
||||
GLIBC_2.27 lrintf32x F
|
||||
GLIBC_2.27 lrintf64 F
|
||||
GLIBC_2.27 lroundf32 F
|
||||
GLIBC_2.27 lroundf32x F
|
||||
GLIBC_2.27 lroundf64 F
|
||||
GLIBC_2.27 modff32 F
|
||||
GLIBC_2.27 modff32x F
|
||||
GLIBC_2.27 modff64 F
|
||||
GLIBC_2.27 nanf32 F
|
||||
GLIBC_2.27 nanf32x F
|
||||
GLIBC_2.27 nanf64 F
|
||||
GLIBC_2.27 nearbyintf32 F
|
||||
GLIBC_2.27 nearbyintf32x F
|
||||
GLIBC_2.27 nearbyintf64 F
|
||||
GLIBC_2.27 nextafterf32 F
|
||||
GLIBC_2.27 nextafterf32x F
|
||||
GLIBC_2.27 nextafterf64 F
|
||||
GLIBC_2.27 nextdownf32 F
|
||||
GLIBC_2.27 nextdownf32x F
|
||||
GLIBC_2.27 nextdownf64 F
|
||||
GLIBC_2.27 nextupf32 F
|
||||
GLIBC_2.27 nextupf32x F
|
||||
GLIBC_2.27 nextupf64 F
|
||||
GLIBC_2.27 powf F
|
||||
GLIBC_2.27 powf32 F
|
||||
GLIBC_2.27 powf32x F
|
||||
GLIBC_2.27 powf64 F
|
||||
GLIBC_2.27 remainderf32 F
|
||||
GLIBC_2.27 remainderf32x F
|
||||
GLIBC_2.27 remainderf64 F
|
||||
GLIBC_2.27 remquof32 F
|
||||
GLIBC_2.27 remquof32x F
|
||||
GLIBC_2.27 remquof64 F
|
||||
GLIBC_2.27 rintf32 F
|
||||
GLIBC_2.27 rintf32x F
|
||||
GLIBC_2.27 rintf64 F
|
||||
GLIBC_2.27 roundevenf32 F
|
||||
GLIBC_2.27 roundevenf32x F
|
||||
GLIBC_2.27 roundevenf64 F
|
||||
GLIBC_2.27 roundf32 F
|
||||
GLIBC_2.27 roundf32x F
|
||||
GLIBC_2.27 roundf64 F
|
||||
GLIBC_2.27 scalblnf32 F
|
||||
GLIBC_2.27 scalblnf32x F
|
||||
GLIBC_2.27 scalblnf64 F
|
||||
GLIBC_2.27 scalbnf32 F
|
||||
GLIBC_2.27 scalbnf32x F
|
||||
GLIBC_2.27 scalbnf64 F
|
||||
GLIBC_2.27 setpayloadf32 F
|
||||
GLIBC_2.27 setpayloadf32x F
|
||||
GLIBC_2.27 setpayloadf64 F
|
||||
GLIBC_2.27 setpayloadsigf32 F
|
||||
GLIBC_2.27 setpayloadsigf32x F
|
||||
GLIBC_2.27 setpayloadsigf64 F
|
||||
GLIBC_2.27 sincosf32 F
|
||||
GLIBC_2.27 sincosf32x F
|
||||
GLIBC_2.27 sincosf64 F
|
||||
GLIBC_2.27 sinf32 F
|
||||
GLIBC_2.27 sinf32x F
|
||||
GLIBC_2.27 sinf64 F
|
||||
GLIBC_2.27 sinhf32 F
|
||||
GLIBC_2.27 sinhf32x F
|
||||
GLIBC_2.27 sinhf64 F
|
||||
GLIBC_2.27 sqrtf32 F
|
||||
GLIBC_2.27 sqrtf32x F
|
||||
GLIBC_2.27 sqrtf64 F
|
||||
GLIBC_2.27 tanf32 F
|
||||
GLIBC_2.27 tanf32x F
|
||||
GLIBC_2.27 tanf64 F
|
||||
GLIBC_2.27 tanhf32 F
|
||||
GLIBC_2.27 tanhf32x F
|
||||
GLIBC_2.27 tanhf64 F
|
||||
GLIBC_2.27 tgammaf32 F
|
||||
GLIBC_2.27 tgammaf32x F
|
||||
GLIBC_2.27 tgammaf64 F
|
||||
GLIBC_2.27 totalorderf32 F
|
||||
GLIBC_2.27 totalorderf32x F
|
||||
GLIBC_2.27 totalorderf64 F
|
||||
GLIBC_2.27 totalordermagf32 F
|
||||
GLIBC_2.27 totalordermagf32x F
|
||||
GLIBC_2.27 totalordermagf64 F
|
||||
GLIBC_2.27 truncf32 F
|
||||
GLIBC_2.27 truncf32x F
|
||||
GLIBC_2.27 truncf64 F
|
||||
GLIBC_2.27 ufromfpf32 F
|
||||
GLIBC_2.27 ufromfpf32x F
|
||||
GLIBC_2.27 ufromfpf64 F
|
||||
GLIBC_2.27 ufromfpxf32 F
|
||||
GLIBC_2.27 ufromfpxf32x F
|
||||
GLIBC_2.27 ufromfpxf64 F
|
||||
GLIBC_2.27 y0f32 F
|
||||
GLIBC_2.27 y0f32x F
|
||||
GLIBC_2.27 y0f64 F
|
||||
GLIBC_2.27 y1f32 F
|
||||
GLIBC_2.27 y1f32x F
|
||||
GLIBC_2.27 y1f64 F
|
||||
GLIBC_2.27 ynf32 F
|
||||
GLIBC_2.27 ynf32x F
|
||||
GLIBC_2.27 ynf64 F
|
@ -1,122 +0,0 @@
|
||||
GLIBC_2.12 GLIBC_2.12 A
|
||||
GLIBC_2.12 __free_fdresult F
|
||||
GLIBC_2.12 __nis_default_access F
|
||||
GLIBC_2.12 __nis_default_group F
|
||||
GLIBC_2.12 __nis_default_owner F
|
||||
GLIBC_2.12 __nis_default_ttl F
|
||||
GLIBC_2.12 __nis_finddirectory F
|
||||
GLIBC_2.12 __nis_hash F
|
||||
GLIBC_2.12 __nisbind_connect F
|
||||
GLIBC_2.12 __nisbind_create F
|
||||
GLIBC_2.12 __nisbind_destroy F
|
||||
GLIBC_2.12 __nisbind_next F
|
||||
GLIBC_2.12 __yp_check F
|
||||
GLIBC_2.12 nis_add F
|
||||
GLIBC_2.12 nis_add_entry F
|
||||
GLIBC_2.12 nis_addmember F
|
||||
GLIBC_2.12 nis_checkpoint F
|
||||
GLIBC_2.12 nis_clone_directory F
|
||||
GLIBC_2.12 nis_clone_object F
|
||||
GLIBC_2.12 nis_clone_result F
|
||||
GLIBC_2.12 nis_creategroup F
|
||||
GLIBC_2.12 nis_destroy_object F
|
||||
GLIBC_2.12 nis_destroygroup F
|
||||
GLIBC_2.12 nis_dir_cmp F
|
||||
GLIBC_2.12 nis_domain_of F
|
||||
GLIBC_2.12 nis_domain_of_r F
|
||||
GLIBC_2.12 nis_first_entry F
|
||||
GLIBC_2.12 nis_free_directory F
|
||||
GLIBC_2.12 nis_free_object F
|
||||
GLIBC_2.12 nis_free_request F
|
||||
GLIBC_2.12 nis_freenames F
|
||||
GLIBC_2.12 nis_freeresult F
|
||||
GLIBC_2.12 nis_freeservlist F
|
||||
GLIBC_2.12 nis_freetags F
|
||||
GLIBC_2.12 nis_getnames F
|
||||
GLIBC_2.12 nis_getservlist F
|
||||
GLIBC_2.12 nis_ismember F
|
||||
GLIBC_2.12 nis_leaf_of F
|
||||
GLIBC_2.12 nis_leaf_of_r F
|
||||
GLIBC_2.12 nis_lerror F
|
||||
GLIBC_2.12 nis_list F
|
||||
GLIBC_2.12 nis_local_directory F
|
||||
GLIBC_2.12 nis_local_group F
|
||||
GLIBC_2.12 nis_local_host F
|
||||
GLIBC_2.12 nis_local_principal F
|
||||
GLIBC_2.12 nis_lookup F
|
||||
GLIBC_2.12 nis_mkdir F
|
||||
GLIBC_2.12 nis_modify F
|
||||
GLIBC_2.12 nis_modify_entry F
|
||||
GLIBC_2.12 nis_name_of F
|
||||
GLIBC_2.12 nis_name_of_r F
|
||||
GLIBC_2.12 nis_next_entry F
|
||||
GLIBC_2.12 nis_perror F
|
||||
GLIBC_2.12 nis_ping F
|
||||
GLIBC_2.12 nis_print_directory F
|
||||
GLIBC_2.12 nis_print_entry F
|
||||
GLIBC_2.12 nis_print_group F
|
||||
GLIBC_2.12 nis_print_group_entry F
|
||||
GLIBC_2.12 nis_print_link F
|
||||
GLIBC_2.12 nis_print_object F
|
||||
GLIBC_2.12 nis_print_result F
|
||||
GLIBC_2.12 nis_print_rights F
|
||||
GLIBC_2.12 nis_print_table F
|
||||
GLIBC_2.12 nis_read_obj F
|
||||
GLIBC_2.12 nis_remove F
|
||||
GLIBC_2.12 nis_remove_entry F
|
||||
GLIBC_2.12 nis_removemember F
|
||||
GLIBC_2.12 nis_rmdir F
|
||||
GLIBC_2.12 nis_servstate F
|
||||
GLIBC_2.12 nis_sperrno F
|
||||
GLIBC_2.12 nis_sperror F
|
||||
GLIBC_2.12 nis_sperror_r F
|
||||
GLIBC_2.12 nis_stats F
|
||||
GLIBC_2.12 nis_verifygroup F
|
||||
GLIBC_2.12 nis_write_obj F
|
||||
GLIBC_2.12 readColdStartFile F
|
||||
GLIBC_2.12 writeColdStartFile F
|
||||
GLIBC_2.12 xdr_cback_data F
|
||||
GLIBC_2.12 xdr_domainname F
|
||||
GLIBC_2.12 xdr_keydat F
|
||||
GLIBC_2.12 xdr_mapname F
|
||||
GLIBC_2.12 xdr_obj_p F
|
||||
GLIBC_2.12 xdr_peername F
|
||||
GLIBC_2.12 xdr_valdat F
|
||||
GLIBC_2.12 xdr_yp_buf F
|
||||
GLIBC_2.12 xdr_ypall F
|
||||
GLIBC_2.12 xdr_ypbind_binding F
|
||||
GLIBC_2.12 xdr_ypbind_resp F
|
||||
GLIBC_2.12 xdr_ypbind_resptype F
|
||||
GLIBC_2.12 xdr_ypbind_setdom F
|
||||
GLIBC_2.12 xdr_ypdelete_args F
|
||||
GLIBC_2.12 xdr_ypmap_parms F
|
||||
GLIBC_2.12 xdr_ypmaplist F
|
||||
GLIBC_2.12 xdr_yppush_status F
|
||||
GLIBC_2.12 xdr_yppushresp_xfr F
|
||||
GLIBC_2.12 xdr_ypreq_key F
|
||||
GLIBC_2.12 xdr_ypreq_nokey F
|
||||
GLIBC_2.12 xdr_ypreq_xfr F
|
||||
GLIBC_2.12 xdr_ypresp_all F
|
||||
GLIBC_2.12 xdr_ypresp_key_val F
|
||||
GLIBC_2.12 xdr_ypresp_maplist F
|
||||
GLIBC_2.12 xdr_ypresp_master F
|
||||
GLIBC_2.12 xdr_ypresp_order F
|
||||
GLIBC_2.12 xdr_ypresp_val F
|
||||
GLIBC_2.12 xdr_ypresp_xfr F
|
||||
GLIBC_2.12 xdr_ypstat F
|
||||
GLIBC_2.12 xdr_ypupdate_args F
|
||||
GLIBC_2.12 xdr_ypxfrstat F
|
||||
GLIBC_2.12 yp_all F
|
||||
GLIBC_2.12 yp_bind F
|
||||
GLIBC_2.12 yp_first F
|
||||
GLIBC_2.12 yp_get_default_domain F
|
||||
GLIBC_2.12 yp_maplist F
|
||||
GLIBC_2.12 yp_master F
|
||||
GLIBC_2.12 yp_match F
|
||||
GLIBC_2.12 yp_next F
|
||||
GLIBC_2.12 yp_order F
|
||||
GLIBC_2.12 yp_unbind F
|
||||
GLIBC_2.12 yp_update F
|
||||
GLIBC_2.12 ypbinderr_string F
|
||||
GLIBC_2.12 yperr_string F
|
||||
GLIBC_2.12 ypprot_err F
|
@ -1,226 +0,0 @@
|
||||
GLIBC_2.12 GLIBC_2.12 A
|
||||
GLIBC_2.12 _IO_flockfile F
|
||||
GLIBC_2.12 _IO_ftrylockfile F
|
||||
GLIBC_2.12 _IO_funlockfile F
|
||||
GLIBC_2.12 __close F
|
||||
GLIBC_2.12 __connect F
|
||||
GLIBC_2.12 __errno_location F
|
||||
GLIBC_2.12 __fcntl F
|
||||
GLIBC_2.12 __fork F
|
||||
GLIBC_2.12 __h_errno_location F
|
||||
GLIBC_2.12 __libc_allocate_rtsig F
|
||||
GLIBC_2.12 __libc_current_sigrtmax F
|
||||
GLIBC_2.12 __libc_current_sigrtmin F
|
||||
GLIBC_2.12 __lseek F
|
||||
GLIBC_2.12 __nanosleep F
|
||||
GLIBC_2.12 __open F
|
||||
GLIBC_2.12 __open64 F
|
||||
GLIBC_2.12 __pread64 F
|
||||
GLIBC_2.12 __pthread_cleanup_routine F
|
||||
GLIBC_2.12 __pthread_getspecific F
|
||||
GLIBC_2.12 __pthread_key_create F
|
||||
GLIBC_2.12 __pthread_mutex_destroy F
|
||||
GLIBC_2.12 __pthread_mutex_init F
|
||||
GLIBC_2.12 __pthread_mutex_lock F
|
||||
GLIBC_2.12 __pthread_mutex_trylock F
|
||||
GLIBC_2.12 __pthread_mutex_unlock F
|
||||
GLIBC_2.12 __pthread_mutexattr_destroy F
|
||||
GLIBC_2.12 __pthread_mutexattr_init F
|
||||
GLIBC_2.12 __pthread_mutexattr_settype F
|
||||
GLIBC_2.12 __pthread_once F
|
||||
GLIBC_2.12 __pthread_register_cancel F
|
||||
GLIBC_2.12 __pthread_register_cancel_defer F
|
||||
GLIBC_2.12 __pthread_rwlock_destroy F
|
||||
GLIBC_2.12 __pthread_rwlock_init F
|
||||
GLIBC_2.12 __pthread_rwlock_rdlock F
|
||||
GLIBC_2.12 __pthread_rwlock_tryrdlock F
|
||||
GLIBC_2.12 __pthread_rwlock_trywrlock F
|
||||
GLIBC_2.12 __pthread_rwlock_unlock F
|
||||
GLIBC_2.12 __pthread_rwlock_wrlock F
|
||||
GLIBC_2.12 __pthread_setspecific F
|
||||
GLIBC_2.12 __pthread_unregister_cancel F
|
||||
GLIBC_2.12 __pthread_unregister_cancel_restore F
|
||||
GLIBC_2.12 __pthread_unwind_next F
|
||||
GLIBC_2.12 __pwrite64 F
|
||||
GLIBC_2.12 __read F
|
||||
GLIBC_2.12 __res_state F
|
||||
GLIBC_2.12 __send F
|
||||
GLIBC_2.12 __sigaction F
|
||||
GLIBC_2.12 __vfork F
|
||||
GLIBC_2.12 __wait F
|
||||
GLIBC_2.12 __write F
|
||||
GLIBC_2.12 _pthread_cleanup_pop F
|
||||
GLIBC_2.12 _pthread_cleanup_pop_restore F
|
||||
GLIBC_2.12 _pthread_cleanup_push F
|
||||
GLIBC_2.12 _pthread_cleanup_push_defer F
|
||||
GLIBC_2.12 accept F
|
||||
GLIBC_2.12 close F
|
||||
GLIBC_2.12 connect F
|
||||
GLIBC_2.12 fcntl F
|
||||
GLIBC_2.12 flockfile F
|
||||
GLIBC_2.12 fork F
|
||||
GLIBC_2.12 fsync F
|
||||
GLIBC_2.12 ftrylockfile F
|
||||
GLIBC_2.12 funlockfile F
|
||||
GLIBC_2.12 longjmp F
|
||||
GLIBC_2.12 lseek F
|
||||
GLIBC_2.12 lseek64 F
|
||||
GLIBC_2.12 msync F
|
||||
GLIBC_2.12 nanosleep F
|
||||
GLIBC_2.12 open F
|
||||
GLIBC_2.12 open64 F
|
||||
GLIBC_2.12 pause F
|
||||
GLIBC_2.12 pread F
|
||||
GLIBC_2.12 pread64 F
|
||||
GLIBC_2.12 pthread_attr_destroy F
|
||||
GLIBC_2.12 pthread_attr_getaffinity_np F
|
||||
GLIBC_2.12 pthread_attr_getdetachstate F
|
||||
GLIBC_2.12 pthread_attr_getguardsize F
|
||||
GLIBC_2.12 pthread_attr_getinheritsched F
|
||||
GLIBC_2.12 pthread_attr_getschedparam F
|
||||
GLIBC_2.12 pthread_attr_getschedpolicy F
|
||||
GLIBC_2.12 pthread_attr_getscope F
|
||||
GLIBC_2.12 pthread_attr_getstack F
|
||||
GLIBC_2.12 pthread_attr_getstackaddr F
|
||||
GLIBC_2.12 pthread_attr_getstacksize F
|
||||
GLIBC_2.12 pthread_attr_init F
|
||||
GLIBC_2.12 pthread_attr_setaffinity_np F
|
||||
GLIBC_2.12 pthread_attr_setdetachstate F
|
||||
GLIBC_2.12 pthread_attr_setguardsize F
|
||||
GLIBC_2.12 pthread_attr_setinheritsched F
|
||||
GLIBC_2.12 pthread_attr_setschedparam F
|
||||
GLIBC_2.12 pthread_attr_setschedpolicy F
|
||||
GLIBC_2.12 pthread_attr_setscope F
|
||||
GLIBC_2.12 pthread_attr_setstack F
|
||||
GLIBC_2.12 pthread_attr_setstackaddr F
|
||||
GLIBC_2.12 pthread_attr_setstacksize F
|
||||
GLIBC_2.12 pthread_barrier_destroy F
|
||||
GLIBC_2.12 pthread_barrier_init F
|
||||
GLIBC_2.12 pthread_barrier_wait F
|
||||
GLIBC_2.12 pthread_barrierattr_destroy F
|
||||
GLIBC_2.12 pthread_barrierattr_getpshared F
|
||||
GLIBC_2.12 pthread_barrierattr_init F
|
||||
GLIBC_2.12 pthread_barrierattr_setpshared F
|
||||
GLIBC_2.12 pthread_cancel F
|
||||
GLIBC_2.12 pthread_cond_broadcast F
|
||||
GLIBC_2.12 pthread_cond_destroy F
|
||||
GLIBC_2.12 pthread_cond_init F
|
||||
GLIBC_2.12 pthread_cond_signal F
|
||||
GLIBC_2.12 pthread_cond_timedwait F
|
||||
GLIBC_2.12 pthread_cond_wait F
|
||||
GLIBC_2.12 pthread_condattr_destroy F
|
||||
GLIBC_2.12 pthread_condattr_getclock F
|
||||
GLIBC_2.12 pthread_condattr_getpshared F
|
||||
GLIBC_2.12 pthread_condattr_init F
|
||||
GLIBC_2.12 pthread_condattr_setclock F
|
||||
GLIBC_2.12 pthread_condattr_setpshared F
|
||||
GLIBC_2.12 pthread_create F
|
||||
GLIBC_2.12 pthread_detach F
|
||||
GLIBC_2.12 pthread_equal F
|
||||
GLIBC_2.12 pthread_exit F
|
||||
GLIBC_2.12 pthread_getaffinity_np F
|
||||
GLIBC_2.12 pthread_getattr_np F
|
||||
GLIBC_2.12 pthread_getconcurrency F
|
||||
GLIBC_2.12 pthread_getcpuclockid F
|
||||
GLIBC_2.12 pthread_getname_np F
|
||||
GLIBC_2.12 pthread_getschedparam F
|
||||
GLIBC_2.12 pthread_getspecific F
|
||||
GLIBC_2.12 pthread_join F
|
||||
GLIBC_2.12 pthread_key_create F
|
||||
GLIBC_2.12 pthread_key_delete F
|
||||
GLIBC_2.12 pthread_kill F
|
||||
GLIBC_2.12 pthread_kill_other_threads_np F
|
||||
GLIBC_2.12 pthread_mutex_consistent F
|
||||
GLIBC_2.12 pthread_mutex_consistent_np F
|
||||
GLIBC_2.12 pthread_mutex_destroy F
|
||||
GLIBC_2.12 pthread_mutex_getprioceiling F
|
||||
GLIBC_2.12 pthread_mutex_init F
|
||||
GLIBC_2.12 pthread_mutex_lock F
|
||||
GLIBC_2.12 pthread_mutex_setprioceiling F
|
||||
GLIBC_2.12 pthread_mutex_timedlock F
|
||||
GLIBC_2.12 pthread_mutex_trylock F
|
||||
GLIBC_2.12 pthread_mutex_unlock F
|
||||
GLIBC_2.12 pthread_mutexattr_destroy F
|
||||
GLIBC_2.12 pthread_mutexattr_getkind_np F
|
||||
GLIBC_2.12 pthread_mutexattr_getprioceiling F
|
||||
GLIBC_2.12 pthread_mutexattr_getprotocol F
|
||||
GLIBC_2.12 pthread_mutexattr_getpshared F
|
||||
GLIBC_2.12 pthread_mutexattr_getrobust F
|
||||
GLIBC_2.12 pthread_mutexattr_getrobust_np F
|
||||
GLIBC_2.12 pthread_mutexattr_gettype F
|
||||
GLIBC_2.12 pthread_mutexattr_init F
|
||||
GLIBC_2.12 pthread_mutexattr_setkind_np F
|
||||
GLIBC_2.12 pthread_mutexattr_setprioceiling F
|
||||
GLIBC_2.12 pthread_mutexattr_setprotocol F
|
||||
GLIBC_2.12 pthread_mutexattr_setpshared F
|
||||
GLIBC_2.12 pthread_mutexattr_setrobust F
|
||||
GLIBC_2.12 pthread_mutexattr_setrobust_np F
|
||||
GLIBC_2.12 pthread_mutexattr_settype F
|
||||
GLIBC_2.12 pthread_once F
|
||||
GLIBC_2.12 pthread_rwlock_destroy F
|
||||
GLIBC_2.12 pthread_rwlock_init F
|
||||
GLIBC_2.12 pthread_rwlock_rdlock F
|
||||
GLIBC_2.12 pthread_rwlock_timedrdlock F
|
||||
GLIBC_2.12 pthread_rwlock_timedwrlock F
|
||||
GLIBC_2.12 pthread_rwlock_tryrdlock F
|
||||
GLIBC_2.12 pthread_rwlock_trywrlock F
|
||||
GLIBC_2.12 pthread_rwlock_unlock F
|
||||
GLIBC_2.12 pthread_rwlock_wrlock F
|
||||
GLIBC_2.12 pthread_rwlockattr_destroy F
|
||||
GLIBC_2.12 pthread_rwlockattr_getkind_np F
|
||||
GLIBC_2.12 pthread_rwlockattr_getpshared F
|
||||
GLIBC_2.12 pthread_rwlockattr_init F
|
||||
GLIBC_2.12 pthread_rwlockattr_setkind_np F
|
||||
GLIBC_2.12 pthread_rwlockattr_setpshared F
|
||||
GLIBC_2.12 pthread_self F
|
||||
GLIBC_2.12 pthread_setaffinity_np F
|
||||
GLIBC_2.12 pthread_setcancelstate F
|
||||
GLIBC_2.12 pthread_setcanceltype F
|
||||
GLIBC_2.12 pthread_setconcurrency F
|
||||
GLIBC_2.12 pthread_setname_np F
|
||||
GLIBC_2.12 pthread_setschedparam F
|
||||
GLIBC_2.12 pthread_setschedprio F
|
||||
GLIBC_2.12 pthread_setspecific F
|
||||
GLIBC_2.12 pthread_sigmask F
|
||||
GLIBC_2.12 pthread_sigqueue F
|
||||
GLIBC_2.12 pthread_spin_destroy F
|
||||
GLIBC_2.12 pthread_spin_init F
|
||||
GLIBC_2.12 pthread_spin_lock F
|
||||
GLIBC_2.12 pthread_spin_trylock F
|
||||
GLIBC_2.12 pthread_spin_unlock F
|
||||
GLIBC_2.12 pthread_testcancel F
|
||||
GLIBC_2.12 pthread_timedjoin_np F
|
||||
GLIBC_2.12 pthread_tryjoin_np F
|
||||
GLIBC_2.12 pthread_yield F
|
||||
GLIBC_2.12 pwrite F
|
||||
GLIBC_2.12 pwrite64 F
|
||||
GLIBC_2.12 raise F
|
||||
GLIBC_2.12 read F
|
||||
GLIBC_2.12 recv F
|
||||
GLIBC_2.12 recvfrom F
|
||||
GLIBC_2.12 recvmsg F
|
||||
GLIBC_2.12 sem_close F
|
||||
GLIBC_2.12 sem_destroy F
|
||||
GLIBC_2.12 sem_getvalue F
|
||||
GLIBC_2.12 sem_init F
|
||||
GLIBC_2.12 sem_open F
|
||||
GLIBC_2.12 sem_post F
|
||||
GLIBC_2.12 sem_timedwait F
|
||||
GLIBC_2.12 sem_trywait F
|
||||
GLIBC_2.12 sem_unlink F
|
||||
GLIBC_2.12 sem_wait F
|
||||
GLIBC_2.12 send F
|
||||
GLIBC_2.12 sendmsg F
|
||||
GLIBC_2.12 sendto F
|
||||
GLIBC_2.12 sigaction F
|
||||
GLIBC_2.12 siglongjmp F
|
||||
GLIBC_2.12 sigwait F
|
||||
GLIBC_2.12 system F
|
||||
GLIBC_2.12 tcdrain F
|
||||
GLIBC_2.12 vfork F
|
||||
GLIBC_2.12 wait F
|
||||
GLIBC_2.12 waitpid F
|
||||
GLIBC_2.12 write F
|
||||
GLIBC_2.18 GLIBC_2.18 A
|
||||
GLIBC_2.18 pthread_getattr_default_np F
|
||||
GLIBC_2.18 pthread_setattr_default_np F
|
@ -1,92 +0,0 @@
|
||||
GLIBC_2.12 GLIBC_2.12 A
|
||||
GLIBC_2.12 __b64_ntop F
|
||||
GLIBC_2.12 __b64_pton F
|
||||
GLIBC_2.12 __dn_comp F
|
||||
GLIBC_2.12 __dn_count_labels F
|
||||
GLIBC_2.12 __dn_expand F
|
||||
GLIBC_2.12 __dn_skipname F
|
||||
GLIBC_2.12 __fp_nquery F
|
||||
GLIBC_2.12 __fp_query F
|
||||
GLIBC_2.12 __fp_resstat F
|
||||
GLIBC_2.12 __hostalias F
|
||||
GLIBC_2.12 __loc_aton F
|
||||
GLIBC_2.12 __loc_ntoa F
|
||||
GLIBC_2.12 __p_cdname F
|
||||
GLIBC_2.12 __p_cdnname F
|
||||
GLIBC_2.12 __p_class F
|
||||
GLIBC_2.12 __p_class_syms D 0x54
|
||||
GLIBC_2.12 __p_fqname F
|
||||
GLIBC_2.12 __p_fqnname F
|
||||
GLIBC_2.12 __p_option F
|
||||
GLIBC_2.12 __p_query F
|
||||
GLIBC_2.12 __p_rcode F
|
||||
GLIBC_2.12 __p_secstodate F
|
||||
GLIBC_2.12 __p_time F
|
||||
GLIBC_2.12 __p_type F
|
||||
GLIBC_2.12 __p_type_syms D 0x228
|
||||
GLIBC_2.12 __putlong F
|
||||
GLIBC_2.12 __putshort F
|
||||
GLIBC_2.12 __res_close F
|
||||
GLIBC_2.12 __res_dnok F
|
||||
GLIBC_2.12 __res_hnok F
|
||||
GLIBC_2.12 __res_hostalias F
|
||||
GLIBC_2.12 __res_isourserver F
|
||||
GLIBC_2.12 __res_mailok F
|
||||
GLIBC_2.12 __res_mkquery F
|
||||
GLIBC_2.12 __res_nameinquery F
|
||||
GLIBC_2.12 __res_nmkquery F
|
||||
GLIBC_2.12 __res_nquery F
|
||||
GLIBC_2.12 __res_nquerydomain F
|
||||
GLIBC_2.12 __res_nsearch F
|
||||
GLIBC_2.12 __res_nsend F
|
||||
GLIBC_2.12 __res_ownok F
|
||||
GLIBC_2.12 __res_queriesmatch F
|
||||
GLIBC_2.12 __res_query F
|
||||
GLIBC_2.12 __res_querydomain F
|
||||
GLIBC_2.12 __res_search F
|
||||
GLIBC_2.12 __res_send F
|
||||
GLIBC_2.12 __sym_ntop F
|
||||
GLIBC_2.12 __sym_ntos F
|
||||
GLIBC_2.12 __sym_ston F
|
||||
GLIBC_2.12 _gethtbyaddr F
|
||||
GLIBC_2.12 _gethtbyname F
|
||||
GLIBC_2.12 _gethtbyname2 F
|
||||
GLIBC_2.12 _gethtent F
|
||||
GLIBC_2.12 _getlong F
|
||||
GLIBC_2.12 _getshort F
|
||||
GLIBC_2.12 _res_opcodes D 0x40
|
||||
GLIBC_2.12 _sethtent F
|
||||
GLIBC_2.12 inet_net_ntop F
|
||||
GLIBC_2.12 inet_net_pton F
|
||||
GLIBC_2.12 inet_neta F
|
||||
GLIBC_2.12 ns_datetosecs F
|
||||
GLIBC_2.12 ns_format_ttl F
|
||||
GLIBC_2.12 ns_get16 F
|
||||
GLIBC_2.12 ns_get32 F
|
||||
GLIBC_2.12 ns_initparse F
|
||||
GLIBC_2.12 ns_makecanon F
|
||||
GLIBC_2.12 ns_msg_getflag F
|
||||
GLIBC_2.12 ns_name_compress F
|
||||
GLIBC_2.12 ns_name_ntol F
|
||||
GLIBC_2.12 ns_name_ntop F
|
||||
GLIBC_2.12 ns_name_pack F
|
||||
GLIBC_2.12 ns_name_pton F
|
||||
GLIBC_2.12 ns_name_rollback F
|
||||
GLIBC_2.12 ns_name_skip F
|
||||
GLIBC_2.12 ns_name_uncompress F
|
||||
GLIBC_2.12 ns_name_unpack F
|
||||
GLIBC_2.12 ns_parse_ttl F
|
||||
GLIBC_2.12 ns_parserr F
|
||||
GLIBC_2.12 ns_put16 F
|
||||
GLIBC_2.12 ns_put32 F
|
||||
GLIBC_2.12 ns_samedomain F
|
||||
GLIBC_2.12 ns_samename F
|
||||
GLIBC_2.12 ns_skiprr F
|
||||
GLIBC_2.12 ns_sprintrr F
|
||||
GLIBC_2.12 ns_sprintrrf F
|
||||
GLIBC_2.12 ns_subdomain F
|
||||
GLIBC_2.12 res_gethostbyaddr F
|
||||
GLIBC_2.12 res_gethostbyname F
|
||||
GLIBC_2.12 res_gethostbyname2 F
|
||||
GLIBC_2.12 res_send_setqhook F
|
||||
GLIBC_2.12 res_send_setrhook F
|
@ -1,41 +0,0 @@
|
||||
GLIBC_2.12 GLIBC_2.12 A
|
||||
GLIBC_2.12 __mq_open_2 F
|
||||
GLIBC_2.12 aio_cancel F
|
||||
GLIBC_2.12 aio_cancel64 F
|
||||
GLIBC_2.12 aio_error F
|
||||
GLIBC_2.12 aio_error64 F
|
||||
GLIBC_2.12 aio_fsync F
|
||||
GLIBC_2.12 aio_fsync64 F
|
||||
GLIBC_2.12 aio_init F
|
||||
GLIBC_2.12 aio_read F
|
||||
GLIBC_2.12 aio_read64 F
|
||||
GLIBC_2.12 aio_return F
|
||||
GLIBC_2.12 aio_return64 F
|
||||
GLIBC_2.12 aio_suspend F
|
||||
GLIBC_2.12 aio_suspend64 F
|
||||
GLIBC_2.12 aio_write F
|
||||
GLIBC_2.12 aio_write64 F
|
||||
GLIBC_2.12 clock_getcpuclockid F
|
||||
GLIBC_2.12 clock_getres F
|
||||
GLIBC_2.12 clock_gettime F
|
||||
GLIBC_2.12 clock_nanosleep F
|
||||
GLIBC_2.12 clock_settime F
|
||||
GLIBC_2.12 lio_listio F
|
||||
GLIBC_2.12 lio_listio64 F
|
||||
GLIBC_2.12 mq_close F
|
||||
GLIBC_2.12 mq_getattr F
|
||||
GLIBC_2.12 mq_notify F
|
||||
GLIBC_2.12 mq_open F
|
||||
GLIBC_2.12 mq_receive F
|
||||
GLIBC_2.12 mq_send F
|
||||
GLIBC_2.12 mq_setattr F
|
||||
GLIBC_2.12 mq_timedreceive F
|
||||
GLIBC_2.12 mq_timedsend F
|
||||
GLIBC_2.12 mq_unlink F
|
||||
GLIBC_2.12 shm_open F
|
||||
GLIBC_2.12 shm_unlink F
|
||||
GLIBC_2.12 timer_create F
|
||||
GLIBC_2.12 timer_delete F
|
||||
GLIBC_2.12 timer_getoverrun F
|
||||
GLIBC_2.12 timer_gettime F
|
||||
GLIBC_2.12 timer_settime F
|
@ -1,41 +0,0 @@
|
||||
GLIBC_2.12 GLIBC_2.12 A
|
||||
GLIBC_2.12 td_init F
|
||||
GLIBC_2.12 td_log F
|
||||
GLIBC_2.12 td_symbol_list F
|
||||
GLIBC_2.12 td_ta_clear_event F
|
||||
GLIBC_2.12 td_ta_delete F
|
||||
GLIBC_2.12 td_ta_enable_stats F
|
||||
GLIBC_2.12 td_ta_event_addr F
|
||||
GLIBC_2.12 td_ta_event_getmsg F
|
||||
GLIBC_2.12 td_ta_get_nthreads F
|
||||
GLIBC_2.12 td_ta_get_ph F
|
||||
GLIBC_2.12 td_ta_get_stats F
|
||||
GLIBC_2.12 td_ta_map_id2thr F
|
||||
GLIBC_2.12 td_ta_map_lwp2thr F
|
||||
GLIBC_2.12 td_ta_new F
|
||||
GLIBC_2.12 td_ta_reset_stats F
|
||||
GLIBC_2.12 td_ta_set_event F
|
||||
GLIBC_2.12 td_ta_setconcurrency F
|
||||
GLIBC_2.12 td_ta_thr_iter F
|
||||
GLIBC_2.12 td_ta_tsd_iter F
|
||||
GLIBC_2.12 td_thr_clear_event F
|
||||
GLIBC_2.12 td_thr_dbresume F
|
||||
GLIBC_2.12 td_thr_dbsuspend F
|
||||
GLIBC_2.12 td_thr_event_enable F
|
||||
GLIBC_2.12 td_thr_event_getmsg F
|
||||
GLIBC_2.12 td_thr_get_info F
|
||||
GLIBC_2.12 td_thr_getfpregs F
|
||||
GLIBC_2.12 td_thr_getgregs F
|
||||
GLIBC_2.12 td_thr_getxregs F
|
||||
GLIBC_2.12 td_thr_getxregsize F
|
||||
GLIBC_2.12 td_thr_set_event F
|
||||
GLIBC_2.12 td_thr_setfpregs F
|
||||
GLIBC_2.12 td_thr_setgregs F
|
||||
GLIBC_2.12 td_thr_setprio F
|
||||
GLIBC_2.12 td_thr_setsigpending F
|
||||
GLIBC_2.12 td_thr_setxregs F
|
||||
GLIBC_2.12 td_thr_sigsetmask F
|
||||
GLIBC_2.12 td_thr_tls_get_addr F
|
||||
GLIBC_2.12 td_thr_tlsbase F
|
||||
GLIBC_2.12 td_thr_tsd F
|
||||
GLIBC_2.12 td_thr_validate F
|
@ -1,7 +0,0 @@
|
||||
GLIBC_2.12 GLIBC_2.12 A
|
||||
GLIBC_2.12 forkpty F
|
||||
GLIBC_2.12 login F
|
||||
GLIBC_2.12 login_tty F
|
||||
GLIBC_2.12 logout F
|
||||
GLIBC_2.12 logwtmp F
|
||||
GLIBC_2.12 openpty F
|
@ -1,111 +0,0 @@
|
||||
/* Copyright (C) 2011-2017 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Chris Metcalf <cmetcalf@tilera.com>, 2011.
|
||||
Based on work contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
|
||||
|
||||
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
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <sys/uio.h>
|
||||
#include <_itoa.h>
|
||||
|
||||
/* We will print the register dump in this format:
|
||||
|
||||
R0: XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX
|
||||
R8: XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX
|
||||
R16: XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX
|
||||
R24: XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX
|
||||
R32: XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX
|
||||
R40: XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX
|
||||
R48: XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX
|
||||
R52: XXXXXXXX TP: XXXXXXXX SP: XXXXXXXX LR: XXXXXXXX
|
||||
|
||||
PC: XXXXXXXX ICS: X FAULTNUM: XX
|
||||
|
||||
*/
|
||||
|
||||
static void
|
||||
hexvalue (unsigned long int value, char *buf, size_t len)
|
||||
{
|
||||
char *cp = _itoa_word (value, buf + len, 16, 0);
|
||||
while (cp > buf)
|
||||
*--cp = '0';
|
||||
}
|
||||
|
||||
static void
|
||||
register_dump (int fd, mcontext_t *ctx)
|
||||
{
|
||||
char regs[59][8];
|
||||
struct iovec iov[143];
|
||||
size_t nr = 0;
|
||||
unsigned int i;
|
||||
|
||||
#define ADD_STRING(str) \
|
||||
iov[nr].iov_base = (char *) str; \
|
||||
iov[nr].iov_len = strlen (str); \
|
||||
++nr
|
||||
#define ADD_MEM(str, len) \
|
||||
iov[nr].iov_base = str; \
|
||||
iov[nr].iov_len = len; \
|
||||
++nr
|
||||
|
||||
/* Generate strings of register contents. */
|
||||
for (i = 0; i < 56; ++i)
|
||||
hexvalue (ctx->gregs[i], regs[i], 8);
|
||||
hexvalue (ctx->pc, regs[56], 8);
|
||||
hexvalue (ctx->ics, regs[57], 1);
|
||||
hexvalue (ctx->faultnum, regs[58], 2);
|
||||
|
||||
/* Generate the output. */
|
||||
for (i = 0; i < 52;)
|
||||
{
|
||||
const char *prefixes[] = {
|
||||
"Register dump:\n\n R0: ",
|
||||
"\n R8: ",
|
||||
"\n R16: ",
|
||||
"\n R24: ",
|
||||
"\n R32: ",
|
||||
"\n R40: ",
|
||||
"\n R48: "
|
||||
};
|
||||
ADD_STRING (prefixes[i / 8]);
|
||||
do
|
||||
{
|
||||
ADD_MEM (regs[i], 8);
|
||||
ADD_STRING (" ");
|
||||
}
|
||||
while (++i % 8 && i < 52);
|
||||
}
|
||||
ADD_STRING ("\n R52: ");
|
||||
ADD_MEM (regs[52], 8);
|
||||
ADD_STRING (" TP: ");
|
||||
ADD_MEM (regs[53], 8);
|
||||
ADD_STRING (" SP: ");
|
||||
ADD_MEM (regs[54], 8);
|
||||
ADD_STRING (" LR: ");
|
||||
ADD_MEM (regs[55], 8);
|
||||
ADD_STRING ("\n\n PC: ");
|
||||
ADD_MEM (regs[56], 8);
|
||||
ADD_STRING (" ICS: ");
|
||||
ADD_MEM (regs[57], 1);
|
||||
ADD_STRING (" FAULTNUM: ");
|
||||
ADD_MEM (regs[58], 2);
|
||||
ADD_STRING ("\n");
|
||||
|
||||
/* Write the stuff out. */
|
||||
writev (fd, iov, nr);
|
||||
}
|
||||
|
||||
|
||||
#define REGISTER_DUMP register_dump (fd, &ctx->uc_mcontext)
|
Loading…
Reference in New Issue
Block a user