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:
Adhemerval Zanella 2017-12-12 19:15:45 -02:00
parent 4735850f7a
commit ed95f61149
53 changed files with 98 additions and 5106 deletions

View File

@ -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
View File

@ -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
View File

@ -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

View File

@ -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'],

View File

@ -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 */

View File

@ -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

View File

@ -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,7 +33,6 @@
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
@ -45,11 +40,6 @@ elf_machine_matches_host (const ElfW(Ehdr) *ehdr)
#else
return (ehdr->e_ident[EI_CLASS] == ELFCLASS64);
#endif
#elif defined __tilepro__
return ehdr->e_machine == EM_TILEPRO;
#else
# error "Unknown tile architecture."
#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,8 +251,6 @@ struct reloc_howto
because then the table would not be position-independent. */
static const struct reloc_howto howto[] =
{
#ifdef __tilegx__
#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;
@ -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;

View File

@ -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

View File

@ -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)

View File

@ -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
/* 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

View File

@ -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
int
pthread_spin_lock (pthread_spinlock_t *lock)

View File

@ -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)

View File

@ -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;
}

View File

@ -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
/* Read member of the thread descriptor directly. */
# define THREAD_GETMEM(descr, member) (descr->member)

View File

@ -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

View File

@ -1,6 +1,5 @@
#include <bits/wordsize.h>
#ifdef __tilegx__
#if __WORDSIZE == 64
# define STACK_CHK_GUARD \
({ uintptr_t x; asm ("addi %0, tp, -16; ld %0, %0" : "=r" (x)); x; })
@ -12,9 +11,3 @@
# 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; })
# define POINTER_CHK_GUARD \
({ uintptr_t x; asm ("addi %0, tp, -12; lw %0, %0" : "=r" (x)); x; })
#endif

View File

@ -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"

View File

@ -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)
}
{
@ -168,24 +167,6 @@ _start:
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)
}
#endif
{
/* Tell backtracer to give up (_start has no caller). */

View File

@ -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__ */

View File

@ -1,2 +0,0 @@
tile
wordsize-32

View File

@ -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 */

View File

@ -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

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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>

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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) \
({ \

View File

@ -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!).

View File

@ -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

View File

@ -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. */

View File

@ -1,3 +0,0 @@
unix/sysv/linux/tile
unix/sysv/linux/generic/wordsize-32
unix/sysv/linux/generic

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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 },

View File

@ -1,2 +0,0 @@
GLIBC_2.12 GLIBC_2.12 A
GLIBC_2.12 __ctype_get_mb_cur_max F

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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)