diff options
Diffstat (limited to 'REORG.TODO/sysdeps/unix/sysv/linux/i386')
77 files changed, 8225 insertions, 0 deletions
diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/Implies b/REORG.TODO/sysdeps/unix/sysv/linux/i386/Implies new file mode 100644 index 0000000000..4bf5f8b520 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/Implies @@ -0,0 +1,2 @@ +unix/sysv/linux/x86 +i386/nptl diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/Makefile b/REORG.TODO/sysdeps/unix/sysv/linux/i386/Makefile new file mode 100644 index 0000000000..4080b8c966 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/Makefile @@ -0,0 +1,46 @@ +# The default ABI is 32. +default-abi := 32 + +ifeq ($(subdir),misc) +sysdep_routines += ioperm iopl vm86 +endif + +ifeq ($(subdir),elf) +sysdep-dl-routines += libc-do-syscall +sysdep-others += lddlibc4 +install-bin += lddlibc4 +endif + +ifeq ($(subdir),io) +sysdep_routines += libc-do-syscall +endif + +ifeq ($(subdir),nptl) +libpthread-sysdep_routines += libc-do-syscall +libpthread-shared-only-routines += libc-do-syscall +endif + +ifeq ($(subdir),stdlib) +gen-as-const-headers += ucontext_i.sym +endif + +ifeq ($(subdir),csu) +sysdep-dl-routines += sysdep +ifeq (yes,$(build-shared)) +sysdep_routines += divdi3 +shared-only-routines += divdi3 +CPPFLAGS-divdi3.c = -Din_divdi3_c +endif +endif + +ifeq ($(subdir),nptl) +# pull in __syscall_error routine +libpthread-routines += sysdep +libpthread-shared-only-routines += sysdep +endif + +ifeq ($(subdir),rt) +# pull in __syscall_error routine +librt-routines += sysdep +librt-shared-only-routines += sysdep +endif diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/Versions b/REORG.TODO/sysdeps/unix/sysv/linux/i386/Versions new file mode 100644 index 0000000000..f3544acb75 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/Versions @@ -0,0 +1,51 @@ +libc { + GLIBC_2.0 { + # Exception handling support functions from libgcc + __register_frame; __register_frame_table; __deregister_frame; + __frame_state_for; __register_frame_info_table; + + ioperm; iopl; + + vm86; + } + GLIBC_2.1 { + modify_ldt; + } + GLIBC_2.2 { + # functions used in other libraries + __xstat64; __fxstat64; __lxstat64; + + # a* + alphasort64; + + # g* + glob64; + + # New rlimit interface + getrlimit; setrlimit; getrlimit64; + + # r* + readdir64; readdir64_r; + + # s* + scandir64; + + # v* + versionsort64; + } + GLIBC_2.3.3 { + # p* + posix_fadvise64; posix_fallocate64; + } + GLIBC_2.3.4 { + # v* + vm86; + } + GLIBC_2.11 { + # f* + fallocate64; + } + GLIBC_PRIVATE { + __modify_ldt; + } +} diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/____longjmp_chk.S b/REORG.TODO/sysdeps/unix/sysv/linux/i386/____longjmp_chk.S new file mode 100644 index 0000000000..d46ea84e30 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/____longjmp_chk.S @@ -0,0 +1,109 @@ +/* Copyright (C) 2001-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#include <sysdep.h> +#include <jmpbuf-offsets.h> +#include <asm-syntax.h> +#include <stap-probe.h> + + + .section .rodata.str1.1,"aMS",@progbits,1 + .type longjmp_msg,@object +longjmp_msg: + .string "longjmp causes uninitialized stack frame" + .size longjmp_msg, .-longjmp_msg + + +#ifdef PIC +# define CALL_FAIL movl %ebx, %ecx; \ + cfi_register(%ebx,%ecx); \ + LOAD_PIC_REG (bx); \ + leal longjmp_msg@GOTOFF(%ebx), %eax; \ + call HIDDEN_JUMPTARGET(__fortify_fail) +#else +# define CALL_FAIL movl $longjmp_msg, %eax; \ + call HIDDEN_JUMPTARGET(__fortify_fail) +#endif + + + .text +ENTRY (____longjmp_chk) + movl 4(%esp), %ecx /* User's jmp_buf in %ecx. */ + + /* Save the return address now. */ + movl (JB_PC*4)(%ecx), %edx + /* Get the stack pointer. */ + movl (JB_SP*4)(%ecx), %edi + cfi_undefined(%edi) + PTR_DEMANGLE (%edx) + PTR_DEMANGLE (%edi) + + cmpl %edi, %esp + jbe .Lok + + subl $12, %esp + cfi_adjust_cfa_offset(12) + xorl %ebx, %ebx + movl %esp, %ecx + movl $__NR_sigaltstack, %eax + ENTER_KERNEL + /* Without working sigaltstack we cannot perform the test. */ + test %eax, %eax + jne .Lok2 + testl $1, 4(%esp) + jz .Lfail + + movl (%esp), %eax + addl 8(%esp), %eax + subl %edi, %eax + cmpl 8(%esp), %eax + jae .Lok2 + +.Lfail: CALL_FAIL + +.Lok2: addl $12, %esp + cfi_adjust_cfa_offset(-12) + movl 4(%esp), %ecx + +.Lok: + LIBC_PROBE (longjmp, 3, 4@%ecx, -4@8(%esp), 4@%edx) + /* We add unwind information for the target here. */ + cfi_def_cfa(%ecx, 0) + cfi_register(%eip, %edx) + cfi_register(%esp, %edi) + cfi_offset(%ebx, JB_BX*4) + cfi_offset(%esi, JB_SI*4) + cfi_offset(%edi, JB_DI*4) + cfi_offset(%ebp, JB_BP*4) + + movl 8(%esp), %eax /* Second argument is return value. */ + movl %edi, %esp + + /* Restore registers. */ + movl (JB_BX*4)(%ecx), %ebx + movl (JB_SI*4)(%ecx), %esi + movl (JB_DI*4)(%ecx), %edi + movl (JB_BP*4)(%ecx), %ebp + cfi_restore(%ebx) + cfi_restore(%esi) + cfi_restore(%edi) + cfi_restore(%ebp) + + /* Jump to saved PC. */ + LIBC_PROBE (longjmp_target, 3, 4@%ecx, -4@%eax, 4@%edx) + jmp *%edx +END (____longjmp_chk) diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/_exit.S b/REORG.TODO/sysdeps/unix/sysv/linux/i386/_exit.S new file mode 100644 index 0000000000..0ba2231998 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/_exit.S @@ -0,0 +1,44 @@ +/* Copyright (C) 2002-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#include <sysdep.h> + + .text + .type _exit,@function + .global _exit +_exit: + movl 4(%esp), %ebx + + /* Try the new syscall first. */ +#ifdef __NR_exit_group + movl $__NR_exit_group, %eax + ENTER_KERNEL +#endif + + /* Not available. Now the old one. */ + movl $__NR_exit, %eax + /* Don't bother using ENTER_KERNEL here. If the exit_group + syscall is not available AT_SYSINFO isn't either. */ + int $0x80 + + /* This must not fail. Be sure we don't return. */ + hlt + .size _exit,.-_exit + +libc_hidden_def (_exit) +rtld_hidden_def (_exit) +weak_alias (_exit, _Exit) diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/alphasort64.c b/REORG.TODO/sysdeps/unix/sysv/linux/i386/alphasort64.c new file mode 100644 index 0000000000..d5fd47a9ae --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/alphasort64.c @@ -0,0 +1,48 @@ +/* Copyright (C) 1992-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#include <dirent.h> +#include <string.h> + +int +__alphasort64 (const struct dirent64 **a, const struct dirent64 **b) +{ + return strcoll ((*a)->d_name, (*b)->d_name); +} + +#include <shlib-compat.h> + +versioned_symbol (libc, __alphasort64, alphasort64, GLIBC_2_2); + +#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2) + +#include <sysdeps/unix/sysv/linux/i386/olddirent.h> + +int +__old_alphasort64 (const struct __old_dirent64 **a, + const struct __old_dirent64 **b); + +int +attribute_compat_text_section +__old_alphasort64 (const struct __old_dirent64 **a, + const struct __old_dirent64 **b) +{ + return strcoll ((*a)->d_name, (*b)->d_name); +} + +compat_symbol (libc, __old_alphasort64, alphasort64, GLIBC_2_1); +#endif diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/arch-fork.h b/REORG.TODO/sysdeps/unix/sysv/linux/i386/arch-fork.h new file mode 100644 index 0000000000..9a2465b58e --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/arch-fork.h @@ -0,0 +1,27 @@ +/* Internal definitions for thread-friendly fork implementation. Linux/i386. + Copyright (C) 2002-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. + + 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 <sched.h> +#include <sysdep.h> +#include <tls.h> + +#define ARCH_FORK() \ + INLINE_SYSCALL (clone, 5, \ + CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID | SIGCHLD, 0, \ + NULL, NULL, &THREAD_SELF->tid) diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/brk.c b/REORG.TODO/sysdeps/unix/sysv/linux/i386/brk.c new file mode 100644 index 0000000000..25ab1015d3 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/brk.c @@ -0,0 +1,41 @@ +/* brk system call for Linux/i386. + Copyright (C) 1995-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#include <errno.h> +#include <unistd.h> +#include <sysdep.h> + +/* This must be initialized data because commons can't have aliases. */ +void *__curbrk = 0; + +/* Old braindamage in GCC's crtstuff.c requires this symbol in an attempt + to work around different old braindamage in the old Linux ELF dynamic + linker. */ +weak_alias (__curbrk, ___brk_addr) + +int +__brk (void *addr) +{ + INTERNAL_SYSCALL_DECL (err); + void *newbrk = (void *) INTERNAL_SYSCALL (brk, err, 1, addr); + __curbrk = newbrk; + if (newbrk < addr) + return INLINE_SYSCALL_ERROR_RETURN_VALUE (ENOMEM); + return 0; +} +weak_alias (__brk, brk) diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/c++-types.data b/REORG.TODO/sysdeps/unix/sysv/linux/i386/c++-types.data new file mode 100644 index 0000000000..fde53bf337 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/c++-types.data @@ -0,0 +1,67 @@ +blkcnt64_t:x +blkcnt_t:l +blksize_t:l +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 diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/clone.S b/REORG.TODO/sysdeps/unix/sysv/linux/i386/clone.S new file mode 100644 index 0000000000..a4ba3e20ff --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/clone.S @@ -0,0 +1,124 @@ +/* Copyright (C) 1996-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@tamu.edu) + + 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/>. */ + +/* clone() is even more special than fork() as it mucks with stacks + and invokes a function in the right context after its all over. */ + +#include <sysdep.h> +#define _ERRNO_H 1 +#include <bits/errno.h> +#include <asm-syntax.h> + +/* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg, + pid_t *ptid, struct user_desc *tls, pid_t *ctid); */ + +#define PARMS 4 /* no space for saved regs */ +#define FUNC PARMS +#define STACK FUNC+4 +#define FLAGS STACK+4 +#define ARG FLAGS+4 +#define PTID ARG+4 +#define TLS PTID+4 +#define CTID TLS+4 + +#define __NR_clone 120 +#define SYS_clone 120 + +#define CLONE_VM 0x00000100 + + .text +ENTRY (__clone) + /* Sanity check arguments. */ + movl $-EINVAL,%eax + movl FUNC(%esp),%ecx /* no NULL function pointers */ + testl %ecx,%ecx + jz SYSCALL_ERROR_LABEL + movl STACK(%esp),%ecx /* no NULL stack pointers */ + testl %ecx,%ecx + jz SYSCALL_ERROR_LABEL + + /* Insert the argument onto the new stack. Make sure the new + thread is started with an alignment of (mod 16). */ + andl $0xfffffff0, %ecx + subl $28,%ecx + movl ARG(%esp),%eax /* no negative argument counts */ + movl %eax,12(%ecx) + + /* Save the function pointer as the zeroth argument. + It will be popped off in the child in the ebx frobbing below. */ + movl FUNC(%esp),%eax + movl %eax,8(%ecx) + /* Don't leak any information. */ + movl $0,4(%ecx) + + /* Do the system call */ + pushl %ebx + cfi_adjust_cfa_offset (4) + pushl %esi + cfi_adjust_cfa_offset (4) + pushl %edi + cfi_adjust_cfa_offset (4) + + movl TLS+12(%esp),%esi + cfi_rel_offset (esi, 4) + movl PTID+12(%esp),%edx + movl FLAGS+12(%esp),%ebx + cfi_rel_offset (ebx, 8) + movl CTID+12(%esp),%edi + cfi_rel_offset (edi, 0) + movl $SYS_ify(clone),%eax + + /* Remember the flag value. */ + movl %ebx, (%ecx) + + /* End FDE now, because in the child the unwind info will be + wrong. */ + cfi_endproc + + int $0x80 + popl %edi + popl %esi + popl %ebx + + test %eax,%eax + jl SYSCALL_ERROR_LABEL + jz L(thread_start) + + ret + +L(thread_start): + cfi_startproc; + /* Clearing frame pointer is insufficient, use CFI. */ + cfi_undefined (eip); + /* Note: %esi is zero. */ + movl %esi,%ebp /* terminate the stack frame */ + call *%ebx +#ifdef PIC + call L(here) +L(here): + popl %ebx + addl $_GLOBAL_OFFSET_TABLE_+[.-L(here)], %ebx +#endif + movl %eax, %ebx + movl $SYS_ify(exit), %eax + ENTER_KERNEL + +PSEUDO_END (__clone) + +libc_hidden_def (__clone) +weak_alias (__clone, clone) diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/configure b/REORG.TODO/sysdeps/unix/sysv/linux/i386/configure new file mode 100644 index 0000000000..0327590486 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/configure @@ -0,0 +1,44 @@ +# This file is generated from configure.ac by Autoconf. DO NOT EDIT! + # Local configure fragment for sysdeps/unix/sysv/linux/i386. + +# Check if CFLAGS allows compiler to use ebp register in inline assembly. + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler flags allows ebp in inline assembly" >&5 +$as_echo_n "checking if compiler flags allows ebp in inline assembly... " >&6; } +if ${libc_cv_can_use_register_asm_ebp+:} false; then : + $as_echo_n "(cached) " >&6 +else + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + void foo (int i) + { + register int reg asm ("ebp") = i; + asm ("# %0" : : "r" (reg)); + } +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + libc_cv_can_use_register_asm_ebp=yes +else + libc_cv_can_use_register_asm_ebp=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_can_use_register_asm_ebp" >&5 +$as_echo "$libc_cv_can_use_register_asm_ebp" >&6; } +if test $libc_cv_can_use_register_asm_ebp = yes; then + $as_echo "#define CAN_USE_REGISTER_ASM_EBP 1" >>confdefs.h + +fi + +libc_cv_gcc_unwind_find_fde=yes +ldd_rewrite_script=sysdeps/unix/sysv/linux/ldd-rewrite.sed diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/configure.ac b/REORG.TODO/sysdeps/unix/sysv/linux/i386/configure.ac new file mode 100644 index 0000000000..9e980784bb --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/configure.ac @@ -0,0 +1,22 @@ +GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. +# Local configure fragment for sysdeps/unix/sysv/linux/i386. + +# Check if CFLAGS allows compiler to use ebp register in inline assembly. +AC_CACHE_CHECK([if compiler flags allows ebp in inline assembly], + libc_cv_can_use_register_asm_ebp, [ +AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([ + void foo (int i) + { + register int reg asm ("ebp") = i; + asm ("# %0" : : "r" (reg)); + }])], + [libc_cv_can_use_register_asm_ebp=yes], + [libc_cv_can_use_register_asm_ebp=no]) +]) +if test $libc_cv_can_use_register_asm_ebp = yes; then + AC_DEFINE(CAN_USE_REGISTER_ASM_EBP) +fi + +libc_cv_gcc_unwind_find_fde=yes +ldd_rewrite_script=sysdeps/unix/sysv/linux/ldd-rewrite.sed diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/dl-librecon.h b/REORG.TODO/sysdeps/unix/sysv/linux/i386/dl-librecon.h new file mode 100644 index 0000000000..5f91009a4c --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/dl-librecon.h @@ -0,0 +1,62 @@ +/* Optional code to distinguish library flavours. + Copyright (C) 1998-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + 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/>. */ + +#ifndef _DL_LIBRECON_H + +#include <sysdeps/unix/sysv/linux/dl-librecon.h> + +#define DISTINGUISH_LIB_VERSIONS \ + do \ + { \ + /* We have to find out whether the binary is linked against \ + libc 5 or glibc. We do this by looking at all the DT_NEEDED \ + entries. If one is libc.so.5 this is a libc 5 linked binary. */ \ + if (main_map->l_info[DT_NEEDED]) \ + { \ + /* We have dependencies. */ \ + const ElfW(Dyn) *d; \ + const char *strtab; \ + \ + strtab = (const char *) D_PTR (main_map, l_info[DT_STRTAB]); \ + \ + for (d = main_map->l_ld; d->d_tag != DT_NULL; ++d) \ + if (d->d_tag == DT_NEEDED \ + && strcmp (strtab + d->d_un.d_val, "libc.so.5") == 0) \ + break; \ + \ + /* We print a `5' or `6' depending on the outcome. */ \ + _dl_printf (d->d_tag != DT_NULL ? "5\n" : "6\n"); \ + } \ + } \ + while (0) + +/* Recognizing extra environment variables. */ +#define EXTRA_LD_ENVVARS \ + case 15: \ + if (memcmp (envline, "LIBRARY_VERSION", 15) == 0) \ + GLRO(dl_correct_cache_id) = envline[16] == '5' ? 2 : 3; \ + break; \ + +/* Extra unsecure variables. The names are all stuffed in a single + string which means they have to be terminated with a '\0' explicitly. */ +#define EXTRA_UNSECURE_ENVVARS \ + "LD_AOUT_LIBRARY_PATH\0" \ + "LD_AOUT_PRELOAD\0" + +#endif /* dl-librecon.h */ diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/dl-procinfo.h b/REORG.TODO/sysdeps/unix/sysv/linux/i386/dl-procinfo.h new file mode 100644 index 0000000000..c590896ddf --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/dl-procinfo.h @@ -0,0 +1,47 @@ +/* Linux/i386 version of processor capability information handling macros. + Copyright (C) 1998-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + 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/>. */ + +#ifndef _DL_I386_PROCINFO_H +#define _DL_I386_PROCINFO_H 1 +#include <sysdeps/x86/dl-procinfo.h> + +#undef _dl_procinfo +static inline int +__attribute__ ((unused)) +_dl_procinfo (unsigned int type, unsigned long int word) +{ + /* This table should match the information from arch/i386/kernel/setup.c + in the kernel sources. */ + int i; + + /* Fallback to unknown output mechanism. */ + if (type == AT_HWCAP2) + return -1; + + _dl_printf ("AT_HWCAP: "); + + for (i = 0; i < 32; ++i) + if (word & (1 << i)) + _dl_printf (" %s", GLRO(dl_x86_cap_flags)[i]); + + _dl_printf ("\n"); + + return 0; +} +#endif diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/dl-sysdep.h b/REORG.TODO/sysdeps/unix/sysv/linux/i386/dl-sysdep.h new file mode 100644 index 0000000000..8a3af5e27b --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/dl-sysdep.h @@ -0,0 +1,46 @@ +/* System-specific settings for dynamic linker code. i386 version. + Copyright (C) 2002-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#ifndef _LINUX_I386_DL_SYSDEP_H + +#include_next <dl-sysdep.h> + +/* Traditionally system calls have been made using int $0x80. A + second method was introduced which, if possible, will use the + sysenter/syscall instructions. To signal the presence and where to + find the code the kernel passes an AT_SYSINFO value in the + auxiliary vector to the application. */ +#define NEED_DL_SYSINFO 1 + +#ifndef __ASSEMBLER__ +extern void _dl_sysinfo_int80 (void) attribute_hidden; +# define DL_SYSINFO_DEFAULT (uintptr_t) _dl_sysinfo_int80 +# define DL_SYSINFO_IMPLEMENTATION \ + asm (".text\n\t" \ + ".type _dl_sysinfo_int80,@function\n\t" \ + ".hidden _dl_sysinfo_int80\n" \ + CFI_STARTPROC "\n" \ + "_dl_sysinfo_int80:\n\t" \ + "int $0x80;\n\t" \ + "ret;\n\t" \ + CFI_ENDPROC "\n" \ + ".size _dl_sysinfo_int80,.-_dl_sysinfo_int80\n\t" \ + ".previous"); +#endif + +#endif /* dl-sysdep.h */ diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/fcntl.c b/REORG.TODO/sysdeps/unix/sysv/linux/i386/fcntl.c new file mode 100644 index 0000000000..b0a5783a8a --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/fcntl.c @@ -0,0 +1,61 @@ +/* Copyright (C) 2000-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#include <assert.h> +#include <errno.h> +#include <sysdep-cancel.h> /* Must come before <fcntl.h>. */ +#include <fcntl.h> +#include <stdarg.h> + +#include <sys/syscall.h> + +#ifndef NO_CANCELLATION +int +__fcntl_nocancel (int fd, int cmd, ...) +{ + va_list ap; + void *arg; + + va_start (ap, cmd); + arg = va_arg (ap, void *); + va_end (ap); + + return INLINE_SYSCALL (fcntl64, 3, fd, cmd, arg); +} +#endif /* NO_CANCELLATION */ + + +int +__libc_fcntl (int fd, int cmd, ...) +{ + va_list ap; + void *arg; + + va_start (ap, cmd); + arg = va_arg (ap, void *); + va_end (ap); + + if ((cmd != F_SETLKW) && (cmd != F_SETLKW64)) + return INLINE_SYSCALL (fcntl64, 3, fd, cmd, arg); + + return SYSCALL_CANCEL (fcntl64, fd, cmd, arg); +} +libc_hidden_def (__libc_fcntl) + +weak_alias (__libc_fcntl, __fcntl) +libc_hidden_weak (__fcntl) +weak_alias (__libc_fcntl, fcntl) diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/fxstat.c b/REORG.TODO/sysdeps/unix/sysv/linux/i386/fxstat.c new file mode 100644 index 0000000000..c4cdbf54c0 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/fxstat.c @@ -0,0 +1,61 @@ +/* fxstat using old-style Unix fstat system call. + Copyright (C) 1991-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +/* Ho hum, if xstat == xstat64 we must get rid of the prototype or gcc + will complain since they don't strictly match. */ +#define __fxstat64 __fxstat64_disable + +#include <errno.h> +#include <stddef.h> +#include <sys/stat.h> +#include <kernel_stat.h> + +#include <sysdep.h> +#include <sys/syscall.h> + +#include <xstatconv.h> + +/* Get information about the file FD in BUF. */ +int +__fxstat (int vers, int fd, struct stat *buf) +{ + int result; + + if (vers == _STAT_VER_KERNEL) + return INLINE_SYSCALL (fstat, 2, fd, buf); + + { + struct stat64 buf64; + + INTERNAL_SYSCALL_DECL (err); + result = INTERNAL_SYSCALL (fstat64, err, 2, fd, &buf64); + if (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (result, err))) + return INLINE_SYSCALL_ERROR_RETURN_VALUE (INTERNAL_SYSCALL_ERRNO (result, + err)); + else + return __xstat32_conv (vers, &buf64, buf); + } +} + +hidden_def (__fxstat) +weak_alias (__fxstat, _fxstat); +#if XSTAT_IS_XSTAT64 +#undef __fxstat64 +strong_alias (__fxstat, __fxstat64); +hidden_ver (__fxstat, __fxstat64) +#endif diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/fxstatat.c b/REORG.TODO/sysdeps/unix/sysv/linux/i386/fxstatat.c new file mode 100644 index 0000000000..7980c9bbe0 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/fxstatat.c @@ -0,0 +1,56 @@ +/* Copyright (C) 2005-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +/* Ho hum, if fxstatat == fxstatat64 we must get rid of the prototype or gcc + will complain since they don't strictly match. */ +#define __fxstatat64 __fxstatat64_disable + +#include <errno.h> +#include <fcntl.h> +#include <stddef.h> +#include <stdio.h> +#include <string.h> +#include <sys/stat.h> +#include <kernel_stat.h> + +#include <sysdep.h> +#include <sys/syscall.h> + +#include <xstatconv.h> + + +/* Get information about the file NAME relative to FD in ST. */ +int +__fxstatat (int vers, int fd, const char *file, struct stat *st, int flag) +{ + int result; + INTERNAL_SYSCALL_DECL (err); + struct stat64 st64; + + result = INTERNAL_SYSCALL (fstatat64, err, 4, fd, file, &st64, flag); + if (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (result, err))) + return INLINE_SYSCALL_ERROR_RETURN_VALUE (INTERNAL_SYSCALL_ERRNO (result, + err)); + else + return __xstat32_conv (vers, &st64, st); +} +libc_hidden_def (__fxstatat) +#if XSTAT_IS_XSTAT64 +# undef __fxstatat64 +strong_alias (__fxstatat, __fxstatat64); +libc_hidden_ver (__fxstatat, __fxstatat64) +#endif diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/get_clockfreq.c b/REORG.TODO/sysdeps/unix/sysv/linux/i386/get_clockfreq.c new file mode 100644 index 0000000000..88e14b5f04 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/get_clockfreq.c @@ -0,0 +1,88 @@ +/* Get frequency of the system processor. i386/Linux version. + Copyright (C) 2000-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#include <ctype.h> +#include <fcntl.h> +#include <string.h> +#include <unistd.h> + +hp_timing_t +__get_clockfreq (void) +{ + /* We read the information from the /proc filesystem. It contains at + least one line like + cpu MHz : 497.840237 + or also + cpu MHz : 497.841 + We search for this line and convert the number in an integer. */ + static hp_timing_t result; + int fd; + + /* If this function was called before, we know the result. */ + if (result != 0) + return result; + + fd = __open ("/proc/cpuinfo", O_RDONLY); + if (__glibc_likely (fd != -1)) + { + /* XXX AFAIK the /proc filesystem can generate "files" only up + to a size of 4096 bytes. */ + char buf[4096]; + ssize_t n; + + n = __read (fd, buf, sizeof buf); + if (__builtin_expect (n, 1) > 0) + { + char *mhz = memmem (buf, n, "cpu MHz", 7); + + if (__glibc_likely (mhz != NULL)) + { + char *endp = buf + n; + int seen_decpoint = 0; + int ndigits = 0; + + /* Search for the beginning of the string. */ + while (mhz < endp && (*mhz < '0' || *mhz > '9') && *mhz != '\n') + ++mhz; + + while (mhz < endp && *mhz != '\n') + { + if (*mhz >= '0' && *mhz <= '9') + { + result *= 10; + result += *mhz - '0'; + if (seen_decpoint) + ++ndigits; + } + else if (*mhz == '.') + seen_decpoint = 1; + + ++mhz; + } + + /* Compensate for missing digits at the end. */ + while (ndigits++ < 6) + result *= 10; + } + } + + __close (fd); + } + + return result; +} diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/getcontext.S b/REORG.TODO/sysdeps/unix/sysv/linux/i386/getcontext.S new file mode 100644 index 0000000000..591c3885a5 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/getcontext.S @@ -0,0 +1,83 @@ +/* Save current context. + Copyright (C) 2001-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@redhat.com>, 2001. + + 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 <sysdep.h> + +#include "ucontext_i.h" + + +ENTRY(__getcontext) + /* Load address of the context data structure. */ + movl 4(%esp), %eax + + /* Return value of getcontext. EAX is the only register whose + value is not preserved. */ + movl $0, oEAX(%eax) + + /* Save the 32-bit register values and the return address. */ + movl %ecx, oECX(%eax) + movl %edx, oEDX(%eax) + movl %edi, oEDI(%eax) + movl %esi, oESI(%eax) + movl %ebp, oEBP(%eax) + movl (%esp), %ecx + movl %ecx, oEIP(%eax) + leal 4(%esp), %ecx /* Exclude the return address. */ + movl %ecx, oESP(%eax) + movl %ebx, oEBX(%eax) + + /* Save the FS segment register. We don't touch the GS register + since it is used for threads. */ + xorl %edx, %edx + movw %fs, %dx + movl %edx, oFS(%eax) + + /* We have separate floating-point register content memory on the + stack. We use the __fpregs_mem block in the context. Set the + links up correctly. */ + leal oFPREGSMEM(%eax), %ecx + movl %ecx, oFPREGS(%eax) + /* Save the floating-point context. */ + fnstenv (%ecx) + /* And load it right back since the processor changes the mask. + Intel thought this opcode to be used in interrupt handlers which + would block all exceptions. */ + fldenv (%ecx) + + /* Save the current signal mask. */ + pushl %ebx + cfi_adjust_cfa_offset (4) + cfi_rel_offset (ebx, 0) + leal oSIGMASK(%eax), %edx + xorl %ecx, %ecx + movl $SIG_BLOCK, %ebx + movl $__NR_sigprocmask, %eax + ENTER_KERNEL + popl %ebx + cfi_adjust_cfa_offset (-4) + cfi_restore (ebx) + cmpl $-4095, %eax /* Check %eax for error. */ + jae SYSCALL_ERROR_LABEL /* Jump to error handler if error. */ + + /* All done, return 0 for success. */ + xorl %eax, %eax + ret +PSEUDO_END(__getcontext) + +weak_alias (__getcontext, getcontext) diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/getdents64.c b/REORG.TODO/sysdeps/unix/sysv/linux/i386/getdents64.c new file mode 100644 index 0000000000..e8b257f059 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/getdents64.c @@ -0,0 +1,39 @@ +/* Copyright (C) 2000-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#define __GETDENTS __getdents64 +#define DIRENT_TYPE struct dirent64 + +#include <sysdeps/unix/sysv/linux/getdents.c> + +#include <shlib-compat.h> + +#undef __READDIR +#undef __GETDENTS +#undef DIRENT_TYPE + +#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2) + +#include <sysdeps/unix/sysv/linux/i386/olddirent.h> + +#define __GETDENTS __old_getdents64 +#define DIRENT_TYPE struct __old_dirent64 +#define kernel_dirent old_kernel_dirent +#define kernel_dirent64 old_kernel_dirent64 + +#include <sysdeps/unix/sysv/linux/getdents.c> +#endif diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/getmsg.c b/REORG.TODO/sysdeps/unix/sysv/linux/i386/getmsg.c new file mode 100644 index 0000000000..5bf1e255c5 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/getmsg.c @@ -0,0 +1,33 @@ +/* Copyright (C) 1998-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#include <errno.h> +#include <stddef.h> +#include <stropts.h> + +#include <sysdep.h> +#include <sys/syscall.h> + +#ifdef __NR_getpmsg +int +getmsg (int fildes, struct strbuf *ctlptr, struct strbuf *dataptr, int *flagsp) +{ + return INLINE_SYSCALL (getpmsg, 5, fildes, ctlptr, dataptr, NULL, flagsp); +} +#else +# include <streams/getmsg.c> +#endif diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/gettimeofday.c b/REORG.TODO/sysdeps/unix/sysv/linux/i386/gettimeofday.c new file mode 100644 index 0000000000..b6116e91ba --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/gettimeofday.c @@ -0,0 +1,35 @@ +/* gettimeofday - get the time. Linux/i386 version. + Copyright (C) 2015-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#ifdef SHARED +# define __gettimeofday __redirect___gettimeofday +#endif + +#include <sys/time.h> + +#ifdef SHARED +# undef __gettimeofday +# define __gettimeofday_type __redirect___gettimeofday + +# undef libc_hidden_def +# define libc_hidden_def(name) \ + __hidden_ver1 (__gettimeofday_syscall, __GI___gettimeofday, \ + __gettimeofday_syscall); +#endif + +#include <sysdeps/unix/sysv/linux/x86/gettimeofday.c> diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/glob64.c b/REORG.TODO/sysdeps/unix/sysv/linux/i386/glob64.c new file mode 100644 index 0000000000..f68195137e --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/glob64.c @@ -0,0 +1,76 @@ +/* Two glob variants with 64-bit support, for dirent64 and __olddirent64. + Copyright (C) 1998-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#include <dirent.h> +#include <glob.h> +#include <sys/stat.h> + +#define dirent dirent64 +#define __readdir(dirp) __readdir64 (dirp) + +#define glob_t glob64_t +#define glob(pattern, flags, errfunc, pglob) \ + __glob64 (pattern, flags, errfunc, pglob) +#define globfree(pglob) globfree64 (pglob) + +#undef stat +#define stat stat64 +#undef __stat +#define __stat(file, buf) __xstat64 (_STAT_VER, file, buf) + +#define NO_GLOB_PATTERN_P 1 + +#define COMPILE_GLOB64 1 + +#include <posix/glob.c> + +#include "shlib-compat.h" + +libc_hidden_def (globfree64) + +versioned_symbol (libc, __glob64, glob64, GLIBC_2_2); +libc_hidden_ver (__glob64, glob64) + +#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2) + +#include <sysdeps/unix/sysv/linux/i386/olddirent.h> + +int __old_glob64 (const char *__pattern, int __flags, + int (*__errfunc) (const char *, int), + glob64_t *__pglob); + +#undef dirent +#define dirent __old_dirent64 +#undef GL_READDIR +# define GL_READDIR(pglob, stream) \ + ((struct __old_dirent64 *) (pglob)->gl_readdir (stream)) +#undef __readdir +#define __readdir(dirp) __old_readdir64 (dirp) +#undef glob +#define glob(pattern, flags, errfunc, pglob) \ + __old_glob64 (pattern, flags, errfunc, pglob) +#define convert_dirent __old_convert_dirent +#define glob_in_dir __old_glob_in_dir +#define GLOB_ATTRIBUTE attribute_compat_text_section + +#define GLOB_ONLY_P 1 + +#include <posix/glob.c> + +compat_symbol (libc, __old_glob64, glob64, GLIBC_2_1); +#endif diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/i686/Implies b/REORG.TODO/sysdeps/unix/sysv/linux/i386/i686/Implies new file mode 100644 index 0000000000..8948a800bb --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/i686/Implies @@ -0,0 +1 @@ +i386/i686/nptl diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/i686/dl-sysdep.h b/REORG.TODO/sysdeps/unix/sysv/linux/i386/i686/dl-sysdep.h new file mode 100644 index 0000000000..ad90853864 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/i686/dl-sysdep.h @@ -0,0 +1,29 @@ +/* System-specific settings for dynamic linker code. IA-32 version. + Copyright (C) 2002-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#ifndef _LINUX_I686_DL_SYSDEP_H +#define _LINUX_I686_DL_SYSDEP_H 1 + +/* The i386 file does most of the work. */ +#include_next <dl-sysdep.h> + +/* Actually use the vDSO entry point for syscalls. + i386/dl-sysdep.h arranges to support it, but not use it. */ +#define USE_DL_SYSINFO 1 + +#endif /* dl-sysdep.h */ diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/i786/Implies b/REORG.TODO/sysdeps/unix/sysv/linux/i386/i786/Implies new file mode 100644 index 0000000000..7cb7d9a678 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/i786/Implies @@ -0,0 +1,2 @@ +# The PPro and PII cores are mostly the same. +unix/sysv/linux/i386/i686 diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/init-first.c b/REORG.TODO/sysdeps/unix/sysv/linux/i386/init-first.c new file mode 100644 index 0000000000..bbbecdd41f --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/init-first.c @@ -0,0 +1,50 @@ +/* Initialization code run first thing by the ELF startup code. Linux/i386. + Copyright (C) 2015-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#ifdef SHARED +# include <time.h> +# include <sysdep.h> +# include <dl-vdso.h> +# include <sysdep-vdso.h> + +long int (*VDSO_SYMBOL (clock_gettime)) (clockid_t, struct timespec *) + attribute_hidden; + +static long int +clock_gettime_syscall (clockid_t id, struct timespec *tp) +{ + INTERNAL_SYSCALL_DECL (err); + return INTERNAL_SYSCALL (clock_gettime, err, 2, id, tp); +} + +static inline void +__vdso_platform_setup (void) +{ + PREPARE_VERSION_KNOWN (linux26, LINUX_2_6); + + void *p = _dl_vdso_vsym ("__vdso_clock_gettime", &linux26); + if (p == NULL) + p = clock_gettime_syscall; + PTR_MANGLE (p); + VDSO_SYMBOL (clock_gettime) = p; +} + +# define VDSO_SETUP __vdso_platform_setup +#endif + +#include <csu/init-first.c> diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/kernel-features.h b/REORG.TODO/sysdeps/unix/sysv/linux/i386/kernel-features.h new file mode 100644 index 0000000000..c6eb20f360 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/kernel-features.h @@ -0,0 +1,50 @@ +/* Set flags signalling availability of kernel features based on given + kernel version number. i386 version. + Copyright (C) 1999-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +/* i386 uses socketcall. */ +#define __ASSUME_SOCKETCALL 1 + +/* Direct socketcalls available with kernel 4.3. */ +#if __LINUX_KERNEL_VERSION >= 0x040300 +# define __ASSUME_SOCKET_SYSCALL 1 +# define __ASSUME_SOCKETPAIR_SYSCALL 1 +# define __ASSUME_BIND_SYSCALL 1 +# define __ASSUME_LISTEN_SYSCALL 1 +# define __ASSUME_GETSOCKOPT_SYSCALL 1 +# define __ASSUME_SETSOCKOPT_SYSCALL 1 +# define __ASSUME_GETSOCKNAME_SYSCALL 1 +# define __ASSUME_GETPEERNAME_SYSCALL 1 +# define __ASSUME_SHUTDOWN_SYSCALL 1 +#endif + +#include_next <kernel-features.h> + +#undef __ASSUME_ACCEPT_SYSCALL + +#if __LINUX_KERNEL_VERSION < 0x040300 +# undef __ASSUME_ACCEPT4_SYSCALL +# undef __ASSUME_SENDMSG_SYSCALL +# undef __ASSUME_RECVMSG_SYSCALL +# undef __ASSUME_CONNECT_SYSCALL +# undef __ASSUME_RECVFROM_SYSCALL +# undef __ASSUME_SENDTO_SYSCALL +#endif + +/* i686 only supports ipc syscall. */ +#undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/ld.abilist b/REORG.TODO/sysdeps/unix/sysv/linux/i386/ld.abilist new file mode 100644 index 0000000000..ddf9e78ec2 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/ld.abilist @@ -0,0 +1,13 @@ +GLIBC_2.0 GLIBC_2.0 A +GLIBC_2.0 _r_debug D 0x14 +GLIBC_2.0 calloc F +GLIBC_2.0 free F +GLIBC_2.0 malloc F +GLIBC_2.0 realloc F +GLIBC_2.1 GLIBC_2.1 A +GLIBC_2.1 __libc_stack_end D 0x4 +GLIBC_2.1 _dl_mcount F +GLIBC_2.3 GLIBC_2.3 A +GLIBC_2.3 ___tls_get_addr F +GLIBC_2.3 __tls_get_addr F +GLIBC_2.4 GLIBC_2.4 A diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/ldconfig.h b/REORG.TODO/sysdeps/unix/sysv/linux/i386/ldconfig.h new file mode 100644 index 0000000000..7112cb275d --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/ldconfig.h @@ -0,0 +1,24 @@ +/* Copyright (C) 2001-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#include <sysdeps/generic/ldconfig.h> + +#define SYSDEP_KNOWN_INTERPRETER_NAMES \ + { "/lib/ld-linux.so.1", FLAG_ELF_LIBC5 }, +#define SYSDEP_KNOWN_LIBRARY_NAMES \ + { "libc.so.5", FLAG_ELF_LIBC5 }, \ + { "libm.so.5", FLAG_ELF_LIBC5 }, diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/libBrokenLocale.abilist b/REORG.TODO/sysdeps/unix/sysv/linux/i386/libBrokenLocale.abilist new file mode 100644 index 0000000000..4a56bb68a3 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/libBrokenLocale.abilist @@ -0,0 +1,2 @@ +GLIBC_2.0 GLIBC_2.0 A +GLIBC_2.0 __ctype_get_mb_cur_max F diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/libanl.abilist b/REORG.TODO/sysdeps/unix/sysv/linux/i386/libanl.abilist new file mode 100644 index 0000000000..edabfb436e --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/libanl.abilist @@ -0,0 +1,5 @@ +GLIBC_2.2.3 GLIBC_2.2.3 A +GLIBC_2.2.3 gai_cancel F +GLIBC_2.2.3 gai_error F +GLIBC_2.2.3 gai_suspend F +GLIBC_2.2.3 getaddrinfo_a F diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/libc-do-syscall.S b/REORG.TODO/sysdeps/unix/sysv/linux/i386/libc-do-syscall.S new file mode 100644 index 0000000000..f706c6da57 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/libc-do-syscall.S @@ -0,0 +1,53 @@ +/* Out-of-line syscall stub for six-argument syscalls from C. + Copyright (C) 2015-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#include <sysdep.h> + +#ifndef OPTIMIZE_FOR_GCC_5 + +/* %eax, %ecx, %edx and %esi contain the values expected by the kernel. + %edi points to a structure with the values of %ebx, %edi and %ebp. */ + + .hidden __libc_do_syscall + +ENTRY (__libc_do_syscall) + pushl %ebx + cfi_adjust_cfa_offset (4) + cfi_rel_offset (ebx, 0) + pushl %edi + cfi_adjust_cfa_offset (4) + cfi_rel_offset (edi, 0) + pushl %ebp + cfi_adjust_cfa_offset (4) + cfi_rel_offset (ebp, 0) + movl 0(%edi), %ebx + movl 8(%edi), %ebp + movl 4(%edi), %edi + ENTER_KERNEL + popl %ebp + cfi_adjust_cfa_offset (-4) + cfi_restore (ebp) + popl %edi + cfi_adjust_cfa_offset (-4) + cfi_restore (edi) + popl %ebx + cfi_adjust_cfa_offset (-4) + cfi_restore (ebx) + ret +END (__libc_do_syscall) +#endif diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/libc-lowlevellock.S b/REORG.TODO/sysdeps/unix/sysv/linux/i386/libc-lowlevellock.S new file mode 100644 index 0000000000..1e5e150aa7 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/libc-lowlevellock.S @@ -0,0 +1,19 @@ +/* Copyright (C) 2002-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. + + 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 "lowlevellock.S" diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/libc.abilist b/REORG.TODO/sysdeps/unix/sysv/linux/i386/libc.abilist new file mode 100644 index 0000000000..2ff1998ac9 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/libc.abilist @@ -0,0 +1,2333 @@ +GCC_3.0 GCC_3.0 A +GCC_3.0 _Unwind_Find_FDE F +GCC_3.0 __deregister_frame_info_bases F +GCC_3.0 __register_frame_info_bases F +GCC_3.0 __register_frame_info_table_bases F +GLIBC_2.0 GLIBC_2.0 A +GLIBC_2.0 _IO_adjust_column F +GLIBC_2.0 _IO_default_doallocate F +GLIBC_2.0 _IO_default_finish F +GLIBC_2.0 _IO_default_pbackfail F +GLIBC_2.0 _IO_default_uflow F +GLIBC_2.0 _IO_default_xsgetn F +GLIBC_2.0 _IO_default_xsputn F +GLIBC_2.0 _IO_do_write F +GLIBC_2.0 _IO_doallocbuf F +GLIBC_2.0 _IO_fclose F +GLIBC_2.0 _IO_fdopen F +GLIBC_2.0 _IO_feof F +GLIBC_2.0 _IO_ferror F +GLIBC_2.0 _IO_fflush F +GLIBC_2.0 _IO_fgetpos F +GLIBC_2.0 _IO_fgets F +GLIBC_2.0 _IO_file_attach F +GLIBC_2.0 _IO_file_close F +GLIBC_2.0 _IO_file_close_it F +GLIBC_2.0 _IO_file_doallocate F +GLIBC_2.0 _IO_file_fopen F +GLIBC_2.0 _IO_file_init F +GLIBC_2.0 _IO_file_jumps D 0x54 +GLIBC_2.0 _IO_file_open F +GLIBC_2.0 _IO_file_overflow F +GLIBC_2.0 _IO_file_read F +GLIBC_2.0 _IO_file_seek F +GLIBC_2.0 _IO_file_seekoff F +GLIBC_2.0 _IO_file_setbuf F +GLIBC_2.0 _IO_file_stat F +GLIBC_2.0 _IO_file_sync F +GLIBC_2.0 _IO_file_underflow F +GLIBC_2.0 _IO_file_write F +GLIBC_2.0 _IO_file_xsputn F +GLIBC_2.0 _IO_flockfile F +GLIBC_2.0 _IO_flush_all F +GLIBC_2.0 _IO_flush_all_linebuffered F +GLIBC_2.0 _IO_fopen F +GLIBC_2.0 _IO_fprintf F +GLIBC_2.0 _IO_fputs F +GLIBC_2.0 _IO_fread F +GLIBC_2.0 _IO_free_backup_area F +GLIBC_2.0 _IO_fsetpos F +GLIBC_2.0 _IO_ftell F +GLIBC_2.0 _IO_ftrylockfile F +GLIBC_2.0 _IO_funlockfile F +GLIBC_2.0 _IO_fwrite F +GLIBC_2.0 _IO_getc F +GLIBC_2.0 _IO_getline F +GLIBC_2.0 _IO_gets F +GLIBC_2.0 _IO_init F +GLIBC_2.0 _IO_init_marker F +GLIBC_2.0 _IO_link_in F +GLIBC_2.0 _IO_list_all D 0x4 +GLIBC_2.0 _IO_marker_delta F +GLIBC_2.0 _IO_marker_difference F +GLIBC_2.0 _IO_padn F +GLIBC_2.0 _IO_peekc_locked F +GLIBC_2.0 _IO_popen F +GLIBC_2.0 _IO_printf F +GLIBC_2.0 _IO_proc_close F +GLIBC_2.0 _IO_proc_open F +GLIBC_2.0 _IO_putc F +GLIBC_2.0 _IO_puts F +GLIBC_2.0 _IO_remove_marker F +GLIBC_2.0 _IO_seekmark F +GLIBC_2.0 _IO_seekoff F +GLIBC_2.0 _IO_seekpos F +GLIBC_2.0 _IO_setb F +GLIBC_2.0 _IO_setbuffer F +GLIBC_2.0 _IO_setvbuf F +GLIBC_2.0 _IO_sgetn F +GLIBC_2.0 _IO_sprintf F +GLIBC_2.0 _IO_sputbackc F +GLIBC_2.0 _IO_sscanf F +GLIBC_2.0 _IO_stderr_ D 0x50 +GLIBC_2.0 _IO_stdin_ D 0x50 +GLIBC_2.0 _IO_stdout_ D 0x50 +GLIBC_2.0 _IO_str_init_readonly F +GLIBC_2.0 _IO_str_init_static F +GLIBC_2.0 _IO_str_overflow F +GLIBC_2.0 _IO_str_pbackfail F +GLIBC_2.0 _IO_str_seekoff F +GLIBC_2.0 _IO_str_underflow F +GLIBC_2.0 _IO_sungetc F +GLIBC_2.0 _IO_switch_to_get_mode F +GLIBC_2.0 _IO_un_link F +GLIBC_2.0 _IO_ungetc F +GLIBC_2.0 _IO_unsave_markers F +GLIBC_2.0 _IO_vfprintf F +GLIBC_2.0 _IO_vfscanf F +GLIBC_2.0 _IO_vsprintf F +GLIBC_2.0 ___brk_addr D 0x4 +GLIBC_2.0 __adjtimex F +GLIBC_2.0 __after_morecore_hook D 0x4 +GLIBC_2.0 __argz_count F +GLIBC_2.0 __argz_next F +GLIBC_2.0 __argz_stringify F +GLIBC_2.0 __assert_fail F +GLIBC_2.0 __assert_perror_fail F +GLIBC_2.0 __bsd_getpgrp F +GLIBC_2.0 __bzero F +GLIBC_2.0 __check_rhosts_file D 0x4 +GLIBC_2.0 __clone F +GLIBC_2.0 __close F +GLIBC_2.0 __cmsg_nxthdr F +GLIBC_2.0 __connect F +GLIBC_2.0 __ctype32_b D 0x4 +GLIBC_2.0 __ctype_b D 0x4 +GLIBC_2.0 __ctype_get_mb_cur_max F +GLIBC_2.0 __ctype_tolower D 0x4 +GLIBC_2.0 __ctype_toupper D 0x4 +GLIBC_2.0 __curbrk D 0x4 +GLIBC_2.0 __daylight D 0x4 +GLIBC_2.0 __dcgettext F +GLIBC_2.0 __default_morecore F +GLIBC_2.0 __deregister_frame F +GLIBC_2.0 __deregister_frame_info F +GLIBC_2.0 __dgettext F +GLIBC_2.0 __divdi3 F +GLIBC_2.0 __dup2 F +GLIBC_2.0 __environ D 0x4 +GLIBC_2.0 __errno_location F +GLIBC_2.0 __fcntl F +GLIBC_2.0 __ffs F +GLIBC_2.0 __finite F +GLIBC_2.0 __finitef F +GLIBC_2.0 __finitel F +GLIBC_2.0 __fork F +GLIBC_2.0 __fpu_control D 0x2 +GLIBC_2.0 __frame_state_for F +GLIBC_2.0 __free_hook D 0x4 +GLIBC_2.0 __fxstat F +GLIBC_2.0 __getdelim F +GLIBC_2.0 __getpagesize F +GLIBC_2.0 __getpgid F +GLIBC_2.0 __getpid F +GLIBC_2.0 __gettimeofday F +GLIBC_2.0 __gmtime_r F +GLIBC_2.0 __h_errno_location F +GLIBC_2.0 __isinf F +GLIBC_2.0 __isinff F +GLIBC_2.0 __isinfl F +GLIBC_2.0 __isnan F +GLIBC_2.0 __isnanf F +GLIBC_2.0 __isnanl F +GLIBC_2.0 __iswctype F +GLIBC_2.0 __ivaliduser F +GLIBC_2.0 __libc_calloc F +GLIBC_2.0 __libc_free F +GLIBC_2.0 __libc_init_first F +GLIBC_2.0 __libc_mallinfo F +GLIBC_2.0 __libc_malloc F +GLIBC_2.0 __libc_mallopt F +GLIBC_2.0 __libc_memalign F +GLIBC_2.0 __libc_pvalloc F +GLIBC_2.0 __libc_realloc F +GLIBC_2.0 __libc_start_main F +GLIBC_2.0 __libc_valloc F +GLIBC_2.0 __lseek F +GLIBC_2.0 __lxstat F +GLIBC_2.0 __malloc_hook D 0x4 +GLIBC_2.0 __malloc_initialize_hook D 0x4 +GLIBC_2.0 __mbrlen F +GLIBC_2.0 __mbrtowc F +GLIBC_2.0 __memalign_hook D 0x4 +GLIBC_2.0 __mempcpy F +GLIBC_2.0 __moddi3 F +GLIBC_2.0 __monstartup F +GLIBC_2.0 __morecore D 0x4 +GLIBC_2.0 __nss_configure_lookup F +GLIBC_2.0 __nss_database_lookup F +GLIBC_2.0 __nss_group_lookup F +GLIBC_2.0 __nss_hosts_lookup F +GLIBC_2.0 __nss_next F +GLIBC_2.0 __nss_passwd_lookup F +GLIBC_2.0 __open F +GLIBC_2.0 __overflow F +GLIBC_2.0 __pipe F +GLIBC_2.0 __printf_fp F +GLIBC_2.0 __profile_frequency F +GLIBC_2.0 __progname D 0x4 +GLIBC_2.0 __progname_full D 0x4 +GLIBC_2.0 __rcmd_errstr D 0x4 +GLIBC_2.0 __read F +GLIBC_2.0 __realloc_hook D 0x4 +GLIBC_2.0 __register_frame F +GLIBC_2.0 __register_frame_info F +GLIBC_2.0 __register_frame_info_table F +GLIBC_2.0 __register_frame_table F +GLIBC_2.0 __res_randomid F +GLIBC_2.0 __sbrk F +GLIBC_2.0 __sched_get_priority_max F +GLIBC_2.0 __sched_get_priority_min F +GLIBC_2.0 __sched_getparam F +GLIBC_2.0 __sched_getscheduler F +GLIBC_2.0 __sched_setscheduler F +GLIBC_2.0 __sched_yield F +GLIBC_2.0 __secure_getenv F +GLIBC_2.0 __select F +GLIBC_2.0 __send F +GLIBC_2.0 __setpgid F +GLIBC_2.0 __sigaction F +GLIBC_2.0 __sigaddset F +GLIBC_2.0 __sigdelset F +GLIBC_2.0 __sigismember F +GLIBC_2.0 __sigpause F +GLIBC_2.0 __sigsetjmp F +GLIBC_2.0 __stpcpy F +GLIBC_2.0 __stpncpy F +GLIBC_2.0 __strcasecmp F +GLIBC_2.0 __strdup F +GLIBC_2.0 __strerror_r F +GLIBC_2.0 __strtod_internal F +GLIBC_2.0 __strtof_internal F +GLIBC_2.0 __strtok_r F +GLIBC_2.0 __strtol_internal F +GLIBC_2.0 __strtold_internal F +GLIBC_2.0 __strtoll_internal F +GLIBC_2.0 __strtoq_internal F +GLIBC_2.0 __strtoul_internal F +GLIBC_2.0 __strtoull_internal F +GLIBC_2.0 __strtouq_internal F +GLIBC_2.0 __sysv_signal F +GLIBC_2.0 __timezone D 0x4 +GLIBC_2.0 __tzname D 0x8 +GLIBC_2.0 __udivdi3 F +GLIBC_2.0 __uflow F +GLIBC_2.0 __umoddi3 F +GLIBC_2.0 __underflow F +GLIBC_2.0 __vfscanf F +GLIBC_2.0 __vsnprintf F +GLIBC_2.0 __vsscanf F +GLIBC_2.0 __wait F +GLIBC_2.0 __waitpid F +GLIBC_2.0 __wcstod_internal F +GLIBC_2.0 __wcstof_internal F +GLIBC_2.0 __wcstol_internal F +GLIBC_2.0 __wcstold_internal F +GLIBC_2.0 __wcstoll_internal F +GLIBC_2.0 __wcstoul_internal F +GLIBC_2.0 __wcstoull_internal F +GLIBC_2.0 __write F +GLIBC_2.0 __xmknod F +GLIBC_2.0 __xpg_basename F +GLIBC_2.0 __xstat F +GLIBC_2.0 _environ D 0x4 +GLIBC_2.0 _exit F +GLIBC_2.0 _libc_intl_domainname D 0x5 +GLIBC_2.0 _longjmp F +GLIBC_2.0 _mcleanup F +GLIBC_2.0 _mcount F +GLIBC_2.0 _nl_default_dirname D 0x12 +GLIBC_2.0 _nl_domain_bindings D 0x4 +GLIBC_2.0 _nl_msg_cat_cntr D 0x4 +GLIBC_2.0 _null_auth D 0xc +GLIBC_2.0 _obstack D 0x4 +GLIBC_2.0 _obstack_allocated_p F +GLIBC_2.0 _obstack_begin F +GLIBC_2.0 _obstack_begin_1 F +GLIBC_2.0 _obstack_free F +GLIBC_2.0 _obstack_memory_used F +GLIBC_2.0 _obstack_newchunk F +GLIBC_2.0 _res D 0x200 +GLIBC_2.0 _rpc_dtablesize F +GLIBC_2.0 _seterr_reply F +GLIBC_2.0 _setjmp F +GLIBC_2.0 _sys_errlist D 0x1ec +GLIBC_2.0 _sys_nerr D 0x4 +GLIBC_2.0 _sys_siglist D 0x80 +GLIBC_2.0 _tolower F +GLIBC_2.0 _toupper F +GLIBC_2.0 a64l F +GLIBC_2.0 abort F +GLIBC_2.0 abs F +GLIBC_2.0 accept F +GLIBC_2.0 access F +GLIBC_2.0 acct F +GLIBC_2.0 addmntent F +GLIBC_2.0 adjtime F +GLIBC_2.0 adjtimex F +GLIBC_2.0 advance F +GLIBC_2.0 alarm F +GLIBC_2.0 alphasort F +GLIBC_2.0 argz_add F +GLIBC_2.0 argz_add_sep F +GLIBC_2.0 argz_append F +GLIBC_2.0 argz_count F +GLIBC_2.0 argz_create F +GLIBC_2.0 argz_create_sep F +GLIBC_2.0 argz_delete F +GLIBC_2.0 argz_extract F +GLIBC_2.0 argz_insert F +GLIBC_2.0 argz_next F +GLIBC_2.0 argz_replace F +GLIBC_2.0 argz_stringify F +GLIBC_2.0 asctime F +GLIBC_2.0 asctime_r F +GLIBC_2.0 asprintf F +GLIBC_2.0 atexit F +GLIBC_2.0 atof F +GLIBC_2.0 atoi F +GLIBC_2.0 atol F +GLIBC_2.0 atoll F +GLIBC_2.0 authnone_create F +GLIBC_2.0 authunix_create F +GLIBC_2.0 authunix_create_default F +GLIBC_2.0 basename F +GLIBC_2.0 bcmp F +GLIBC_2.0 bcopy F +GLIBC_2.0 bdflush F +GLIBC_2.0 bind F +GLIBC_2.0 bindresvport F +GLIBC_2.0 bindtextdomain F +GLIBC_2.0 brk F +GLIBC_2.0 bsd_signal F +GLIBC_2.0 bsearch F +GLIBC_2.0 btowc F +GLIBC_2.0 bzero F +GLIBC_2.0 calloc F +GLIBC_2.0 callrpc F +GLIBC_2.0 canonicalize_file_name F +GLIBC_2.0 catclose F +GLIBC_2.0 catgets F +GLIBC_2.0 catopen F +GLIBC_2.0 cfgetispeed F +GLIBC_2.0 cfgetospeed F +GLIBC_2.0 cfmakeraw F +GLIBC_2.0 cfree F +GLIBC_2.0 cfsetispeed F +GLIBC_2.0 cfsetospeed F +GLIBC_2.0 cfsetspeed F +GLIBC_2.0 chdir F +GLIBC_2.0 chflags F +GLIBC_2.0 chmod F +GLIBC_2.0 chown F +GLIBC_2.0 chroot F +GLIBC_2.0 clearenv F +GLIBC_2.0 clearerr F +GLIBC_2.0 clearerr_unlocked F +GLIBC_2.0 clnt_broadcast F +GLIBC_2.0 clnt_create F +GLIBC_2.0 clnt_pcreateerror F +GLIBC_2.0 clnt_perrno F +GLIBC_2.0 clnt_perror F +GLIBC_2.0 clnt_spcreateerror F +GLIBC_2.0 clnt_sperrno F +GLIBC_2.0 clnt_sperror F +GLIBC_2.0 clntraw_create F +GLIBC_2.0 clnttcp_create F +GLIBC_2.0 clntudp_bufcreate F +GLIBC_2.0 clntudp_create F +GLIBC_2.0 clock F +GLIBC_2.0 clone F +GLIBC_2.0 close F +GLIBC_2.0 closedir F +GLIBC_2.0 closelog F +GLIBC_2.0 confstr F +GLIBC_2.0 connect F +GLIBC_2.0 copysign F +GLIBC_2.0 copysignf F +GLIBC_2.0 copysignl F +GLIBC_2.0 creat F +GLIBC_2.0 create_module F +GLIBC_2.0 ctermid F +GLIBC_2.0 ctime F +GLIBC_2.0 ctime_r F +GLIBC_2.0 cuserid F +GLIBC_2.0 daemon F +GLIBC_2.0 daylight D 0x4 +GLIBC_2.0 dcgettext F +GLIBC_2.0 delete_module F +GLIBC_2.0 dgettext F +GLIBC_2.0 difftime F +GLIBC_2.0 dirfd F +GLIBC_2.0 dirname F +GLIBC_2.0 div F +GLIBC_2.0 dprintf F +GLIBC_2.0 drand48 F +GLIBC_2.0 drand48_r F +GLIBC_2.0 dup F +GLIBC_2.0 dup2 F +GLIBC_2.0 dysize F +GLIBC_2.0 ecvt F +GLIBC_2.0 ecvt_r F +GLIBC_2.0 endaliasent F +GLIBC_2.0 endfsent F +GLIBC_2.0 endgrent F +GLIBC_2.0 endhostent F +GLIBC_2.0 endmntent F +GLIBC_2.0 endnetent F +GLIBC_2.0 endnetgrent F +GLIBC_2.0 endprotoent F +GLIBC_2.0 endpwent F +GLIBC_2.0 endrpcent F +GLIBC_2.0 endservent F +GLIBC_2.0 endspent F +GLIBC_2.0 endttyent F +GLIBC_2.0 endusershell F +GLIBC_2.0 endutent F +GLIBC_2.0 environ D 0x4 +GLIBC_2.0 envz_add F +GLIBC_2.0 envz_entry F +GLIBC_2.0 envz_get F +GLIBC_2.0 envz_merge F +GLIBC_2.0 envz_remove F +GLIBC_2.0 envz_strip F +GLIBC_2.0 erand48 F +GLIBC_2.0 erand48_r F +GLIBC_2.0 err F +GLIBC_2.0 error F +GLIBC_2.0 error_at_line F +GLIBC_2.0 error_message_count D 0x4 +GLIBC_2.0 error_one_per_line D 0x4 +GLIBC_2.0 error_print_progname D 0x4 +GLIBC_2.0 errx F +GLIBC_2.0 ether_aton F +GLIBC_2.0 ether_aton_r F +GLIBC_2.0 ether_hostton F +GLIBC_2.0 ether_line F +GLIBC_2.0 ether_ntoa F +GLIBC_2.0 ether_ntoa_r F +GLIBC_2.0 ether_ntohost F +GLIBC_2.0 euidaccess F +GLIBC_2.0 execl F +GLIBC_2.0 execle F +GLIBC_2.0 execlp F +GLIBC_2.0 execv F +GLIBC_2.0 execve F +GLIBC_2.0 execvp F +GLIBC_2.0 exit F +GLIBC_2.0 fchdir F +GLIBC_2.0 fchflags F +GLIBC_2.0 fchmod F +GLIBC_2.0 fchown F +GLIBC_2.0 fclose F +GLIBC_2.0 fcloseall F +GLIBC_2.0 fcntl F +GLIBC_2.0 fcvt F +GLIBC_2.0 fcvt_r F +GLIBC_2.0 fdatasync F +GLIBC_2.0 fdopen F +GLIBC_2.0 feof F +GLIBC_2.0 feof_unlocked F +GLIBC_2.0 ferror F +GLIBC_2.0 ferror_unlocked F +GLIBC_2.0 fexecve F +GLIBC_2.0 fflush F +GLIBC_2.0 fflush_unlocked F +GLIBC_2.0 ffs F +GLIBC_2.0 fgetc F +GLIBC_2.0 fgetgrent F +GLIBC_2.0 fgetgrent_r F +GLIBC_2.0 fgetpos F +GLIBC_2.0 fgetpwent F +GLIBC_2.0 fgetpwent_r F +GLIBC_2.0 fgets F +GLIBC_2.0 fgetspent F +GLIBC_2.0 fgetspent_r F +GLIBC_2.0 fileno F +GLIBC_2.0 fileno_unlocked F +GLIBC_2.0 finite F +GLIBC_2.0 finitef F +GLIBC_2.0 finitel F +GLIBC_2.0 flock F +GLIBC_2.0 flockfile F +GLIBC_2.0 fnmatch F +GLIBC_2.0 fopen F +GLIBC_2.0 fopencookie F +GLIBC_2.0 fork F +GLIBC_2.0 fpathconf F +GLIBC_2.0 fprintf F +GLIBC_2.0 fputc F +GLIBC_2.0 fputc_unlocked F +GLIBC_2.0 fputs F +GLIBC_2.0 fread F +GLIBC_2.0 free F +GLIBC_2.0 freeaddrinfo F +GLIBC_2.0 freopen F +GLIBC_2.0 frexp F +GLIBC_2.0 frexpf F +GLIBC_2.0 frexpl F +GLIBC_2.0 fscanf F +GLIBC_2.0 fseek F +GLIBC_2.0 fsetpos F +GLIBC_2.0 fstatfs F +GLIBC_2.0 fsync F +GLIBC_2.0 ftell F +GLIBC_2.0 ftime F +GLIBC_2.0 ftok F +GLIBC_2.0 ftruncate F +GLIBC_2.0 ftrylockfile F +GLIBC_2.0 fts_children F +GLIBC_2.0 fts_close F +GLIBC_2.0 fts_open F +GLIBC_2.0 fts_read F +GLIBC_2.0 fts_set F +GLIBC_2.0 ftw F +GLIBC_2.0 funlockfile F +GLIBC_2.0 fwrite F +GLIBC_2.0 gcvt F +GLIBC_2.0 get_avphys_pages F +GLIBC_2.0 get_current_dir_name F +GLIBC_2.0 get_kernel_syms F +GLIBC_2.0 get_myaddress F +GLIBC_2.0 get_nprocs F +GLIBC_2.0 get_nprocs_conf F +GLIBC_2.0 get_phys_pages F +GLIBC_2.0 getaddrinfo F +GLIBC_2.0 getaliasbyname F +GLIBC_2.0 getaliasbyname_r F +GLIBC_2.0 getaliasent F +GLIBC_2.0 getaliasent_r F +GLIBC_2.0 getc F +GLIBC_2.0 getc_unlocked F +GLIBC_2.0 getchar F +GLIBC_2.0 getchar_unlocked F +GLIBC_2.0 getcwd F +GLIBC_2.0 getdelim F +GLIBC_2.0 getdirentries F +GLIBC_2.0 getdomainname F +GLIBC_2.0 getdtablesize F +GLIBC_2.0 getegid F +GLIBC_2.0 getenv F +GLIBC_2.0 geteuid F +GLIBC_2.0 getfsent F +GLIBC_2.0 getfsfile F +GLIBC_2.0 getfsspec F +GLIBC_2.0 getgid F +GLIBC_2.0 getgrent F +GLIBC_2.0 getgrent_r F +GLIBC_2.0 getgrgid F +GLIBC_2.0 getgrgid_r F +GLIBC_2.0 getgrnam F +GLIBC_2.0 getgrnam_r F +GLIBC_2.0 getgroups F +GLIBC_2.0 gethostbyaddr F +GLIBC_2.0 gethostbyaddr_r F +GLIBC_2.0 gethostbyname F +GLIBC_2.0 gethostbyname2 F +GLIBC_2.0 gethostbyname2_r F +GLIBC_2.0 gethostbyname_r F +GLIBC_2.0 gethostent F +GLIBC_2.0 gethostent_r F +GLIBC_2.0 gethostid F +GLIBC_2.0 gethostname F +GLIBC_2.0 getitimer F +GLIBC_2.0 getline F +GLIBC_2.0 getlogin F +GLIBC_2.0 getlogin_r F +GLIBC_2.0 getmntent F +GLIBC_2.0 getmntent_r F +GLIBC_2.0 getnetbyaddr F +GLIBC_2.0 getnetbyaddr_r F +GLIBC_2.0 getnetbyname F +GLIBC_2.0 getnetbyname_r F +GLIBC_2.0 getnetent F +GLIBC_2.0 getnetent_r F +GLIBC_2.0 getnetgrent F +GLIBC_2.0 getnetgrent_r F +GLIBC_2.0 getopt F +GLIBC_2.0 getopt_long F +GLIBC_2.0 getopt_long_only F +GLIBC_2.0 getpagesize F +GLIBC_2.0 getpass F +GLIBC_2.0 getpeername F +GLIBC_2.0 getpgid F +GLIBC_2.0 getpgrp F +GLIBC_2.0 getpid F +GLIBC_2.0 getppid F +GLIBC_2.0 getpriority F +GLIBC_2.0 getprotobyname F +GLIBC_2.0 getprotobyname_r F +GLIBC_2.0 getprotobynumber F +GLIBC_2.0 getprotobynumber_r F +GLIBC_2.0 getprotoent F +GLIBC_2.0 getprotoent_r F +GLIBC_2.0 getpublickey F +GLIBC_2.0 getpw F +GLIBC_2.0 getpwent F +GLIBC_2.0 getpwent_r F +GLIBC_2.0 getpwnam F +GLIBC_2.0 getpwnam_r F +GLIBC_2.0 getpwuid F +GLIBC_2.0 getpwuid_r F +GLIBC_2.0 getresgid F +GLIBC_2.0 getresuid F +GLIBC_2.0 getrlimit F +GLIBC_2.0 getrpcbyname F +GLIBC_2.0 getrpcbyname_r F +GLIBC_2.0 getrpcbynumber F +GLIBC_2.0 getrpcbynumber_r F +GLIBC_2.0 getrpcent F +GLIBC_2.0 getrpcent_r F +GLIBC_2.0 getrpcport F +GLIBC_2.0 getrusage F +GLIBC_2.0 gets F +GLIBC_2.0 getsecretkey F +GLIBC_2.0 getservbyname F +GLIBC_2.0 getservbyname_r F +GLIBC_2.0 getservbyport F +GLIBC_2.0 getservbyport_r F +GLIBC_2.0 getservent F +GLIBC_2.0 getservent_r F +GLIBC_2.0 getsid F +GLIBC_2.0 getsockname F +GLIBC_2.0 getsockopt F +GLIBC_2.0 getspent F +GLIBC_2.0 getspent_r F +GLIBC_2.0 getspnam F +GLIBC_2.0 getspnam_r F +GLIBC_2.0 getsubopt F +GLIBC_2.0 gettext F +GLIBC_2.0 gettimeofday F +GLIBC_2.0 getttyent F +GLIBC_2.0 getttynam F +GLIBC_2.0 getuid F +GLIBC_2.0 getusershell F +GLIBC_2.0 getutent F +GLIBC_2.0 getutent_r F +GLIBC_2.0 getutid F +GLIBC_2.0 getutid_r F +GLIBC_2.0 getutline F +GLIBC_2.0 getutline_r F +GLIBC_2.0 getw F +GLIBC_2.0 getwd F +GLIBC_2.0 glob F +GLIBC_2.0 glob_pattern_p F +GLIBC_2.0 globfree F +GLIBC_2.0 gmtime F +GLIBC_2.0 gmtime_r F +GLIBC_2.0 group_member F +GLIBC_2.0 gsignal F +GLIBC_2.0 gtty F +GLIBC_2.0 h_errlist D 0x14 +GLIBC_2.0 h_nerr D 0x4 +GLIBC_2.0 hasmntopt F +GLIBC_2.0 hcreate F +GLIBC_2.0 hcreate_r F +GLIBC_2.0 hdestroy F +GLIBC_2.0 hdestroy_r F +GLIBC_2.0 herror F +GLIBC_2.0 hsearch F +GLIBC_2.0 hsearch_r F +GLIBC_2.0 hstrerror F +GLIBC_2.0 htonl F +GLIBC_2.0 htons F +GLIBC_2.0 index F +GLIBC_2.0 inet_addr F +GLIBC_2.0 inet_aton F +GLIBC_2.0 inet_lnaof F +GLIBC_2.0 inet_makeaddr F +GLIBC_2.0 inet_netof F +GLIBC_2.0 inet_network F +GLIBC_2.0 inet_nsap_addr F +GLIBC_2.0 inet_nsap_ntoa F +GLIBC_2.0 inet_ntoa F +GLIBC_2.0 inet_ntop F +GLIBC_2.0 inet_pton F +GLIBC_2.0 init_module F +GLIBC_2.0 initgroups F +GLIBC_2.0 initstate F +GLIBC_2.0 initstate_r F +GLIBC_2.0 innetgr F +GLIBC_2.0 insque F +GLIBC_2.0 ioctl F +GLIBC_2.0 ioperm F +GLIBC_2.0 iopl F +GLIBC_2.0 iruserok F +GLIBC_2.0 isalnum F +GLIBC_2.0 isalpha F +GLIBC_2.0 isascii F +GLIBC_2.0 isatty F +GLIBC_2.0 isblank F +GLIBC_2.0 iscntrl F +GLIBC_2.0 isdigit F +GLIBC_2.0 isfdtype F +GLIBC_2.0 isgraph F +GLIBC_2.0 isinf F +GLIBC_2.0 isinff F +GLIBC_2.0 isinfl F +GLIBC_2.0 islower F +GLIBC_2.0 isnan F +GLIBC_2.0 isnanf F +GLIBC_2.0 isnanl F +GLIBC_2.0 isprint F +GLIBC_2.0 ispunct F +GLIBC_2.0 isspace F +GLIBC_2.0 isupper F +GLIBC_2.0 iswalnum F +GLIBC_2.0 iswalpha F +GLIBC_2.0 iswcntrl F +GLIBC_2.0 iswctype F +GLIBC_2.0 iswdigit F +GLIBC_2.0 iswgraph F +GLIBC_2.0 iswlower F +GLIBC_2.0 iswprint F +GLIBC_2.0 iswpunct F +GLIBC_2.0 iswspace F +GLIBC_2.0 iswupper F +GLIBC_2.0 iswxdigit F +GLIBC_2.0 isxdigit F +GLIBC_2.0 jrand48 F +GLIBC_2.0 jrand48_r F +GLIBC_2.0 kill F +GLIBC_2.0 killpg F +GLIBC_2.0 klogctl F +GLIBC_2.0 l64a F +GLIBC_2.0 labs F +GLIBC_2.0 lchown F +GLIBC_2.0 lckpwdf F +GLIBC_2.0 lcong48 F +GLIBC_2.0 lcong48_r F +GLIBC_2.0 ldexp F +GLIBC_2.0 ldexpf F +GLIBC_2.0 ldexpl F +GLIBC_2.0 ldiv F +GLIBC_2.0 lfind F +GLIBC_2.0 link F +GLIBC_2.0 listen F +GLIBC_2.0 llabs F +GLIBC_2.0 lldiv F +GLIBC_2.0 llseek F +GLIBC_2.0 loc1 D 0x4 +GLIBC_2.0 loc2 D 0x4 +GLIBC_2.0 localeconv F +GLIBC_2.0 localtime F +GLIBC_2.0 localtime_r F +GLIBC_2.0 lockf F +GLIBC_2.0 locs D 0x4 +GLIBC_2.0 longjmp F +GLIBC_2.0 lrand48 F +GLIBC_2.0 lrand48_r F +GLIBC_2.0 lsearch F +GLIBC_2.0 lseek F +GLIBC_2.0 madvise F +GLIBC_2.0 mallinfo F +GLIBC_2.0 malloc F +GLIBC_2.0 malloc_get_state F +GLIBC_2.0 malloc_set_state F +GLIBC_2.0 malloc_stats F +GLIBC_2.0 malloc_trim F +GLIBC_2.0 malloc_usable_size F +GLIBC_2.0 mallopt F +GLIBC_2.0 mallwatch D 0x4 +GLIBC_2.0 mblen F +GLIBC_2.0 mbrlen F +GLIBC_2.0 mbrtowc F +GLIBC_2.0 mbsinit F +GLIBC_2.0 mbsnrtowcs F +GLIBC_2.0 mbsrtowcs F +GLIBC_2.0 mbstowcs F +GLIBC_2.0 mbtowc F +GLIBC_2.0 mcheck F +GLIBC_2.0 mcount F +GLIBC_2.0 memalign F +GLIBC_2.0 memccpy F +GLIBC_2.0 memchr F +GLIBC_2.0 memcmp F +GLIBC_2.0 memcpy F +GLIBC_2.0 memfrob F +GLIBC_2.0 memmem F +GLIBC_2.0 memmove F +GLIBC_2.0 memset F +GLIBC_2.0 mkdir F +GLIBC_2.0 mkfifo F +GLIBC_2.0 mkstemp F +GLIBC_2.0 mktemp F +GLIBC_2.0 mktime F +GLIBC_2.0 mlock F +GLIBC_2.0 mlockall F +GLIBC_2.0 mmap F +GLIBC_2.0 modf F +GLIBC_2.0 modff F +GLIBC_2.0 modfl F +GLIBC_2.0 monstartup F +GLIBC_2.0 mount F +GLIBC_2.0 mprobe F +GLIBC_2.0 mprotect F +GLIBC_2.0 mrand48 F +GLIBC_2.0 mrand48_r F +GLIBC_2.0 mremap F +GLIBC_2.0 msgctl F +GLIBC_2.0 msgget F +GLIBC_2.0 msgrcv F +GLIBC_2.0 msgsnd F +GLIBC_2.0 msync F +GLIBC_2.0 mtrace F +GLIBC_2.0 munlock F +GLIBC_2.0 munlockall F +GLIBC_2.0 munmap F +GLIBC_2.0 muntrace F +GLIBC_2.0 nanosleep F +GLIBC_2.0 nfsservctl F +GLIBC_2.0 nice F +GLIBC_2.0 nl_langinfo F +GLIBC_2.0 nrand48 F +GLIBC_2.0 nrand48_r F +GLIBC_2.0 ntohl F +GLIBC_2.0 ntohs F +GLIBC_2.0 obstack_alloc_failed_handler D 0x4 +GLIBC_2.0 obstack_exit_failure D 0x4 +GLIBC_2.0 obstack_free F +GLIBC_2.0 obstack_printf F +GLIBC_2.0 obstack_vprintf F +GLIBC_2.0 on_exit F +GLIBC_2.0 open F +GLIBC_2.0 open_memstream F +GLIBC_2.0 opendir F +GLIBC_2.0 openlog F +GLIBC_2.0 optarg D 0x4 +GLIBC_2.0 opterr D 0x4 +GLIBC_2.0 optind D 0x4 +GLIBC_2.0 optopt D 0x4 +GLIBC_2.0 parse_printf_format F +GLIBC_2.0 pathconf F +GLIBC_2.0 pause F +GLIBC_2.0 pclose F +GLIBC_2.0 perror F +GLIBC_2.0 personality F +GLIBC_2.0 pipe F +GLIBC_2.0 pmap_getmaps F +GLIBC_2.0 pmap_getport F +GLIBC_2.0 pmap_rmtcall F +GLIBC_2.0 pmap_set F +GLIBC_2.0 pmap_unset F +GLIBC_2.0 poll F +GLIBC_2.0 popen F +GLIBC_2.0 prctl F +GLIBC_2.0 printf F +GLIBC_2.0 profil F +GLIBC_2.0 program_invocation_name D 0x4 +GLIBC_2.0 program_invocation_short_name D 0x4 +GLIBC_2.0 pselect F +GLIBC_2.0 psignal F +GLIBC_2.0 pthread_attr_destroy F +GLIBC_2.0 pthread_attr_getdetachstate F +GLIBC_2.0 pthread_attr_getinheritsched F +GLIBC_2.0 pthread_attr_getschedparam F +GLIBC_2.0 pthread_attr_getschedpolicy F +GLIBC_2.0 pthread_attr_getscope F +GLIBC_2.0 pthread_attr_init F +GLIBC_2.0 pthread_attr_setdetachstate F +GLIBC_2.0 pthread_attr_setinheritsched F +GLIBC_2.0 pthread_attr_setschedparam F +GLIBC_2.0 pthread_attr_setschedpolicy F +GLIBC_2.0 pthread_attr_setscope F +GLIBC_2.0 pthread_cond_broadcast F +GLIBC_2.0 pthread_cond_destroy F +GLIBC_2.0 pthread_cond_init F +GLIBC_2.0 pthread_cond_signal F +GLIBC_2.0 pthread_cond_timedwait F +GLIBC_2.0 pthread_cond_wait F +GLIBC_2.0 pthread_condattr_destroy F +GLIBC_2.0 pthread_condattr_init F +GLIBC_2.0 pthread_equal F +GLIBC_2.0 pthread_exit F +GLIBC_2.0 pthread_getschedparam F +GLIBC_2.0 pthread_mutex_destroy F +GLIBC_2.0 pthread_mutex_init F +GLIBC_2.0 pthread_mutex_lock F +GLIBC_2.0 pthread_mutex_unlock F +GLIBC_2.0 pthread_self F +GLIBC_2.0 pthread_setcancelstate F +GLIBC_2.0 pthread_setcanceltype F +GLIBC_2.0 pthread_setschedparam F +GLIBC_2.0 ptrace F +GLIBC_2.0 putc F +GLIBC_2.0 putc_unlocked F +GLIBC_2.0 putchar F +GLIBC_2.0 putchar_unlocked F +GLIBC_2.0 putenv F +GLIBC_2.0 putpwent F +GLIBC_2.0 puts F +GLIBC_2.0 putspent F +GLIBC_2.0 pututline F +GLIBC_2.0 putw F +GLIBC_2.0 pvalloc F +GLIBC_2.0 qecvt F +GLIBC_2.0 qecvt_r F +GLIBC_2.0 qfcvt F +GLIBC_2.0 qfcvt_r F +GLIBC_2.0 qgcvt F +GLIBC_2.0 qsort F +GLIBC_2.0 query_module F +GLIBC_2.0 quotactl F +GLIBC_2.0 raise F +GLIBC_2.0 rand F +GLIBC_2.0 rand_r F +GLIBC_2.0 random F +GLIBC_2.0 random_r F +GLIBC_2.0 rcmd F +GLIBC_2.0 re_comp F +GLIBC_2.0 re_compile_fastmap F +GLIBC_2.0 re_compile_pattern F +GLIBC_2.0 re_exec F +GLIBC_2.0 re_match F +GLIBC_2.0 re_match_2 F +GLIBC_2.0 re_max_failures D 0x4 +GLIBC_2.0 re_search F +GLIBC_2.0 re_search_2 F +GLIBC_2.0 re_set_registers F +GLIBC_2.0 re_set_syntax F +GLIBC_2.0 re_syntax_options D 0x4 +GLIBC_2.0 read F +GLIBC_2.0 readdir F +GLIBC_2.0 readdir_r F +GLIBC_2.0 readlink F +GLIBC_2.0 readv F +GLIBC_2.0 realloc F +GLIBC_2.0 realpath F +GLIBC_2.0 reboot F +GLIBC_2.0 recv F +GLIBC_2.0 recvfrom F +GLIBC_2.0 recvmsg F +GLIBC_2.0 regcomp F +GLIBC_2.0 regerror F +GLIBC_2.0 regexec F +GLIBC_2.0 regfree F +GLIBC_2.0 register_printf_function F +GLIBC_2.0 registerrpc F +GLIBC_2.0 remove F +GLIBC_2.0 remque F +GLIBC_2.0 rename F +GLIBC_2.0 res_init F +GLIBC_2.0 revoke F +GLIBC_2.0 rewind F +GLIBC_2.0 rewinddir F +GLIBC_2.0 rexec F +GLIBC_2.0 rexecoptions D 0x4 +GLIBC_2.0 rindex F +GLIBC_2.0 rmdir F +GLIBC_2.0 rpc_createerr D 0x10 +GLIBC_2.0 rpmatch F +GLIBC_2.0 rresvport F +GLIBC_2.0 ruserok F +GLIBC_2.0 ruserpass F +GLIBC_2.0 sbrk F +GLIBC_2.0 scalbn F +GLIBC_2.0 scalbnf F +GLIBC_2.0 scalbnl F +GLIBC_2.0 scandir F +GLIBC_2.0 scanf F +GLIBC_2.0 sched_get_priority_max F +GLIBC_2.0 sched_get_priority_min F +GLIBC_2.0 sched_getparam F +GLIBC_2.0 sched_getscheduler F +GLIBC_2.0 sched_rr_get_interval F +GLIBC_2.0 sched_setparam F +GLIBC_2.0 sched_setscheduler F +GLIBC_2.0 sched_yield F +GLIBC_2.0 seed48 F +GLIBC_2.0 seed48_r F +GLIBC_2.0 seekdir F +GLIBC_2.0 select F +GLIBC_2.0 semctl F +GLIBC_2.0 semget F +GLIBC_2.0 semop F +GLIBC_2.0 send F +GLIBC_2.0 sendmsg F +GLIBC_2.0 sendto F +GLIBC_2.0 setaliasent F +GLIBC_2.0 setbuf F +GLIBC_2.0 setbuffer F +GLIBC_2.0 setcontext F +GLIBC_2.0 setdomainname F +GLIBC_2.0 setegid F +GLIBC_2.0 setenv F +GLIBC_2.0 seteuid F +GLIBC_2.0 setfsent F +GLIBC_2.0 setfsgid F +GLIBC_2.0 setfsuid F +GLIBC_2.0 setgid F +GLIBC_2.0 setgrent F +GLIBC_2.0 setgroups F +GLIBC_2.0 sethostent F +GLIBC_2.0 sethostid F +GLIBC_2.0 sethostname F +GLIBC_2.0 setitimer F +GLIBC_2.0 setjmp F +GLIBC_2.0 setlinebuf F +GLIBC_2.0 setlocale F +GLIBC_2.0 setlogin F +GLIBC_2.0 setlogmask F +GLIBC_2.0 setmntent F +GLIBC_2.0 setnetent F +GLIBC_2.0 setnetgrent F +GLIBC_2.0 setpgid F +GLIBC_2.0 setpgrp F +GLIBC_2.0 setpriority F +GLIBC_2.0 setprotoent F +GLIBC_2.0 setpwent F +GLIBC_2.0 setregid F +GLIBC_2.0 setresgid F +GLIBC_2.0 setresuid F +GLIBC_2.0 setreuid F +GLIBC_2.0 setrlimit F +GLIBC_2.0 setrpcent F +GLIBC_2.0 setservent F +GLIBC_2.0 setsid F +GLIBC_2.0 setsockopt F +GLIBC_2.0 setspent F +GLIBC_2.0 setstate F +GLIBC_2.0 setstate_r F +GLIBC_2.0 settimeofday F +GLIBC_2.0 setttyent F +GLIBC_2.0 setuid F +GLIBC_2.0 setusershell F +GLIBC_2.0 setutent F +GLIBC_2.0 setvbuf F +GLIBC_2.0 sgetspent F +GLIBC_2.0 sgetspent_r F +GLIBC_2.0 shmat F +GLIBC_2.0 shmctl F +GLIBC_2.0 shmdt F +GLIBC_2.0 shmget F +GLIBC_2.0 shutdown F +GLIBC_2.0 sigaction F +GLIBC_2.0 sigaddset F +GLIBC_2.0 sigaltstack F +GLIBC_2.0 sigandset F +GLIBC_2.0 sigblock F +GLIBC_2.0 sigdelset F +GLIBC_2.0 sigemptyset F +GLIBC_2.0 sigfillset F +GLIBC_2.0 siggetmask F +GLIBC_2.0 siginterrupt F +GLIBC_2.0 sigisemptyset F +GLIBC_2.0 sigismember F +GLIBC_2.0 siglongjmp F +GLIBC_2.0 signal F +GLIBC_2.0 sigorset F +GLIBC_2.0 sigpause F +GLIBC_2.0 sigpending F +GLIBC_2.0 sigprocmask F +GLIBC_2.0 sigreturn F +GLIBC_2.0 sigsetmask F +GLIBC_2.0 sigstack F +GLIBC_2.0 sigsuspend F +GLIBC_2.0 sigvec F +GLIBC_2.0 sigwait F +GLIBC_2.0 sleep F +GLIBC_2.0 snprintf F +GLIBC_2.0 socket F +GLIBC_2.0 socketpair F +GLIBC_2.0 sprintf F +GLIBC_2.0 srand F +GLIBC_2.0 srand48 F +GLIBC_2.0 srand48_r F +GLIBC_2.0 srandom F +GLIBC_2.0 srandom_r F +GLIBC_2.0 sscanf F +GLIBC_2.0 ssignal F +GLIBC_2.0 sstk F +GLIBC_2.0 statfs F +GLIBC_2.0 stderr D 0x4 +GLIBC_2.0 stdin D 0x4 +GLIBC_2.0 stdout D 0x4 +GLIBC_2.0 step F +GLIBC_2.0 stime F +GLIBC_2.0 stpcpy F +GLIBC_2.0 stpncpy F +GLIBC_2.0 strcasecmp F +GLIBC_2.0 strcat F +GLIBC_2.0 strchr F +GLIBC_2.0 strcmp F +GLIBC_2.0 strcoll F +GLIBC_2.0 strcpy F +GLIBC_2.0 strcspn F +GLIBC_2.0 strdup F +GLIBC_2.0 strerror F +GLIBC_2.0 strerror_r F +GLIBC_2.0 strfmon F +GLIBC_2.0 strfry F +GLIBC_2.0 strftime F +GLIBC_2.0 strlen F +GLIBC_2.0 strncasecmp F +GLIBC_2.0 strncat F +GLIBC_2.0 strncmp F +GLIBC_2.0 strncpy F +GLIBC_2.0 strndup F +GLIBC_2.0 strnlen F +GLIBC_2.0 strpbrk F +GLIBC_2.0 strptime F +GLIBC_2.0 strrchr F +GLIBC_2.0 strsep F +GLIBC_2.0 strsignal F +GLIBC_2.0 strspn F +GLIBC_2.0 strstr F +GLIBC_2.0 strtod F +GLIBC_2.0 strtof F +GLIBC_2.0 strtok F +GLIBC_2.0 strtok_r F +GLIBC_2.0 strtol F +GLIBC_2.0 strtold F +GLIBC_2.0 strtoll F +GLIBC_2.0 strtoq F +GLIBC_2.0 strtoul F +GLIBC_2.0 strtoull F +GLIBC_2.0 strtouq F +GLIBC_2.0 strxfrm F +GLIBC_2.0 stty F +GLIBC_2.0 svc_exit F +GLIBC_2.0 svc_fdset D 0x80 +GLIBC_2.0 svc_getreq F +GLIBC_2.0 svc_getreqset F +GLIBC_2.0 svc_register F +GLIBC_2.0 svc_run F +GLIBC_2.0 svc_sendreply F +GLIBC_2.0 svc_unregister F +GLIBC_2.0 svcauthdes_stats D 0xc +GLIBC_2.0 svcerr_auth F +GLIBC_2.0 svcerr_decode F +GLIBC_2.0 svcerr_noproc F +GLIBC_2.0 svcerr_noprog F +GLIBC_2.0 svcerr_progvers F +GLIBC_2.0 svcerr_systemerr F +GLIBC_2.0 svcerr_weakauth F +GLIBC_2.0 svcfd_create F +GLIBC_2.0 svcraw_create F +GLIBC_2.0 svctcp_create F +GLIBC_2.0 svcudp_bufcreate F +GLIBC_2.0 svcudp_create F +GLIBC_2.0 svcudp_enablecache F +GLIBC_2.0 swab F +GLIBC_2.0 swapoff F +GLIBC_2.0 swapon F +GLIBC_2.0 symlink F +GLIBC_2.0 sync F +GLIBC_2.0 sys_errlist D 0x1ec +GLIBC_2.0 sys_nerr D 0x4 +GLIBC_2.0 sys_sigabbrev D 0x80 +GLIBC_2.0 sys_siglist D 0x80 +GLIBC_2.0 syscall F +GLIBC_2.0 sysconf F +GLIBC_2.0 sysctl F +GLIBC_2.0 sysinfo F +GLIBC_2.0 syslog F +GLIBC_2.0 system F +GLIBC_2.0 tcdrain F +GLIBC_2.0 tcflow F +GLIBC_2.0 tcflush F +GLIBC_2.0 tcgetattr F +GLIBC_2.0 tcgetpgrp F +GLIBC_2.0 tcsendbreak F +GLIBC_2.0 tcsetattr F +GLIBC_2.0 tcsetpgrp F +GLIBC_2.0 tdelete F +GLIBC_2.0 telldir F +GLIBC_2.0 tempnam F +GLIBC_2.0 textdomain F +GLIBC_2.0 tfind F +GLIBC_2.0 time F +GLIBC_2.0 timegm F +GLIBC_2.0 timelocal F +GLIBC_2.0 times F +GLIBC_2.0 timezone D 0x4 +GLIBC_2.0 tmpfile F +GLIBC_2.0 tmpnam F +GLIBC_2.0 tmpnam_r F +GLIBC_2.0 toascii F +GLIBC_2.0 tolower F +GLIBC_2.0 toupper F +GLIBC_2.0 towctrans F +GLIBC_2.0 towlower F +GLIBC_2.0 towupper F +GLIBC_2.0 tr_break F +GLIBC_2.0 truncate F +GLIBC_2.0 tsearch F +GLIBC_2.0 ttyname F +GLIBC_2.0 ttyname_r F +GLIBC_2.0 ttyslot F +GLIBC_2.0 twalk F +GLIBC_2.0 tzname D 0x8 +GLIBC_2.0 tzset F +GLIBC_2.0 ualarm F +GLIBC_2.0 ulckpwdf F +GLIBC_2.0 ulimit F +GLIBC_2.0 umask F +GLIBC_2.0 umount F +GLIBC_2.0 uname F +GLIBC_2.0 ungetc F +GLIBC_2.0 unlink F +GLIBC_2.0 unsetenv F +GLIBC_2.0 updwtmp F +GLIBC_2.0 uselib F +GLIBC_2.0 usleep F +GLIBC_2.0 ustat F +GLIBC_2.0 utime F +GLIBC_2.0 utimes F +GLIBC_2.0 utmpname F +GLIBC_2.0 valloc F +GLIBC_2.0 vasprintf F +GLIBC_2.0 vdprintf F +GLIBC_2.0 verr F +GLIBC_2.0 verrx F +GLIBC_2.0 vfork F +GLIBC_2.0 vfprintf F +GLIBC_2.0 vfscanf F +GLIBC_2.0 vhangup F +GLIBC_2.0 vlimit F +GLIBC_2.0 vm86 F +GLIBC_2.0 vprintf F +GLIBC_2.0 vscanf F +GLIBC_2.0 vsnprintf F +GLIBC_2.0 vsprintf F +GLIBC_2.0 vsscanf F +GLIBC_2.0 vsyslog F +GLIBC_2.0 vtimes F +GLIBC_2.0 vwarn F +GLIBC_2.0 vwarnx F +GLIBC_2.0 wait F +GLIBC_2.0 wait3 F +GLIBC_2.0 wait4 F +GLIBC_2.0 waitpid F +GLIBC_2.0 warn F +GLIBC_2.0 warnx F +GLIBC_2.0 wcpcpy F +GLIBC_2.0 wcpncpy F +GLIBC_2.0 wcrtomb F +GLIBC_2.0 wcscat F +GLIBC_2.0 wcschr F +GLIBC_2.0 wcscmp F +GLIBC_2.0 wcscoll F +GLIBC_2.0 wcscpy F +GLIBC_2.0 wcscspn F +GLIBC_2.0 wcsdup F +GLIBC_2.0 wcslen F +GLIBC_2.0 wcsncat F +GLIBC_2.0 wcsncmp F +GLIBC_2.0 wcsncpy F +GLIBC_2.0 wcsnrtombs F +GLIBC_2.0 wcspbrk F +GLIBC_2.0 wcsrchr F +GLIBC_2.0 wcsrtombs F +GLIBC_2.0 wcsspn F +GLIBC_2.0 wcsstr F +GLIBC_2.0 wcstod F +GLIBC_2.0 wcstof F +GLIBC_2.0 wcstok F +GLIBC_2.0 wcstol F +GLIBC_2.0 wcstold F +GLIBC_2.0 wcstombs F +GLIBC_2.0 wcstoq F +GLIBC_2.0 wcstoul F +GLIBC_2.0 wcstouq F +GLIBC_2.0 wcswidth F +GLIBC_2.0 wcsxfrm F +GLIBC_2.0 wctob F +GLIBC_2.0 wctomb F +GLIBC_2.0 wctrans F +GLIBC_2.0 wctype F +GLIBC_2.0 wcwidth F +GLIBC_2.0 wmemchr F +GLIBC_2.0 wmemcmp F +GLIBC_2.0 wmemcpy F +GLIBC_2.0 wmemmove F +GLIBC_2.0 wmemset F +GLIBC_2.0 write F +GLIBC_2.0 writev F +GLIBC_2.0 xdr_accepted_reply F +GLIBC_2.0 xdr_array F +GLIBC_2.0 xdr_authunix_parms F +GLIBC_2.0 xdr_bool F +GLIBC_2.0 xdr_bytes F +GLIBC_2.0 xdr_callhdr F +GLIBC_2.0 xdr_callmsg F +GLIBC_2.0 xdr_char F +GLIBC_2.0 xdr_cryptkeyarg F +GLIBC_2.0 xdr_cryptkeyarg2 F +GLIBC_2.0 xdr_cryptkeyres F +GLIBC_2.0 xdr_des_block F +GLIBC_2.0 xdr_double F +GLIBC_2.0 xdr_enum F +GLIBC_2.0 xdr_float F +GLIBC_2.0 xdr_free F +GLIBC_2.0 xdr_int F +GLIBC_2.0 xdr_key_netstarg F +GLIBC_2.0 xdr_key_netstres F +GLIBC_2.0 xdr_keybuf F +GLIBC_2.0 xdr_keystatus F +GLIBC_2.0 xdr_long F +GLIBC_2.0 xdr_netobj F +GLIBC_2.0 xdr_opaque F +GLIBC_2.0 xdr_opaque_auth F +GLIBC_2.0 xdr_pmap F +GLIBC_2.0 xdr_pmaplist F +GLIBC_2.0 xdr_pointer F +GLIBC_2.0 xdr_reference F +GLIBC_2.0 xdr_rejected_reply F +GLIBC_2.0 xdr_replymsg F +GLIBC_2.0 xdr_rmtcall_args F +GLIBC_2.0 xdr_rmtcallres F +GLIBC_2.0 xdr_short F +GLIBC_2.0 xdr_string F +GLIBC_2.0 xdr_u_char F +GLIBC_2.0 xdr_u_int F +GLIBC_2.0 xdr_u_long F +GLIBC_2.0 xdr_u_short F +GLIBC_2.0 xdr_union F +GLIBC_2.0 xdr_vector F +GLIBC_2.0 xdr_void F +GLIBC_2.0 xdr_wrapstring F +GLIBC_2.0 xdrmem_create F +GLIBC_2.0 xdrrec_create F +GLIBC_2.0 xdrrec_endofrecord F +GLIBC_2.0 xdrrec_eof F +GLIBC_2.0 xdrrec_skiprecord F +GLIBC_2.0 xdrstdio_create F +GLIBC_2.0 xencrypt F +GLIBC_2.0 xprt_register F +GLIBC_2.0 xprt_unregister F +GLIBC_2.1 GLIBC_2.1 A +GLIBC_2.1 _IO_2_1_stderr_ D 0x98 +GLIBC_2.1 _IO_2_1_stdin_ D 0x98 +GLIBC_2.1 _IO_2_1_stdout_ D 0x98 +GLIBC_2.1 _IO_do_write F +GLIBC_2.1 _IO_fclose F +GLIBC_2.1 _IO_fdopen F +GLIBC_2.1 _IO_fgetpos64 F +GLIBC_2.1 _IO_file_attach F +GLIBC_2.1 _IO_file_close_it F +GLIBC_2.1 _IO_file_finish F +GLIBC_2.1 _IO_file_fopen F +GLIBC_2.1 _IO_file_init F +GLIBC_2.1 _IO_file_overflow F +GLIBC_2.1 _IO_file_seekoff F +GLIBC_2.1 _IO_file_setbuf F +GLIBC_2.1 _IO_file_sync F +GLIBC_2.1 _IO_file_underflow F +GLIBC_2.1 _IO_file_write F +GLIBC_2.1 _IO_file_xsputn F +GLIBC_2.1 _IO_fopen F +GLIBC_2.1 _IO_fsetpos64 F +GLIBC_2.1 _IO_getline_info F +GLIBC_2.1 _IO_popen F +GLIBC_2.1 _IO_proc_close F +GLIBC_2.1 _IO_proc_open F +GLIBC_2.1 __asprintf F +GLIBC_2.1 __backtrace F +GLIBC_2.1 __backtrace_symbols F +GLIBC_2.1 __backtrace_symbols_fd F +GLIBC_2.1 __duplocale F +GLIBC_2.1 __freelocale F +GLIBC_2.1 __fxstat64 F +GLIBC_2.1 __isalnum_l F +GLIBC_2.1 __isalpha_l F +GLIBC_2.1 __isascii_l F +GLIBC_2.1 __isblank_l F +GLIBC_2.1 __iscntrl_l F +GLIBC_2.1 __isdigit_l F +GLIBC_2.1 __isgraph_l F +GLIBC_2.1 __islower_l F +GLIBC_2.1 __isprint_l F +GLIBC_2.1 __ispunct_l F +GLIBC_2.1 __isspace_l F +GLIBC_2.1 __isupper_l F +GLIBC_2.1 __iswalnum_l F +GLIBC_2.1 __iswalpha_l F +GLIBC_2.1 __iswblank_l F +GLIBC_2.1 __iswcntrl_l F +GLIBC_2.1 __iswctype_l F +GLIBC_2.1 __iswdigit_l F +GLIBC_2.1 __iswgraph_l F +GLIBC_2.1 __iswlower_l F +GLIBC_2.1 __iswprint_l F +GLIBC_2.1 __iswpunct_l F +GLIBC_2.1 __iswspace_l F +GLIBC_2.1 __iswupper_l F +GLIBC_2.1 __iswxdigit_l F +GLIBC_2.1 __isxdigit_l F +GLIBC_2.1 __key_decryptsession_pk_LOCAL D 0x4 +GLIBC_2.1 __key_encryptsession_pk_LOCAL D 0x4 +GLIBC_2.1 __key_gendes_LOCAL D 0x4 +GLIBC_2.1 __libc_allocate_rtsig F +GLIBC_2.1 __libc_current_sigrtmax F +GLIBC_2.1 __libc_current_sigrtmin F +GLIBC_2.1 __libc_freeres F +GLIBC_2.1 __libc_sa_len F +GLIBC_2.1 __lxstat64 F +GLIBC_2.1 __newlocale F +GLIBC_2.1 __poll F +GLIBC_2.1 __pread64 F +GLIBC_2.1 __pwrite64 F +GLIBC_2.1 __rawmemchr F +GLIBC_2.1 __signbit F +GLIBC_2.1 __signbitf F +GLIBC_2.1 __signbitl F +GLIBC_2.1 __strcasecmp_l F +GLIBC_2.1 __strcasestr F +GLIBC_2.1 __strcoll_l F +GLIBC_2.1 __strfmon_l F +GLIBC_2.1 __strncasecmp_l F +GLIBC_2.1 __strtod_l F +GLIBC_2.1 __strtof_l F +GLIBC_2.1 __strtol_l F +GLIBC_2.1 __strtold_l F +GLIBC_2.1 __strtoll_l F +GLIBC_2.1 __strtoul_l F +GLIBC_2.1 __strtoull_l F +GLIBC_2.1 __strxfrm_l F +GLIBC_2.1 __toascii_l F +GLIBC_2.1 __tolower_l F +GLIBC_2.1 __toupper_l F +GLIBC_2.1 __towctrans F +GLIBC_2.1 __towctrans_l F +GLIBC_2.1 __towlower_l F +GLIBC_2.1 __towupper_l F +GLIBC_2.1 __wcscasecmp_l F +GLIBC_2.1 __wcscoll_l F +GLIBC_2.1 __wcsncasecmp_l F +GLIBC_2.1 __wcstod_l F +GLIBC_2.1 __wcstof_l F +GLIBC_2.1 __wcstol_l F +GLIBC_2.1 __wcstold_l F +GLIBC_2.1 __wcstoll_l F +GLIBC_2.1 __wcstoul_l F +GLIBC_2.1 __wcstoull_l F +GLIBC_2.1 __wcsxfrm_l F +GLIBC_2.1 __wctype_l F +GLIBC_2.1 __xstat64 F +GLIBC_2.1 _authenticate F +GLIBC_2.1 _dl_mcount_wrapper F +GLIBC_2.1 _dl_mcount_wrapper_check F +GLIBC_2.1 _sys_errlist D 0x1f4 +GLIBC_2.1 _sys_nerr D 0x4 +GLIBC_2.1 _sys_siglist D 0x100 +GLIBC_2.1 addseverity F +GLIBC_2.1 alphasort64 F +GLIBC_2.1 argp_err_exit_status D 0x4 +GLIBC_2.1 argp_error F +GLIBC_2.1 argp_failure F +GLIBC_2.1 argp_help F +GLIBC_2.1 argp_parse F +GLIBC_2.1 argp_program_bug_address D 0x4 +GLIBC_2.1 argp_program_version D 0x4 +GLIBC_2.1 argp_program_version_hook D 0x4 +GLIBC_2.1 argp_state_help F +GLIBC_2.1 argp_usage F +GLIBC_2.1 authdes_create F +GLIBC_2.1 authdes_getucred F +GLIBC_2.1 authdes_pk_create F +GLIBC_2.1 backtrace F +GLIBC_2.1 backtrace_symbols F +GLIBC_2.1 backtrace_symbols_fd F +GLIBC_2.1 capget F +GLIBC_2.1 capset F +GLIBC_2.1 cbc_crypt F +GLIBC_2.1 chown F +GLIBC_2.1 clntunix_create F +GLIBC_2.1 creat64 F +GLIBC_2.1 des_setparity F +GLIBC_2.1 ecb_crypt F +GLIBC_2.1 endutxent F +GLIBC_2.1 fattach F +GLIBC_2.1 fclose F +GLIBC_2.1 fdetach F +GLIBC_2.1 fdopen F +GLIBC_2.1 ffsl F +GLIBC_2.1 ffsll F +GLIBC_2.1 fgetc_unlocked F +GLIBC_2.1 fgetpos64 F +GLIBC_2.1 fgets_unlocked F +GLIBC_2.1 fmtmsg F +GLIBC_2.1 fopen F +GLIBC_2.1 fopen64 F +GLIBC_2.1 fputs_unlocked F +GLIBC_2.1 fread_unlocked F +GLIBC_2.1 freopen64 F +GLIBC_2.1 fseeko F +GLIBC_2.1 fseeko64 F +GLIBC_2.1 fsetpos64 F +GLIBC_2.1 fstatfs64 F +GLIBC_2.1 fstatvfs F +GLIBC_2.1 fstatvfs64 F +GLIBC_2.1 ftello F +GLIBC_2.1 ftello64 F +GLIBC_2.1 ftruncate64 F +GLIBC_2.1 ftw64 F +GLIBC_2.1 fwrite_unlocked F +GLIBC_2.1 gai_strerror F +GLIBC_2.1 getcontext F +GLIBC_2.1 getdate F +GLIBC_2.1 getdate_err D 0x4 +GLIBC_2.1 getdate_r F +GLIBC_2.1 getmsg F +GLIBC_2.1 getnameinfo F +GLIBC_2.1 getnetname F +GLIBC_2.1 getpmsg F +GLIBC_2.1 getpt F +GLIBC_2.1 getrlimit64 F +GLIBC_2.1 getutxent F +GLIBC_2.1 getutxid F +GLIBC_2.1 getutxline F +GLIBC_2.1 glob64 F +GLIBC_2.1 globfree64 F +GLIBC_2.1 gnu_get_libc_release F +GLIBC_2.1 gnu_get_libc_version F +GLIBC_2.1 grantpt F +GLIBC_2.1 host2netname F +GLIBC_2.1 iconv F +GLIBC_2.1 iconv_close F +GLIBC_2.1 iconv_open F +GLIBC_2.1 if_freenameindex F +GLIBC_2.1 if_indextoname F +GLIBC_2.1 if_nameindex F +GLIBC_2.1 if_nametoindex F +GLIBC_2.1 in6addr_any D 0x10 +GLIBC_2.1 in6addr_loopback D 0x10 +GLIBC_2.1 isastream F +GLIBC_2.1 iswblank F +GLIBC_2.1 key_decryptsession F +GLIBC_2.1 key_decryptsession_pk F +GLIBC_2.1 key_encryptsession F +GLIBC_2.1 key_encryptsession_pk F +GLIBC_2.1 key_gendes F +GLIBC_2.1 key_get_conv F +GLIBC_2.1 key_secretkey_is_set F +GLIBC_2.1 key_setnet F +GLIBC_2.1 key_setsecret F +GLIBC_2.1 lockf64 F +GLIBC_2.1 lseek64 F +GLIBC_2.1 makecontext F +GLIBC_2.1 mempcpy F +GLIBC_2.1 mmap64 F +GLIBC_2.1 modify_ldt F +GLIBC_2.1 netname2host F +GLIBC_2.1 netname2user F +GLIBC_2.1 nftw F +GLIBC_2.1 nftw64 F +GLIBC_2.1 ntp_adjtime F +GLIBC_2.1 ntp_gettime F +GLIBC_2.1 open64 F +GLIBC_2.1 passwd2des F +GLIBC_2.1 pclose F +GLIBC_2.1 popen F +GLIBC_2.1 pread F +GLIBC_2.1 pread64 F +GLIBC_2.1 printf_size F +GLIBC_2.1 printf_size_info F +GLIBC_2.1 pthread_attr_init F +GLIBC_2.1 ptsname F +GLIBC_2.1 ptsname_r F +GLIBC_2.1 putgrent F +GLIBC_2.1 putmsg F +GLIBC_2.1 putpmsg F +GLIBC_2.1 pututxline F +GLIBC_2.1 pwrite F +GLIBC_2.1 pwrite64 F +GLIBC_2.1 rawmemchr F +GLIBC_2.1 readdir64 F +GLIBC_2.1 readdir64_r F +GLIBC_2.1 rtime F +GLIBC_2.1 scalbln F +GLIBC_2.1 scalblnf F +GLIBC_2.1 scalblnl F +GLIBC_2.1 scandir64 F +GLIBC_2.1 sendfile F +GLIBC_2.1 setrlimit64 F +GLIBC_2.1 setutxent F +GLIBC_2.1 sighold F +GLIBC_2.1 sigignore F +GLIBC_2.1 sigqueue F +GLIBC_2.1 sigrelse F +GLIBC_2.1 sigset F +GLIBC_2.1 sigtimedwait F +GLIBC_2.1 sigwaitinfo F +GLIBC_2.1 statfs64 F +GLIBC_2.1 statvfs F +GLIBC_2.1 statvfs64 F +GLIBC_2.1 strcasestr F +GLIBC_2.1 strtoimax F +GLIBC_2.1 strtoumax F +GLIBC_2.1 strverscmp F +GLIBC_2.1 svcunix_create F +GLIBC_2.1 svcunixfd_create F +GLIBC_2.1 swapcontext F +GLIBC_2.1 sys_errlist D 0x1f4 +GLIBC_2.1 sys_nerr D 0x4 +GLIBC_2.1 sys_sigabbrev D 0x100 +GLIBC_2.1 sys_siglist D 0x100 +GLIBC_2.1 sysv_signal F +GLIBC_2.1 tcgetsid F +GLIBC_2.1 tdestroy F +GLIBC_2.1 tmpfile F +GLIBC_2.1 tmpfile64 F +GLIBC_2.1 truncate64 F +GLIBC_2.1 umount2 F +GLIBC_2.1 unlockpt F +GLIBC_2.1 updwtmpx F +GLIBC_2.1 user2netname F +GLIBC_2.1 utmpxname F +GLIBC_2.1 versionsort F +GLIBC_2.1 versionsort64 F +GLIBC_2.1 waitid F +GLIBC_2.1 wcscasecmp F +GLIBC_2.1 wcsncasecmp F +GLIBC_2.1 wcsnlen F +GLIBC_2.1 wcstoimax F +GLIBC_2.1 wcstoll F +GLIBC_2.1 wcstoull F +GLIBC_2.1 wcstoumax F +GLIBC_2.1 wcswcs F +GLIBC_2.1 wordexp F +GLIBC_2.1 wordfree F +GLIBC_2.1 xdecrypt F +GLIBC_2.1 xdr_authdes_cred F +GLIBC_2.1 xdr_authdes_verf F +GLIBC_2.1 xdr_getcredres F +GLIBC_2.1 xdr_int16_t F +GLIBC_2.1 xdr_int32_t F +GLIBC_2.1 xdr_int8_t F +GLIBC_2.1 xdr_netnamestr F +GLIBC_2.1 xdr_sizeof F +GLIBC_2.1 xdr_uint16_t F +GLIBC_2.1 xdr_uint32_t F +GLIBC_2.1 xdr_uint8_t F +GLIBC_2.1 xdr_unixcred F +GLIBC_2.1.1 GLIBC_2.1.1 A +GLIBC_2.1.1 _Exit F +GLIBC_2.1.1 __memcpy_by2 F +GLIBC_2.1.1 __memcpy_by4 F +GLIBC_2.1.1 __memcpy_c F +GLIBC_2.1.1 __memcpy_g F +GLIBC_2.1.1 __mempcpy_by2 F +GLIBC_2.1.1 __mempcpy_by4 F +GLIBC_2.1.1 __mempcpy_byn F +GLIBC_2.1.1 __mempcpy_small F +GLIBC_2.1.1 __memset_cc F +GLIBC_2.1.1 __memset_ccn_by2 F +GLIBC_2.1.1 __memset_ccn_by4 F +GLIBC_2.1.1 __memset_cg F +GLIBC_2.1.1 __memset_gcn_by2 F +GLIBC_2.1.1 __memset_gcn_by4 F +GLIBC_2.1.1 __memset_gg F +GLIBC_2.1.1 __stpcpy_g F +GLIBC_2.1.1 __stpcpy_small F +GLIBC_2.1.1 __strcat_c F +GLIBC_2.1.1 __strcat_g F +GLIBC_2.1.1 __strchr_c F +GLIBC_2.1.1 __strchr_g F +GLIBC_2.1.1 __strchrnul_c F +GLIBC_2.1.1 __strchrnul_g F +GLIBC_2.1.1 __strcmp_gg F +GLIBC_2.1.1 __strcpy_g F +GLIBC_2.1.1 __strcpy_small F +GLIBC_2.1.1 __strcspn_c1 F +GLIBC_2.1.1 __strcspn_c2 F +GLIBC_2.1.1 __strcspn_c3 F +GLIBC_2.1.1 __strcspn_cg F +GLIBC_2.1.1 __strcspn_g F +GLIBC_2.1.1 __strlen_g F +GLIBC_2.1.1 __strncat_g F +GLIBC_2.1.1 __strncmp_g F +GLIBC_2.1.1 __strncpy_by2 F +GLIBC_2.1.1 __strncpy_by4 F +GLIBC_2.1.1 __strncpy_byn F +GLIBC_2.1.1 __strncpy_gg F +GLIBC_2.1.1 __strpbrk_c2 F +GLIBC_2.1.1 __strpbrk_c3 F +GLIBC_2.1.1 __strpbrk_cg F +GLIBC_2.1.1 __strpbrk_g F +GLIBC_2.1.1 __strrchr_c F +GLIBC_2.1.1 __strrchr_g F +GLIBC_2.1.1 __strsep_1c F +GLIBC_2.1.1 __strsep_2c F +GLIBC_2.1.1 __strsep_3c F +GLIBC_2.1.1 __strsep_g F +GLIBC_2.1.1 __strspn_c1 F +GLIBC_2.1.1 __strspn_c2 F +GLIBC_2.1.1 __strspn_c3 F +GLIBC_2.1.1 __strspn_cg F +GLIBC_2.1.1 __strspn_g F +GLIBC_2.1.1 __strstr_cg F +GLIBC_2.1.1 __strstr_g F +GLIBC_2.1.1 __strtok_r_1c F +GLIBC_2.1.1 __strverscmp F +GLIBC_2.1.1 getutmp F +GLIBC_2.1.1 getutmpx F +GLIBC_2.1.1 imaxabs F +GLIBC_2.1.1 imaxdiv F +GLIBC_2.1.1 strchrnul F +GLIBC_2.1.1 xdr_hyper F +GLIBC_2.1.1 xdr_int64_t F +GLIBC_2.1.1 xdr_longlong_t F +GLIBC_2.1.1 xdr_u_hyper F +GLIBC_2.1.1 xdr_u_longlong_t F +GLIBC_2.1.1 xdr_uint64_t F +GLIBC_2.1.2 GLIBC_2.1.2 A +GLIBC_2.1.2 __vfork F +GLIBC_2.1.2 getaliasbyname_r F +GLIBC_2.1.2 getaliasent_r F +GLIBC_2.1.2 getgrent_r F +GLIBC_2.1.2 getgrgid_r F +GLIBC_2.1.2 getgrnam_r F +GLIBC_2.1.2 gethostbyaddr_r F +GLIBC_2.1.2 gethostbyname2_r F +GLIBC_2.1.2 gethostbyname_r F +GLIBC_2.1.2 gethostent_r F +GLIBC_2.1.2 getnetbyaddr_r F +GLIBC_2.1.2 getnetbyname_r F +GLIBC_2.1.2 getnetent_r F +GLIBC_2.1.2 getprotobyname_r F +GLIBC_2.1.2 getprotobynumber_r F +GLIBC_2.1.2 getprotoent_r F +GLIBC_2.1.2 getpwent_r F +GLIBC_2.1.2 getpwnam_r F +GLIBC_2.1.2 getpwuid_r F +GLIBC_2.1.2 getrpcbyname_r F +GLIBC_2.1.2 getrpcbynumber_r F +GLIBC_2.1.2 getrpcent_r F +GLIBC_2.1.2 getservbyname_r F +GLIBC_2.1.2 getservbyport_r F +GLIBC_2.1.2 getservent_r F +GLIBC_2.1.2 getspent_r F +GLIBC_2.1.2 getspnam_r F +GLIBC_2.1.3 GLIBC_2.1.3 A +GLIBC_2.1.3 __cxa_atexit F +GLIBC_2.1.3 __cxa_finalize F +GLIBC_2.1.3 __sigsuspend F +GLIBC_2.10 GLIBC_2.10 A +GLIBC_2.10 __cxa_at_quick_exit F +GLIBC_2.10 __posix_getopt F +GLIBC_2.10 accept4 F +GLIBC_2.10 endsgent F +GLIBC_2.10 fallocate F +GLIBC_2.10 fgetsgent F +GLIBC_2.10 fgetsgent_r F +GLIBC_2.10 getsgent F +GLIBC_2.10 getsgent_r F +GLIBC_2.10 getsgnam F +GLIBC_2.10 getsgnam_r F +GLIBC_2.10 malloc_info F +GLIBC_2.10 preadv F +GLIBC_2.10 preadv64 F +GLIBC_2.10 psiginfo F +GLIBC_2.10 putsgent F +GLIBC_2.10 pwritev F +GLIBC_2.10 pwritev64 F +GLIBC_2.10 quick_exit F +GLIBC_2.10 register_printf_modifier F +GLIBC_2.10 register_printf_specifier F +GLIBC_2.10 register_printf_type F +GLIBC_2.10 setsgent F +GLIBC_2.10 sgetsgent F +GLIBC_2.10 sgetsgent_r F +GLIBC_2.11 GLIBC_2.11 A +GLIBC_2.11 __longjmp_chk F +GLIBC_2.11 execvpe F +GLIBC_2.11 fallocate64 F +GLIBC_2.11 mkostemps F +GLIBC_2.11 mkostemps64 F +GLIBC_2.11 mkstemps F +GLIBC_2.11 mkstemps64 F +GLIBC_2.12 GLIBC_2.12 A +GLIBC_2.12 _sys_errlist D 0x21c +GLIBC_2.12 _sys_nerr D 0x4 +GLIBC_2.12 ntp_gettimex F +GLIBC_2.12 recvmmsg F +GLIBC_2.12 sys_errlist D 0x21c +GLIBC_2.12 sys_nerr D 0x4 +GLIBC_2.13 GLIBC_2.13 A +GLIBC_2.13 __fentry__ F +GLIBC_2.13 fanotify_init F +GLIBC_2.13 fanotify_mark F +GLIBC_2.13 prlimit F +GLIBC_2.13 prlimit64 F +GLIBC_2.14 GLIBC_2.14 A +GLIBC_2.14 clock_adjtime F +GLIBC_2.14 name_to_handle_at F +GLIBC_2.14 open_by_handle_at F +GLIBC_2.14 sendmmsg F +GLIBC_2.14 setns F +GLIBC_2.14 syncfs F +GLIBC_2.15 GLIBC_2.15 A +GLIBC_2.15 __fdelt_chk F +GLIBC_2.15 __fdelt_warn F +GLIBC_2.15 posix_spawn F +GLIBC_2.15 posix_spawnp F +GLIBC_2.15 process_vm_readv F +GLIBC_2.15 process_vm_writev F +GLIBC_2.15 scandirat F +GLIBC_2.15 scandirat64 F +GLIBC_2.16 GLIBC_2.16 A +GLIBC_2.16 __getauxval F +GLIBC_2.16 __poll_chk F +GLIBC_2.16 __ppoll_chk F +GLIBC_2.16 aligned_alloc F +GLIBC_2.16 c16rtomb F +GLIBC_2.16 c32rtomb F +GLIBC_2.16 getauxval F +GLIBC_2.16 mbrtoc16 F +GLIBC_2.16 mbrtoc32 F +GLIBC_2.16 timespec_get F +GLIBC_2.17 GLIBC_2.17 A +GLIBC_2.17 clock_getcpuclockid F +GLIBC_2.17 clock_getres F +GLIBC_2.17 clock_gettime F +GLIBC_2.17 clock_nanosleep F +GLIBC_2.17 clock_settime F +GLIBC_2.17 secure_getenv F +GLIBC_2.18 GLIBC_2.18 A +GLIBC_2.18 __cxa_thread_atexit_impl F +GLIBC_2.2 GLIBC_2.2 A +GLIBC_2.2 _IO_adjust_wcolumn F +GLIBC_2.2 _IO_fgetpos F +GLIBC_2.2 _IO_fgetpos64 F +GLIBC_2.2 _IO_free_wbackup_area F +GLIBC_2.2 _IO_fsetpos F +GLIBC_2.2 _IO_fsetpos64 F +GLIBC_2.2 _IO_init_wmarker F +GLIBC_2.2 _IO_iter_begin F +GLIBC_2.2 _IO_iter_end F +GLIBC_2.2 _IO_iter_file F +GLIBC_2.2 _IO_iter_next F +GLIBC_2.2 _IO_least_wmarker F +GLIBC_2.2 _IO_list_lock F +GLIBC_2.2 _IO_list_resetlock F +GLIBC_2.2 _IO_list_unlock F +GLIBC_2.2 _IO_seekwmark F +GLIBC_2.2 _IO_sputbackwc F +GLIBC_2.2 _IO_sungetwc F +GLIBC_2.2 _IO_switch_to_main_wget_area F +GLIBC_2.2 _IO_switch_to_wbackup_area F +GLIBC_2.2 _IO_switch_to_wget_mode F +GLIBC_2.2 _IO_unsave_wmarkers F +GLIBC_2.2 _IO_wdefault_doallocate F +GLIBC_2.2 _IO_wdefault_finish F +GLIBC_2.2 _IO_wdefault_pbackfail F +GLIBC_2.2 _IO_wdefault_uflow F +GLIBC_2.2 _IO_wdefault_xsgetn F +GLIBC_2.2 _IO_wdefault_xsputn F +GLIBC_2.2 _IO_wdo_write F +GLIBC_2.2 _IO_wdoallocbuf F +GLIBC_2.2 _IO_wfile_jumps D 0x54 +GLIBC_2.2 _IO_wfile_overflow F +GLIBC_2.2 _IO_wfile_seekoff F +GLIBC_2.2 _IO_wfile_sync F +GLIBC_2.2 _IO_wfile_underflow F +GLIBC_2.2 _IO_wfile_xsputn F +GLIBC_2.2 _IO_wmarker_delta F +GLIBC_2.2 _IO_wsetb F +GLIBC_2.2 __assert F +GLIBC_2.2 __ctype32_tolower D 0x4 +GLIBC_2.2 __ctype32_toupper D 0x4 +GLIBC_2.2 __cyg_profile_func_enter F +GLIBC_2.2 __cyg_profile_func_exit F +GLIBC_2.2 __endmntent F +GLIBC_2.2 __fbufsize F +GLIBC_2.2 __flbf F +GLIBC_2.2 __fpending F +GLIBC_2.2 __fpurge F +GLIBC_2.2 __freadable F +GLIBC_2.2 __freading F +GLIBC_2.2 __fsetlocking F +GLIBC_2.2 __fwritable F +GLIBC_2.2 __fwriting F +GLIBC_2.2 __fxstat64 F +GLIBC_2.2 __getmntent_r F +GLIBC_2.2 __lxstat64 F +GLIBC_2.2 __nl_langinfo_l F +GLIBC_2.2 __open64 F +GLIBC_2.2 __res_init F +GLIBC_2.2 __res_nclose F +GLIBC_2.2 __res_ninit F +GLIBC_2.2 __res_state F +GLIBC_2.2 __setmntent F +GLIBC_2.2 __statfs F +GLIBC_2.2 __strndup F +GLIBC_2.2 __sysconf F +GLIBC_2.2 __sysctl F +GLIBC_2.2 __wctrans_l F +GLIBC_2.2 __woverflow F +GLIBC_2.2 __wuflow F +GLIBC_2.2 __wunderflow F +GLIBC_2.2 __xpg_sigpause F +GLIBC_2.2 __xstat64 F +GLIBC_2.2 _flushlbf F +GLIBC_2.2 _res_hconf D 0x30 +GLIBC_2.2 alphasort64 F +GLIBC_2.2 bind_textdomain_codeset F +GLIBC_2.2 dcngettext F +GLIBC_2.2 dngettext F +GLIBC_2.2 fgetpos F +GLIBC_2.2 fgetpos64 F +GLIBC_2.2 fgetwc F +GLIBC_2.2 fgetwc_unlocked F +GLIBC_2.2 fgetws F +GLIBC_2.2 fgetws_unlocked F +GLIBC_2.2 fmemopen F +GLIBC_2.2 fopencookie F +GLIBC_2.2 fputwc F +GLIBC_2.2 fputwc_unlocked F +GLIBC_2.2 fputws F +GLIBC_2.2 fputws_unlocked F +GLIBC_2.2 fsetpos F +GLIBC_2.2 fsetpos64 F +GLIBC_2.2 fwide F +GLIBC_2.2 fwprintf F +GLIBC_2.2 fwscanf F +GLIBC_2.2 getdirentries64 F +GLIBC_2.2 getloadavg F +GLIBC_2.2 getrlimit F +GLIBC_2.2 getrlimit64 F +GLIBC_2.2 getwc F +GLIBC_2.2 getwc_unlocked F +GLIBC_2.2 getwchar F +GLIBC_2.2 getwchar_unlocked F +GLIBC_2.2 glob64 F +GLIBC_2.2 iruserok_af F +GLIBC_2.2 localeconv F +GLIBC_2.2 mcheck_check_all F +GLIBC_2.2 mcheck_pedantic F +GLIBC_2.2 memrchr F +GLIBC_2.2 mincore F +GLIBC_2.2 mkdtemp F +GLIBC_2.2 mkstemp64 F +GLIBC_2.2 moncontrol F +GLIBC_2.2 msgctl F +GLIBC_2.2 ngettext F +GLIBC_2.2 posix_fadvise F +GLIBC_2.2 posix_fadvise64 F +GLIBC_2.2 posix_fallocate F +GLIBC_2.2 posix_fallocate64 F +GLIBC_2.2 posix_madvise F +GLIBC_2.2 posix_memalign F +GLIBC_2.2 posix_spawn F +GLIBC_2.2 posix_spawn_file_actions_addclose F +GLIBC_2.2 posix_spawn_file_actions_adddup2 F +GLIBC_2.2 posix_spawn_file_actions_addopen F +GLIBC_2.2 posix_spawn_file_actions_destroy F +GLIBC_2.2 posix_spawn_file_actions_init F +GLIBC_2.2 posix_spawnattr_destroy F +GLIBC_2.2 posix_spawnattr_getflags F +GLIBC_2.2 posix_spawnattr_getpgroup F +GLIBC_2.2 posix_spawnattr_getschedparam F +GLIBC_2.2 posix_spawnattr_getschedpolicy F +GLIBC_2.2 posix_spawnattr_getsigdefault F +GLIBC_2.2 posix_spawnattr_getsigmask F +GLIBC_2.2 posix_spawnattr_init F +GLIBC_2.2 posix_spawnattr_setflags F +GLIBC_2.2 posix_spawnattr_setpgroup F +GLIBC_2.2 posix_spawnattr_setschedparam F +GLIBC_2.2 posix_spawnattr_setschedpolicy F +GLIBC_2.2 posix_spawnattr_setsigdefault F +GLIBC_2.2 posix_spawnattr_setsigmask F +GLIBC_2.2 posix_spawnp F +GLIBC_2.2 putwc F +GLIBC_2.2 putwc_unlocked F +GLIBC_2.2 putwchar F +GLIBC_2.2 putwchar_unlocked F +GLIBC_2.2 rcmd_af F +GLIBC_2.2 readdir64 F +GLIBC_2.2 readdir64_r F +GLIBC_2.2 rexec_af F +GLIBC_2.2 rresvport_af F +GLIBC_2.2 ruserok_af F +GLIBC_2.2 scandir64 F +GLIBC_2.2 semctl F +GLIBC_2.2 setrlimit F +GLIBC_2.2 shmctl F +GLIBC_2.2 svc_getreq_common F +GLIBC_2.2 svc_getreq_poll F +GLIBC_2.2 svc_max_pollfd D 0x4 +GLIBC_2.2 svc_pollfd D 0x4 +GLIBC_2.2 swprintf F +GLIBC_2.2 swscanf F +GLIBC_2.2 ungetwc F +GLIBC_2.2 versionsort64 F +GLIBC_2.2 vfwprintf F +GLIBC_2.2 vfwscanf F +GLIBC_2.2 vswprintf F +GLIBC_2.2 vswscanf F +GLIBC_2.2 vwprintf F +GLIBC_2.2 vwscanf F +GLIBC_2.2 wcschrnul F +GLIBC_2.2 wcsftime F +GLIBC_2.2 wmempcpy F +GLIBC_2.2 wprintf F +GLIBC_2.2 wscanf F +GLIBC_2.2.1 GLIBC_2.2.1 A +GLIBC_2.2.1 pivot_root F +GLIBC_2.2.1 posix_openpt F +GLIBC_2.2.2 GLIBC_2.2.2 A +GLIBC_2.2.2 __nss_hostname_digits_dots F +GLIBC_2.2.3 GLIBC_2.2.3 A +GLIBC_2.2.3 __rpc_thread_createerr F +GLIBC_2.2.3 __rpc_thread_svc_fdset F +GLIBC_2.2.3 __rpc_thread_svc_max_pollfd F +GLIBC_2.2.3 __rpc_thread_svc_pollfd F +GLIBC_2.2.3 fnmatch F +GLIBC_2.2.3 sprofil F +GLIBC_2.2.4 GLIBC_2.2.4 A +GLIBC_2.2.4 dl_iterate_phdr F +GLIBC_2.2.4 getgrouplist F +GLIBC_2.2.4 sockatmark F +GLIBC_2.2.6 GLIBC_2.2.6 A +GLIBC_2.2.6 __nanosleep F +GLIBC_2.22 GLIBC_2.22 A +GLIBC_2.22 fmemopen F +GLIBC_2.23 GLIBC_2.23 A +GLIBC_2.23 fts64_children F +GLIBC_2.23 fts64_close F +GLIBC_2.23 fts64_open F +GLIBC_2.23 fts64_read F +GLIBC_2.23 fts64_set F +GLIBC_2.24 GLIBC_2.24 A +GLIBC_2.24 quick_exit F +GLIBC_2.25 GLIBC_2.25 A +GLIBC_2.25 __explicit_bzero_chk F +GLIBC_2.25 explicit_bzero F +GLIBC_2.25 getentropy F +GLIBC_2.25 getrandom F +GLIBC_2.25 strfromd F +GLIBC_2.25 strfromf F +GLIBC_2.25 strfroml F +GLIBC_2.26 GLIBC_2.26 A +GLIBC_2.26 preadv2 F +GLIBC_2.26 preadv64v2 F +GLIBC_2.26 pwritev2 F +GLIBC_2.26 pwritev64v2 F +GLIBC_2.26 reallocarray F +GLIBC_2.3 GLIBC_2.3 A +GLIBC_2.3 __ctype_b_loc F +GLIBC_2.3 __ctype_tolower_loc F +GLIBC_2.3 __ctype_toupper_loc F +GLIBC_2.3 __isctype F +GLIBC_2.3 __strftime_l F +GLIBC_2.3 __uselocale F +GLIBC_2.3 __wcsftime_l F +GLIBC_2.3 _sys_errlist D 0x1f8 +GLIBC_2.3 _sys_nerr D 0x4 +GLIBC_2.3 duplocale F +GLIBC_2.3 fgetxattr F +GLIBC_2.3 flistxattr F +GLIBC_2.3 freeifaddrs F +GLIBC_2.3 freelocale F +GLIBC_2.3 fremovexattr F +GLIBC_2.3 fsetxattr F +GLIBC_2.3 futimes F +GLIBC_2.3 getifaddrs F +GLIBC_2.3 getxattr F +GLIBC_2.3 isalnum_l F +GLIBC_2.3 isalpha_l F +GLIBC_2.3 isblank_l F +GLIBC_2.3 iscntrl_l F +GLIBC_2.3 isctype F +GLIBC_2.3 isdigit_l F +GLIBC_2.3 isgraph_l F +GLIBC_2.3 islower_l F +GLIBC_2.3 isprint_l F +GLIBC_2.3 ispunct_l F +GLIBC_2.3 isspace_l F +GLIBC_2.3 isupper_l F +GLIBC_2.3 iswalnum_l F +GLIBC_2.3 iswalpha_l F +GLIBC_2.3 iswblank_l F +GLIBC_2.3 iswcntrl_l F +GLIBC_2.3 iswctype_l F +GLIBC_2.3 iswdigit_l F +GLIBC_2.3 iswgraph_l F +GLIBC_2.3 iswlower_l F +GLIBC_2.3 iswprint_l F +GLIBC_2.3 iswpunct_l F +GLIBC_2.3 iswspace_l F +GLIBC_2.3 iswupper_l F +GLIBC_2.3 iswxdigit_l F +GLIBC_2.3 isxdigit_l F +GLIBC_2.3 lgetxattr F +GLIBC_2.3 listxattr F +GLIBC_2.3 llistxattr F +GLIBC_2.3 lremovexattr F +GLIBC_2.3 lsetxattr F +GLIBC_2.3 lutimes F +GLIBC_2.3 newlocale F +GLIBC_2.3 nl_langinfo_l F +GLIBC_2.3 readahead F +GLIBC_2.3 realpath F +GLIBC_2.3 removexattr F +GLIBC_2.3 sendfile64 F +GLIBC_2.3 setxattr F +GLIBC_2.3 strcasecmp_l F +GLIBC_2.3 strcoll_l F +GLIBC_2.3 strfmon_l F +GLIBC_2.3 strftime_l F +GLIBC_2.3 strncasecmp_l F +GLIBC_2.3 strtod_l F +GLIBC_2.3 strtof_l F +GLIBC_2.3 strtol_l F +GLIBC_2.3 strtold_l F +GLIBC_2.3 strtoll_l F +GLIBC_2.3 strtoul_l F +GLIBC_2.3 strtoull_l F +GLIBC_2.3 strxfrm_l F +GLIBC_2.3 sys_errlist D 0x1f8 +GLIBC_2.3 sys_nerr D 0x4 +GLIBC_2.3 tolower_l F +GLIBC_2.3 toupper_l F +GLIBC_2.3 towctrans_l F +GLIBC_2.3 towlower_l F +GLIBC_2.3 towupper_l F +GLIBC_2.3 uselocale F +GLIBC_2.3 wcscasecmp_l F +GLIBC_2.3 wcscoll_l F +GLIBC_2.3 wcsftime_l F +GLIBC_2.3 wcsncasecmp_l F +GLIBC_2.3 wcstod_l F +GLIBC_2.3 wcstof_l F +GLIBC_2.3 wcstol_l F +GLIBC_2.3 wcstold_l F +GLIBC_2.3 wcstoll_l F +GLIBC_2.3 wcstoul_l F +GLIBC_2.3 wcstoull_l F +GLIBC_2.3 wcsxfrm_l F +GLIBC_2.3 wctrans_l F +GLIBC_2.3 wctype_l F +GLIBC_2.3.2 GLIBC_2.3.2 A +GLIBC_2.3.2 __register_atfork F +GLIBC_2.3.2 epoll_create F +GLIBC_2.3.2 epoll_ctl F +GLIBC_2.3.2 epoll_wait F +GLIBC_2.3.2 lchmod F +GLIBC_2.3.2 pthread_cond_broadcast F +GLIBC_2.3.2 pthread_cond_destroy F +GLIBC_2.3.2 pthread_cond_init F +GLIBC_2.3.2 pthread_cond_signal F +GLIBC_2.3.2 pthread_cond_timedwait F +GLIBC_2.3.2 pthread_cond_wait F +GLIBC_2.3.2 strptime_l F +GLIBC_2.3.3 GLIBC_2.3.3 A +GLIBC_2.3.3 _sys_siglist D 0x104 +GLIBC_2.3.3 gnu_dev_major F +GLIBC_2.3.3 gnu_dev_makedev F +GLIBC_2.3.3 gnu_dev_minor F +GLIBC_2.3.3 inet6_option_alloc F +GLIBC_2.3.3 inet6_option_append F +GLIBC_2.3.3 inet6_option_find F +GLIBC_2.3.3 inet6_option_init F +GLIBC_2.3.3 inet6_option_next F +GLIBC_2.3.3 inet6_option_space F +GLIBC_2.3.3 nftw F +GLIBC_2.3.3 nftw64 F +GLIBC_2.3.3 posix_fadvise64 F +GLIBC_2.3.3 posix_fallocate64 F +GLIBC_2.3.3 remap_file_pages F +GLIBC_2.3.3 sched_getaffinity F +GLIBC_2.3.3 sched_setaffinity F +GLIBC_2.3.3 semtimedop F +GLIBC_2.3.3 sys_sigabbrev D 0x104 +GLIBC_2.3.3 sys_siglist D 0x104 +GLIBC_2.3.4 GLIBC_2.3.4 A +GLIBC_2.3.4 __chk_fail F +GLIBC_2.3.4 __fprintf_chk F +GLIBC_2.3.4 __gets_chk F +GLIBC_2.3.4 __memcpy_chk F +GLIBC_2.3.4 __memmove_chk F +GLIBC_2.3.4 __mempcpy_chk F +GLIBC_2.3.4 __memset_chk F +GLIBC_2.3.4 __printf_chk F +GLIBC_2.3.4 __snprintf_chk F +GLIBC_2.3.4 __sprintf_chk F +GLIBC_2.3.4 __stpcpy_chk F +GLIBC_2.3.4 __strcat_chk F +GLIBC_2.3.4 __strcpy_chk F +GLIBC_2.3.4 __strncat_chk F +GLIBC_2.3.4 __strncpy_chk F +GLIBC_2.3.4 __vfprintf_chk F +GLIBC_2.3.4 __vprintf_chk F +GLIBC_2.3.4 __vsnprintf_chk F +GLIBC_2.3.4 __vsprintf_chk F +GLIBC_2.3.4 __xpg_strerror_r F +GLIBC_2.3.4 getipv4sourcefilter F +GLIBC_2.3.4 getsourcefilter F +GLIBC_2.3.4 regexec F +GLIBC_2.3.4 sched_getaffinity F +GLIBC_2.3.4 sched_setaffinity F +GLIBC_2.3.4 setipv4sourcefilter F +GLIBC_2.3.4 setsourcefilter F +GLIBC_2.3.4 vm86 F +GLIBC_2.3.4 xdr_quad_t F +GLIBC_2.3.4 xdr_u_quad_t F +GLIBC_2.4 GLIBC_2.4 A +GLIBC_2.4 __confstr_chk F +GLIBC_2.4 __fgets_chk F +GLIBC_2.4 __fgets_unlocked_chk F +GLIBC_2.4 __fgetws_chk F +GLIBC_2.4 __fgetws_unlocked_chk F +GLIBC_2.4 __fwprintf_chk F +GLIBC_2.4 __fxstatat F +GLIBC_2.4 __fxstatat64 F +GLIBC_2.4 __getcwd_chk F +GLIBC_2.4 __getdomainname_chk F +GLIBC_2.4 __getgroups_chk F +GLIBC_2.4 __gethostname_chk F +GLIBC_2.4 __getlogin_r_chk F +GLIBC_2.4 __getwd_chk F +GLIBC_2.4 __mbsnrtowcs_chk F +GLIBC_2.4 __mbsrtowcs_chk F +GLIBC_2.4 __mbstowcs_chk F +GLIBC_2.4 __pread64_chk F +GLIBC_2.4 __pread_chk F +GLIBC_2.4 __ptsname_r_chk F +GLIBC_2.4 __read_chk F +GLIBC_2.4 __readlink_chk F +GLIBC_2.4 __realpath_chk F +GLIBC_2.4 __recv_chk F +GLIBC_2.4 __recvfrom_chk F +GLIBC_2.4 __stack_chk_fail F +GLIBC_2.4 __stpncpy_chk F +GLIBC_2.4 __swprintf_chk F +GLIBC_2.4 __syslog_chk F +GLIBC_2.4 __ttyname_r_chk F +GLIBC_2.4 __vfwprintf_chk F +GLIBC_2.4 __vswprintf_chk F +GLIBC_2.4 __vsyslog_chk F +GLIBC_2.4 __vwprintf_chk F +GLIBC_2.4 __wcpcpy_chk F +GLIBC_2.4 __wcpncpy_chk F +GLIBC_2.4 __wcrtomb_chk F +GLIBC_2.4 __wcscat_chk F +GLIBC_2.4 __wcscpy_chk F +GLIBC_2.4 __wcsncat_chk F +GLIBC_2.4 __wcsncpy_chk F +GLIBC_2.4 __wcsnrtombs_chk F +GLIBC_2.4 __wcsrtombs_chk F +GLIBC_2.4 __wcstombs_chk F +GLIBC_2.4 __wctomb_chk F +GLIBC_2.4 __wmemcpy_chk F +GLIBC_2.4 __wmemmove_chk F +GLIBC_2.4 __wmempcpy_chk F +GLIBC_2.4 __wmemset_chk F +GLIBC_2.4 __wprintf_chk F +GLIBC_2.4 __xmknodat F +GLIBC_2.4 _sys_errlist D 0x210 +GLIBC_2.4 _sys_nerr D 0x4 +GLIBC_2.4 eaccess F +GLIBC_2.4 faccessat F +GLIBC_2.4 fchmodat F +GLIBC_2.4 fchownat F +GLIBC_2.4 fdopendir F +GLIBC_2.4 futimesat F +GLIBC_2.4 inotify_add_watch F +GLIBC_2.4 inotify_init F +GLIBC_2.4 inotify_rm_watch F +GLIBC_2.4 linkat F +GLIBC_2.4 mkdirat F +GLIBC_2.4 mkfifoat F +GLIBC_2.4 open_wmemstream F +GLIBC_2.4 openat F +GLIBC_2.4 openat64 F +GLIBC_2.4 ppoll F +GLIBC_2.4 readlinkat F +GLIBC_2.4 renameat F +GLIBC_2.4 symlinkat F +GLIBC_2.4 sys_errlist D 0x210 +GLIBC_2.4 sys_nerr D 0x4 +GLIBC_2.4 unlinkat F +GLIBC_2.4 unshare F +GLIBC_2.5 GLIBC_2.5 A +GLIBC_2.5 __readlinkat_chk F +GLIBC_2.5 inet6_opt_append F +GLIBC_2.5 inet6_opt_find F +GLIBC_2.5 inet6_opt_finish F +GLIBC_2.5 inet6_opt_get_val F +GLIBC_2.5 inet6_opt_init F +GLIBC_2.5 inet6_opt_next F +GLIBC_2.5 inet6_opt_set_val F +GLIBC_2.5 inet6_rth_add F +GLIBC_2.5 inet6_rth_getaddr F +GLIBC_2.5 inet6_rth_init F +GLIBC_2.5 inet6_rth_reverse F +GLIBC_2.5 inet6_rth_segments F +GLIBC_2.5 inet6_rth_space F +GLIBC_2.5 splice F +GLIBC_2.5 tee F +GLIBC_2.5 vmsplice F +GLIBC_2.6 GLIBC_2.6 A +GLIBC_2.6 __sched_cpucount F +GLIBC_2.6 epoll_pwait F +GLIBC_2.6 futimens F +GLIBC_2.6 sched_getcpu F +GLIBC_2.6 strerror_l F +GLIBC_2.6 sync_file_range F +GLIBC_2.6 utimensat F +GLIBC_2.7 GLIBC_2.7 A +GLIBC_2.7 __fread_chk F +GLIBC_2.7 __fread_unlocked_chk F +GLIBC_2.7 __isoc99_fscanf F +GLIBC_2.7 __isoc99_fwscanf F +GLIBC_2.7 __isoc99_scanf F +GLIBC_2.7 __isoc99_sscanf F +GLIBC_2.7 __isoc99_swscanf F +GLIBC_2.7 __isoc99_vfscanf F +GLIBC_2.7 __isoc99_vfwscanf F +GLIBC_2.7 __isoc99_vscanf F +GLIBC_2.7 __isoc99_vsscanf F +GLIBC_2.7 __isoc99_vswscanf F +GLIBC_2.7 __isoc99_vwscanf F +GLIBC_2.7 __isoc99_wscanf F +GLIBC_2.7 __open64_2 F +GLIBC_2.7 __open_2 F +GLIBC_2.7 __openat64_2 F +GLIBC_2.7 __openat_2 F +GLIBC_2.7 __sched_cpualloc F +GLIBC_2.7 __sched_cpufree F +GLIBC_2.7 eventfd F +GLIBC_2.7 eventfd_read F +GLIBC_2.7 eventfd_write F +GLIBC_2.7 mkostemp F +GLIBC_2.7 mkostemp64 F +GLIBC_2.7 signalfd F +GLIBC_2.8 GLIBC_2.8 A +GLIBC_2.8 __asprintf_chk F +GLIBC_2.8 __dprintf_chk F +GLIBC_2.8 __obstack_printf_chk F +GLIBC_2.8 __obstack_vprintf_chk F +GLIBC_2.8 __vasprintf_chk F +GLIBC_2.8 __vdprintf_chk F +GLIBC_2.8 qsort_r F +GLIBC_2.8 timerfd_create F +GLIBC_2.8 timerfd_gettime F +GLIBC_2.8 timerfd_settime F +GLIBC_2.9 GLIBC_2.9 A +GLIBC_2.9 dup3 F +GLIBC_2.9 epoll_create1 F +GLIBC_2.9 inotify_init1 F +GLIBC_2.9 pipe2 F diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/libcrypt.abilist b/REORG.TODO/sysdeps/unix/sysv/linux/i386/libcrypt.abilist new file mode 100644 index 0000000000..4db2639336 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/libcrypt.abilist @@ -0,0 +1,8 @@ +GLIBC_2.0 GLIBC_2.0 A +GLIBC_2.0 crypt F +GLIBC_2.0 crypt_r F +GLIBC_2.0 encrypt F +GLIBC_2.0 encrypt_r F +GLIBC_2.0 fcrypt F +GLIBC_2.0 setkey F +GLIBC_2.0 setkey_r F diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/libdl.abilist b/REORG.TODO/sysdeps/unix/sysv/linux/i386/libdl.abilist new file mode 100644 index 0000000000..5536f6e0a9 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/libdl.abilist @@ -0,0 +1,14 @@ +GLIBC_2.0 GLIBC_2.0 A +GLIBC_2.0 dladdr F +GLIBC_2.0 dlclose F +GLIBC_2.0 dlerror F +GLIBC_2.0 dlopen F +GLIBC_2.0 dlsym F +GLIBC_2.1 GLIBC_2.1 A +GLIBC_2.1 dlopen F +GLIBC_2.1 dlvsym F +GLIBC_2.3.3 GLIBC_2.3.3 A +GLIBC_2.3.3 dladdr1 F +GLIBC_2.3.3 dlinfo F +GLIBC_2.3.4 GLIBC_2.3.4 A +GLIBC_2.3.4 dlmopen F diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/libm.abilist b/REORG.TODO/sysdeps/unix/sysv/linux/i386/libm.abilist new file mode 100644 index 0000000000..761e4420f9 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/libm.abilist @@ -0,0 +1,476 @@ +GLIBC_2.0 GLIBC_2.0 A +GLIBC_2.0 _LIB_VERSION D 0x4 +GLIBC_2.0 acos F +GLIBC_2.0 acosf F +GLIBC_2.0 acosh F +GLIBC_2.0 acoshf F +GLIBC_2.0 acoshl F +GLIBC_2.0 acosl F +GLIBC_2.0 asin F +GLIBC_2.0 asinf F +GLIBC_2.0 asinh F +GLIBC_2.0 asinhf F +GLIBC_2.0 asinhl F +GLIBC_2.0 asinl F +GLIBC_2.0 atan F +GLIBC_2.0 atan2 F +GLIBC_2.0 atan2f F +GLIBC_2.0 atan2l F +GLIBC_2.0 atanf F +GLIBC_2.0 atanh F +GLIBC_2.0 atanhf F +GLIBC_2.0 atanhl F +GLIBC_2.0 atanl F +GLIBC_2.0 cbrt F +GLIBC_2.0 cbrtf F +GLIBC_2.0 cbrtl F +GLIBC_2.0 ceil F +GLIBC_2.0 ceilf F +GLIBC_2.0 ceill F +GLIBC_2.0 copysign F +GLIBC_2.0 copysignf F +GLIBC_2.0 copysignl F +GLIBC_2.0 cos F +GLIBC_2.0 cosf F +GLIBC_2.0 cosh F +GLIBC_2.0 coshf F +GLIBC_2.0 coshl F +GLIBC_2.0 cosl F +GLIBC_2.0 drem F +GLIBC_2.0 dremf F +GLIBC_2.0 dreml F +GLIBC_2.0 erf F +GLIBC_2.0 erfc F +GLIBC_2.0 erfcf F +GLIBC_2.0 erfcl F +GLIBC_2.0 erff F +GLIBC_2.0 erfl F +GLIBC_2.0 exp F +GLIBC_2.0 expf F +GLIBC_2.0 expl F +GLIBC_2.0 expm1 F +GLIBC_2.0 expm1f F +GLIBC_2.0 expm1l F +GLIBC_2.0 fabs F +GLIBC_2.0 fabsf F +GLIBC_2.0 fabsl F +GLIBC_2.0 finite F +GLIBC_2.0 finitef F +GLIBC_2.0 finitel F +GLIBC_2.0 floor F +GLIBC_2.0 floorf F +GLIBC_2.0 floorl F +GLIBC_2.0 fmod F +GLIBC_2.0 fmodf F +GLIBC_2.0 fmodl F +GLIBC_2.0 frexp F +GLIBC_2.0 frexpf F +GLIBC_2.0 frexpl F +GLIBC_2.0 gamma F +GLIBC_2.0 gammaf F +GLIBC_2.0 gammal F +GLIBC_2.0 hypot F +GLIBC_2.0 hypotf F +GLIBC_2.0 hypotl F +GLIBC_2.0 ilogb F +GLIBC_2.0 ilogbf F +GLIBC_2.0 ilogbl F +GLIBC_2.0 j0 F +GLIBC_2.0 j0f F +GLIBC_2.0 j0l F +GLIBC_2.0 j1 F +GLIBC_2.0 j1f F +GLIBC_2.0 j1l F +GLIBC_2.0 jn F +GLIBC_2.0 jnf F +GLIBC_2.0 jnl F +GLIBC_2.0 ldexp F +GLIBC_2.0 ldexpf F +GLIBC_2.0 ldexpl F +GLIBC_2.0 lgamma F +GLIBC_2.0 lgamma_r F +GLIBC_2.0 lgammaf F +GLIBC_2.0 lgammaf_r F +GLIBC_2.0 lgammal F +GLIBC_2.0 lgammal_r F +GLIBC_2.0 log F +GLIBC_2.0 log10 F +GLIBC_2.0 log10f F +GLIBC_2.0 log10l F +GLIBC_2.0 log1p F +GLIBC_2.0 log1pf F +GLIBC_2.0 log1pl F +GLIBC_2.0 logb F +GLIBC_2.0 logbf F +GLIBC_2.0 logbl F +GLIBC_2.0 logf F +GLIBC_2.0 logl F +GLIBC_2.0 matherr F +GLIBC_2.0 modf F +GLIBC_2.0 modff F +GLIBC_2.0 modfl F +GLIBC_2.0 nextafter F +GLIBC_2.0 nextafterf F +GLIBC_2.0 nextafterl F +GLIBC_2.0 pow F +GLIBC_2.0 powf F +GLIBC_2.0 powl F +GLIBC_2.0 remainder F +GLIBC_2.0 remainderf F +GLIBC_2.0 remainderl F +GLIBC_2.0 rint F +GLIBC_2.0 rintf F +GLIBC_2.0 rintl F +GLIBC_2.0 scalb F +GLIBC_2.0 scalbf F +GLIBC_2.0 scalbl F +GLIBC_2.0 scalbn F +GLIBC_2.0 scalbnf F +GLIBC_2.0 scalbnl F +GLIBC_2.0 signgam D 0x4 +GLIBC_2.0 significand F +GLIBC_2.0 significandf F +GLIBC_2.0 significandl F +GLIBC_2.0 sin F +GLIBC_2.0 sinf F +GLIBC_2.0 sinh F +GLIBC_2.0 sinhf F +GLIBC_2.0 sinhl F +GLIBC_2.0 sinl F +GLIBC_2.0 sqrt F +GLIBC_2.0 sqrtf F +GLIBC_2.0 sqrtl F +GLIBC_2.0 tan F +GLIBC_2.0 tanf F +GLIBC_2.0 tanh F +GLIBC_2.0 tanhf F +GLIBC_2.0 tanhl F +GLIBC_2.0 tanl F +GLIBC_2.0 y0 F +GLIBC_2.0 y0f F +GLIBC_2.0 y0l F +GLIBC_2.0 y1 F +GLIBC_2.0 y1f F +GLIBC_2.0 y1l F +GLIBC_2.0 yn F +GLIBC_2.0 ynf F +GLIBC_2.0 ynl F +GLIBC_2.1 GLIBC_2.1 A +GLIBC_2.1 __clog10 F +GLIBC_2.1 __clog10f F +GLIBC_2.1 __clog10l F +GLIBC_2.1 __finite F +GLIBC_2.1 __finitef F +GLIBC_2.1 __finitel F +GLIBC_2.1 __fpclassify F +GLIBC_2.1 __fpclassifyf F +GLIBC_2.1 __fpclassifyl F +GLIBC_2.1 __signbit F +GLIBC_2.1 __signbitf F +GLIBC_2.1 __signbitl F +GLIBC_2.1 cabs F +GLIBC_2.1 cabsf F +GLIBC_2.1 cabsl F +GLIBC_2.1 cacos F +GLIBC_2.1 cacosf F +GLIBC_2.1 cacosh F +GLIBC_2.1 cacoshf F +GLIBC_2.1 cacoshl F +GLIBC_2.1 cacosl F +GLIBC_2.1 carg F +GLIBC_2.1 cargf F +GLIBC_2.1 cargl F +GLIBC_2.1 casin F +GLIBC_2.1 casinf F +GLIBC_2.1 casinh F +GLIBC_2.1 casinhf F +GLIBC_2.1 casinhl F +GLIBC_2.1 casinl F +GLIBC_2.1 catan F +GLIBC_2.1 catanf F +GLIBC_2.1 catanh F +GLIBC_2.1 catanhf F +GLIBC_2.1 catanhl F +GLIBC_2.1 catanl F +GLIBC_2.1 ccos F +GLIBC_2.1 ccosf F +GLIBC_2.1 ccosh F +GLIBC_2.1 ccoshf F +GLIBC_2.1 ccoshl F +GLIBC_2.1 ccosl F +GLIBC_2.1 cexp F +GLIBC_2.1 cexpf F +GLIBC_2.1 cexpl F +GLIBC_2.1 cimag F +GLIBC_2.1 cimagf F +GLIBC_2.1 cimagl F +GLIBC_2.1 clog F +GLIBC_2.1 clog10 F +GLIBC_2.1 clog10f F +GLIBC_2.1 clog10l F +GLIBC_2.1 clogf F +GLIBC_2.1 clogl F +GLIBC_2.1 conj F +GLIBC_2.1 conjf F +GLIBC_2.1 conjl F +GLIBC_2.1 cpow F +GLIBC_2.1 cpowf F +GLIBC_2.1 cpowl F +GLIBC_2.1 cproj F +GLIBC_2.1 cprojf F +GLIBC_2.1 cprojl F +GLIBC_2.1 creal F +GLIBC_2.1 crealf F +GLIBC_2.1 creall F +GLIBC_2.1 csin F +GLIBC_2.1 csinf F +GLIBC_2.1 csinh F +GLIBC_2.1 csinhf F +GLIBC_2.1 csinhl F +GLIBC_2.1 csinl F +GLIBC_2.1 csqrt F +GLIBC_2.1 csqrtf F +GLIBC_2.1 csqrtl F +GLIBC_2.1 ctan F +GLIBC_2.1 ctanf F +GLIBC_2.1 ctanh F +GLIBC_2.1 ctanhf F +GLIBC_2.1 ctanhl F +GLIBC_2.1 ctanl F +GLIBC_2.1 exp10 F +GLIBC_2.1 exp10f F +GLIBC_2.1 exp10l F +GLIBC_2.1 exp2 F +GLIBC_2.1 exp2f F +GLIBC_2.1 exp2l F +GLIBC_2.1 fdim F +GLIBC_2.1 fdimf F +GLIBC_2.1 fdiml F +GLIBC_2.1 feclearexcept F +GLIBC_2.1 fegetenv F +GLIBC_2.1 fegetexceptflag F +GLIBC_2.1 fegetround F +GLIBC_2.1 feholdexcept F +GLIBC_2.1 feraiseexcept F +GLIBC_2.1 fesetenv F +GLIBC_2.1 fesetexceptflag F +GLIBC_2.1 fesetround F +GLIBC_2.1 fetestexcept F +GLIBC_2.1 feupdateenv F +GLIBC_2.1 fma F +GLIBC_2.1 fmaf F +GLIBC_2.1 fmal F +GLIBC_2.1 fmax F +GLIBC_2.1 fmaxf F +GLIBC_2.1 fmaxl F +GLIBC_2.1 fmin F +GLIBC_2.1 fminf F +GLIBC_2.1 fminl F +GLIBC_2.1 llrint F +GLIBC_2.1 llrintf F +GLIBC_2.1 llrintl F +GLIBC_2.1 llround F +GLIBC_2.1 llroundf F +GLIBC_2.1 llroundl F +GLIBC_2.1 log2 F +GLIBC_2.1 log2f F +GLIBC_2.1 log2l F +GLIBC_2.1 lrint F +GLIBC_2.1 lrintf F +GLIBC_2.1 lrintl F +GLIBC_2.1 lround F +GLIBC_2.1 lroundf F +GLIBC_2.1 lroundl F +GLIBC_2.1 nan F +GLIBC_2.1 nanf F +GLIBC_2.1 nanl F +GLIBC_2.1 nearbyint F +GLIBC_2.1 nearbyintf F +GLIBC_2.1 nearbyintl F +GLIBC_2.1 nexttoward F +GLIBC_2.1 nexttowardf F +GLIBC_2.1 nexttowardl F +GLIBC_2.1 pow10 F +GLIBC_2.1 pow10f F +GLIBC_2.1 pow10l F +GLIBC_2.1 remquo F +GLIBC_2.1 remquof F +GLIBC_2.1 remquol F +GLIBC_2.1 round F +GLIBC_2.1 roundf F +GLIBC_2.1 roundl F +GLIBC_2.1 scalbln F +GLIBC_2.1 scalblnf F +GLIBC_2.1 scalblnl F +GLIBC_2.1 sincos F +GLIBC_2.1 sincosf F +GLIBC_2.1 sincosl F +GLIBC_2.1 tgamma F +GLIBC_2.1 tgammaf F +GLIBC_2.1 tgammal F +GLIBC_2.1 trunc F +GLIBC_2.1 truncf F +GLIBC_2.1 truncl 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 __acoshl_finite F +GLIBC_2.15 __acosl_finite F +GLIBC_2.15 __asin_finite F +GLIBC_2.15 __asinf_finite F +GLIBC_2.15 __asinl_finite F +GLIBC_2.15 __atan2_finite F +GLIBC_2.15 __atan2f_finite F +GLIBC_2.15 __atan2l_finite F +GLIBC_2.15 __atanh_finite F +GLIBC_2.15 __atanhf_finite F +GLIBC_2.15 __atanhl_finite F +GLIBC_2.15 __cosh_finite F +GLIBC_2.15 __coshf_finite F +GLIBC_2.15 __coshl_finite F +GLIBC_2.15 __exp10_finite F +GLIBC_2.15 __exp10f_finite F +GLIBC_2.15 __exp10l_finite F +GLIBC_2.15 __exp2_finite F +GLIBC_2.15 __exp2f_finite F +GLIBC_2.15 __exp2l_finite F +GLIBC_2.15 __exp_finite F +GLIBC_2.15 __expf_finite F +GLIBC_2.15 __expl_finite F +GLIBC_2.15 __fmod_finite F +GLIBC_2.15 __fmodf_finite F +GLIBC_2.15 __fmodl_finite F +GLIBC_2.15 __gamma_r_finite F +GLIBC_2.15 __gammaf_r_finite F +GLIBC_2.15 __gammal_r_finite F +GLIBC_2.15 __hypot_finite F +GLIBC_2.15 __hypotf_finite F +GLIBC_2.15 __hypotl_finite F +GLIBC_2.15 __j0_finite F +GLIBC_2.15 __j0f_finite F +GLIBC_2.15 __j0l_finite F +GLIBC_2.15 __j1_finite F +GLIBC_2.15 __j1f_finite F +GLIBC_2.15 __j1l_finite F +GLIBC_2.15 __jn_finite F +GLIBC_2.15 __jnf_finite F +GLIBC_2.15 __jnl_finite F +GLIBC_2.15 __lgamma_r_finite F +GLIBC_2.15 __lgammaf_r_finite F +GLIBC_2.15 __lgammal_r_finite F +GLIBC_2.15 __log10_finite F +GLIBC_2.15 __log10f_finite F +GLIBC_2.15 __log10l_finite F +GLIBC_2.15 __log2_finite F +GLIBC_2.15 __log2f_finite F +GLIBC_2.15 __log2l_finite F +GLIBC_2.15 __log_finite F +GLIBC_2.15 __logf_finite F +GLIBC_2.15 __logl_finite F +GLIBC_2.15 __pow_finite F +GLIBC_2.15 __powf_finite F +GLIBC_2.15 __powl_finite F +GLIBC_2.15 __remainder_finite F +GLIBC_2.15 __remainderf_finite F +GLIBC_2.15 __remainderl_finite F +GLIBC_2.15 __scalb_finite F +GLIBC_2.15 __scalbf_finite F +GLIBC_2.15 __scalbl_finite F +GLIBC_2.15 __sinh_finite F +GLIBC_2.15 __sinhf_finite F +GLIBC_2.15 __sinhl_finite F +GLIBC_2.15 __sqrt_finite F +GLIBC_2.15 __sqrtf_finite F +GLIBC_2.15 __sqrtl_finite F +GLIBC_2.15 __y0_finite F +GLIBC_2.15 __y0f_finite F +GLIBC_2.15 __y0l_finite F +GLIBC_2.15 __y1_finite F +GLIBC_2.15 __y1f_finite F +GLIBC_2.15 __y1l_finite F +GLIBC_2.15 __yn_finite F +GLIBC_2.15 __ynf_finite F +GLIBC_2.15 __ynl_finite F +GLIBC_2.18 GLIBC_2.18 A +GLIBC_2.18 __issignaling F +GLIBC_2.18 __issignalingf F +GLIBC_2.18 __issignalingl F +GLIBC_2.2 GLIBC_2.2 A +GLIBC_2.2 __expl F +GLIBC_2.2 __expm1l F +GLIBC_2.2 feclearexcept F +GLIBC_2.2 fedisableexcept F +GLIBC_2.2 feenableexcept F +GLIBC_2.2 fegetenv F +GLIBC_2.2 fegetexcept F +GLIBC_2.2 fegetexceptflag F +GLIBC_2.2 feraiseexcept F +GLIBC_2.2 fesetenv F +GLIBC_2.2 fesetexceptflag F +GLIBC_2.2 feupdateenv 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 __iscanonicall F +GLIBC_2.25 __iseqsig F +GLIBC_2.25 __iseqsigf F +GLIBC_2.25 __iseqsigl 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.4 GLIBC_2.4 A diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/libnsl.abilist b/REORG.TODO/sysdeps/unix/sysv/linux/i386/libnsl.abilist new file mode 100644 index 0000000000..a23db2aeaf --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/libnsl.abilist @@ -0,0 +1,124 @@ +GLIBC_2.0 GLIBC_2.0 A +GLIBC_2.0 __yp_check F +GLIBC_2.0 xdr_domainname F +GLIBC_2.0 xdr_keydat F +GLIBC_2.0 xdr_mapname F +GLIBC_2.0 xdr_peername F +GLIBC_2.0 xdr_valdat F +GLIBC_2.0 xdr_yp_buf F +GLIBC_2.0 xdr_ypbind_binding F +GLIBC_2.0 xdr_ypbind_resp F +GLIBC_2.0 xdr_ypbind_resptype F +GLIBC_2.0 xdr_ypbind_setdom F +GLIBC_2.0 xdr_ypdelete_args F +GLIBC_2.0 xdr_ypmap_parms F +GLIBC_2.0 xdr_ypmaplist F +GLIBC_2.0 xdr_yppush_status F +GLIBC_2.0 xdr_yppushresp_xfr F +GLIBC_2.0 xdr_ypreq_key F +GLIBC_2.0 xdr_ypreq_nokey F +GLIBC_2.0 xdr_ypreq_xfr F +GLIBC_2.0 xdr_ypresp_all F +GLIBC_2.0 xdr_ypresp_key_val F +GLIBC_2.0 xdr_ypresp_maplist F +GLIBC_2.0 xdr_ypresp_master F +GLIBC_2.0 xdr_ypresp_order F +GLIBC_2.0 xdr_ypresp_val F +GLIBC_2.0 xdr_ypresp_xfr F +GLIBC_2.0 xdr_ypstat F +GLIBC_2.0 xdr_ypupdate_args F +GLIBC_2.0 xdr_ypxfrstat F +GLIBC_2.0 yp_all F +GLIBC_2.0 yp_bind F +GLIBC_2.0 yp_first F +GLIBC_2.0 yp_get_default_domain F +GLIBC_2.0 yp_maplist F +GLIBC_2.0 yp_master F +GLIBC_2.0 yp_match F +GLIBC_2.0 yp_next F +GLIBC_2.0 yp_order F +GLIBC_2.0 yp_unbind F +GLIBC_2.0 yp_update F +GLIBC_2.0 ypbinderr_string F +GLIBC_2.0 yperr_string F +GLIBC_2.0 ypprot_err F +GLIBC_2.1 GLIBC_2.1 A +GLIBC_2.1 __free_fdresult F +GLIBC_2.1 __nis_default_access F +GLIBC_2.1 __nis_default_group F +GLIBC_2.1 __nis_default_owner F +GLIBC_2.1 __nis_default_ttl F +GLIBC_2.1 __nis_finddirectory F +GLIBC_2.1 __nis_hash F +GLIBC_2.1 __nisbind_connect F +GLIBC_2.1 __nisbind_create F +GLIBC_2.1 __nisbind_destroy F +GLIBC_2.1 __nisbind_next F +GLIBC_2.1 nis_add F +GLIBC_2.1 nis_add_entry F +GLIBC_2.1 nis_addmember F +GLIBC_2.1 nis_checkpoint F +GLIBC_2.1 nis_clone_directory F +GLIBC_2.1 nis_clone_object F +GLIBC_2.1 nis_clone_result F +GLIBC_2.1 nis_creategroup F +GLIBC_2.1 nis_destroy_object F +GLIBC_2.1 nis_destroygroup F +GLIBC_2.1 nis_dir_cmp F +GLIBC_2.1 nis_domain_of F +GLIBC_2.1 nis_domain_of_r F +GLIBC_2.1 nis_first_entry F +GLIBC_2.1 nis_free_directory F +GLIBC_2.1 nis_free_object F +GLIBC_2.1 nis_free_request F +GLIBC_2.1 nis_freenames F +GLIBC_2.1 nis_freeresult F +GLIBC_2.1 nis_freeservlist F +GLIBC_2.1 nis_freetags F +GLIBC_2.1 nis_getnames F +GLIBC_2.1 nis_getservlist F +GLIBC_2.1 nis_ismember F +GLIBC_2.1 nis_leaf_of F +GLIBC_2.1 nis_leaf_of_r F +GLIBC_2.1 nis_lerror F +GLIBC_2.1 nis_list F +GLIBC_2.1 nis_local_directory F +GLIBC_2.1 nis_local_group F +GLIBC_2.1 nis_local_host F +GLIBC_2.1 nis_local_principal F +GLIBC_2.1 nis_lookup F +GLIBC_2.1 nis_mkdir F +GLIBC_2.1 nis_modify F +GLIBC_2.1 nis_modify_entry F +GLIBC_2.1 nis_name_of F +GLIBC_2.1 nis_name_of_r F +GLIBC_2.1 nis_next_entry F +GLIBC_2.1 nis_perror F +GLIBC_2.1 nis_ping F +GLIBC_2.1 nis_print_directory F +GLIBC_2.1 nis_print_entry F +GLIBC_2.1 nis_print_group F +GLIBC_2.1 nis_print_group_entry F +GLIBC_2.1 nis_print_link F +GLIBC_2.1 nis_print_object F +GLIBC_2.1 nis_print_result F +GLIBC_2.1 nis_print_rights F +GLIBC_2.1 nis_print_table F +GLIBC_2.1 nis_read_obj F +GLIBC_2.1 nis_remove F +GLIBC_2.1 nis_remove_entry F +GLIBC_2.1 nis_removemember F +GLIBC_2.1 nis_rmdir F +GLIBC_2.1 nis_servstate F +GLIBC_2.1 nis_sperrno F +GLIBC_2.1 nis_sperror F +GLIBC_2.1 nis_sperror_r F +GLIBC_2.1 nis_stats F +GLIBC_2.1 nis_verifygroup F +GLIBC_2.1 nis_write_obj F +GLIBC_2.1 readColdStartFile F +GLIBC_2.1 writeColdStartFile F +GLIBC_2.1 xdr_cback_data F +GLIBC_2.1 xdr_obj_p F +GLIBC_2.2 GLIBC_2.2 A +GLIBC_2.2 xdr_ypall F diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/libpthread.abilist b/REORG.TODO/sysdeps/unix/sysv/linux/i386/libpthread.abilist new file mode 100644 index 0000000000..8f9c3254be --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/libpthread.abilist @@ -0,0 +1,257 @@ +GLIBC_2.0 GLIBC_2.0 A +GLIBC_2.0 _IO_flockfile F +GLIBC_2.0 _IO_ftrylockfile F +GLIBC_2.0 _IO_funlockfile F +GLIBC_2.0 __close F +GLIBC_2.0 __connect F +GLIBC_2.0 __errno_location F +GLIBC_2.0 __fcntl F +GLIBC_2.0 __fork F +GLIBC_2.0 __h_errno_location F +GLIBC_2.0 __lseek F +GLIBC_2.0 __open F +GLIBC_2.0 __pthread_getspecific F +GLIBC_2.0 __pthread_key_create F +GLIBC_2.0 __pthread_mutex_destroy F +GLIBC_2.0 __pthread_mutex_init F +GLIBC_2.0 __pthread_mutex_lock F +GLIBC_2.0 __pthread_mutex_trylock F +GLIBC_2.0 __pthread_mutex_unlock F +GLIBC_2.0 __pthread_mutexattr_destroy F +GLIBC_2.0 __pthread_mutexattr_init F +GLIBC_2.0 __pthread_mutexattr_settype F +GLIBC_2.0 __pthread_once F +GLIBC_2.0 __pthread_setspecific F +GLIBC_2.0 __read F +GLIBC_2.0 __send F +GLIBC_2.0 __sigaction F +GLIBC_2.0 __wait F +GLIBC_2.0 __write F +GLIBC_2.0 _pthread_cleanup_pop F +GLIBC_2.0 _pthread_cleanup_pop_restore F +GLIBC_2.0 _pthread_cleanup_push F +GLIBC_2.0 _pthread_cleanup_push_defer F +GLIBC_2.0 accept F +GLIBC_2.0 close F +GLIBC_2.0 connect F +GLIBC_2.0 fcntl F +GLIBC_2.0 flockfile F +GLIBC_2.0 fork F +GLIBC_2.0 fsync F +GLIBC_2.0 ftrylockfile F +GLIBC_2.0 funlockfile F +GLIBC_2.0 longjmp F +GLIBC_2.0 lseek F +GLIBC_2.0 msync F +GLIBC_2.0 nanosleep F +GLIBC_2.0 open F +GLIBC_2.0 pause F +GLIBC_2.0 pthread_atfork F +GLIBC_2.0 pthread_attr_destroy F +GLIBC_2.0 pthread_attr_getdetachstate F +GLIBC_2.0 pthread_attr_getinheritsched F +GLIBC_2.0 pthread_attr_getschedparam F +GLIBC_2.0 pthread_attr_getschedpolicy F +GLIBC_2.0 pthread_attr_getscope F +GLIBC_2.0 pthread_attr_init F +GLIBC_2.0 pthread_attr_setdetachstate F +GLIBC_2.0 pthread_attr_setinheritsched F +GLIBC_2.0 pthread_attr_setschedparam F +GLIBC_2.0 pthread_attr_setschedpolicy F +GLIBC_2.0 pthread_attr_setscope F +GLIBC_2.0 pthread_cancel F +GLIBC_2.0 pthread_cond_broadcast F +GLIBC_2.0 pthread_cond_destroy F +GLIBC_2.0 pthread_cond_init F +GLIBC_2.0 pthread_cond_signal F +GLIBC_2.0 pthread_cond_timedwait F +GLIBC_2.0 pthread_cond_wait F +GLIBC_2.0 pthread_condattr_destroy F +GLIBC_2.0 pthread_condattr_init F +GLIBC_2.0 pthread_create F +GLIBC_2.0 pthread_detach F +GLIBC_2.0 pthread_equal F +GLIBC_2.0 pthread_exit F +GLIBC_2.0 pthread_getschedparam F +GLIBC_2.0 pthread_getspecific F +GLIBC_2.0 pthread_join F +GLIBC_2.0 pthread_key_create F +GLIBC_2.0 pthread_key_delete F +GLIBC_2.0 pthread_kill F +GLIBC_2.0 pthread_kill_other_threads_np F +GLIBC_2.0 pthread_mutex_destroy F +GLIBC_2.0 pthread_mutex_init F +GLIBC_2.0 pthread_mutex_lock F +GLIBC_2.0 pthread_mutex_trylock F +GLIBC_2.0 pthread_mutex_unlock F +GLIBC_2.0 pthread_mutexattr_destroy F +GLIBC_2.0 pthread_mutexattr_getkind_np F +GLIBC_2.0 pthread_mutexattr_init F +GLIBC_2.0 pthread_mutexattr_setkind_np F +GLIBC_2.0 pthread_once F +GLIBC_2.0 pthread_self F +GLIBC_2.0 pthread_setcancelstate F +GLIBC_2.0 pthread_setcanceltype F +GLIBC_2.0 pthread_setschedparam F +GLIBC_2.0 pthread_setspecific F +GLIBC_2.0 pthread_sigmask F +GLIBC_2.0 pthread_testcancel F +GLIBC_2.0 raise F +GLIBC_2.0 read F +GLIBC_2.0 recv F +GLIBC_2.0 recvfrom F +GLIBC_2.0 recvmsg F +GLIBC_2.0 sem_destroy F +GLIBC_2.0 sem_getvalue F +GLIBC_2.0 sem_init F +GLIBC_2.0 sem_post F +GLIBC_2.0 sem_trywait F +GLIBC_2.0 sem_wait F +GLIBC_2.0 send F +GLIBC_2.0 sendmsg F +GLIBC_2.0 sendto F +GLIBC_2.0 sigaction F +GLIBC_2.0 siglongjmp F +GLIBC_2.0 sigwait F +GLIBC_2.0 system F +GLIBC_2.0 tcdrain F +GLIBC_2.0 vfork F +GLIBC_2.0 wait F +GLIBC_2.0 waitpid F +GLIBC_2.0 write F +GLIBC_2.1 GLIBC_2.1 A +GLIBC_2.1 __libc_allocate_rtsig F +GLIBC_2.1 __libc_current_sigrtmax F +GLIBC_2.1 __libc_current_sigrtmin F +GLIBC_2.1 pthread_attr_getguardsize F +GLIBC_2.1 pthread_attr_getstackaddr F +GLIBC_2.1 pthread_attr_getstacksize F +GLIBC_2.1 pthread_attr_init F +GLIBC_2.1 pthread_attr_setguardsize F +GLIBC_2.1 pthread_attr_setstackaddr F +GLIBC_2.1 pthread_attr_setstacksize F +GLIBC_2.1 pthread_create F +GLIBC_2.1 pthread_getconcurrency F +GLIBC_2.1 pthread_mutexattr_gettype F +GLIBC_2.1 pthread_mutexattr_settype F +GLIBC_2.1 pthread_rwlock_destroy F +GLIBC_2.1 pthread_rwlock_init F +GLIBC_2.1 pthread_rwlock_rdlock F +GLIBC_2.1 pthread_rwlock_tryrdlock F +GLIBC_2.1 pthread_rwlock_trywrlock F +GLIBC_2.1 pthread_rwlock_unlock F +GLIBC_2.1 pthread_rwlock_wrlock F +GLIBC_2.1 pthread_rwlockattr_destroy F +GLIBC_2.1 pthread_rwlockattr_getkind_np F +GLIBC_2.1 pthread_rwlockattr_getpshared F +GLIBC_2.1 pthread_rwlockattr_init F +GLIBC_2.1 pthread_rwlockattr_setkind_np F +GLIBC_2.1 pthread_rwlockattr_setpshared F +GLIBC_2.1 pthread_setconcurrency F +GLIBC_2.1 sem_destroy F +GLIBC_2.1 sem_getvalue F +GLIBC_2.1 sem_init F +GLIBC_2.1 sem_post F +GLIBC_2.1 sem_trywait F +GLIBC_2.1 sem_wait F +GLIBC_2.1.1 GLIBC_2.1.1 A +GLIBC_2.1.1 sem_close F +GLIBC_2.1.1 sem_open F +GLIBC_2.1.1 sem_unlink F +GLIBC_2.1.2 GLIBC_2.1.2 A +GLIBC_2.1.2 __vfork F +GLIBC_2.11 GLIBC_2.11 A +GLIBC_2.11 pthread_sigqueue F +GLIBC_2.12 GLIBC_2.12 A +GLIBC_2.12 pthread_getname_np F +GLIBC_2.12 pthread_mutex_consistent F +GLIBC_2.12 pthread_mutexattr_getrobust F +GLIBC_2.12 pthread_mutexattr_setrobust F +GLIBC_2.12 pthread_setname_np F +GLIBC_2.18 GLIBC_2.18 A +GLIBC_2.18 pthread_getattr_default_np F +GLIBC_2.18 pthread_setattr_default_np F +GLIBC_2.2 GLIBC_2.2 A +GLIBC_2.2 __open64 F +GLIBC_2.2 __pread64 F +GLIBC_2.2 __pthread_rwlock_destroy F +GLIBC_2.2 __pthread_rwlock_init F +GLIBC_2.2 __pthread_rwlock_rdlock F +GLIBC_2.2 __pthread_rwlock_tryrdlock F +GLIBC_2.2 __pthread_rwlock_trywrlock F +GLIBC_2.2 __pthread_rwlock_unlock F +GLIBC_2.2 __pthread_rwlock_wrlock F +GLIBC_2.2 __pwrite64 F +GLIBC_2.2 __res_state F +GLIBC_2.2 lseek64 F +GLIBC_2.2 open64 F +GLIBC_2.2 pread F +GLIBC_2.2 pread64 F +GLIBC_2.2 pthread_attr_getstack F +GLIBC_2.2 pthread_attr_setstack F +GLIBC_2.2 pthread_barrier_destroy F +GLIBC_2.2 pthread_barrier_init F +GLIBC_2.2 pthread_barrier_wait F +GLIBC_2.2 pthread_barrierattr_destroy F +GLIBC_2.2 pthread_barrierattr_init F +GLIBC_2.2 pthread_barrierattr_setpshared F +GLIBC_2.2 pthread_condattr_getpshared F +GLIBC_2.2 pthread_condattr_setpshared F +GLIBC_2.2 pthread_getcpuclockid F +GLIBC_2.2 pthread_mutex_timedlock F +GLIBC_2.2 pthread_mutexattr_getpshared F +GLIBC_2.2 pthread_mutexattr_setpshared F +GLIBC_2.2 pthread_rwlock_timedrdlock F +GLIBC_2.2 pthread_rwlock_timedwrlock F +GLIBC_2.2 pthread_spin_destroy F +GLIBC_2.2 pthread_spin_init F +GLIBC_2.2 pthread_spin_lock F +GLIBC_2.2 pthread_spin_trylock F +GLIBC_2.2 pthread_spin_unlock F +GLIBC_2.2 pthread_yield F +GLIBC_2.2 pwrite F +GLIBC_2.2 pwrite64 F +GLIBC_2.2 sem_timedwait F +GLIBC_2.2.3 GLIBC_2.2.3 A +GLIBC_2.2.3 pthread_getattr_np F +GLIBC_2.2.6 GLIBC_2.2.6 A +GLIBC_2.2.6 __nanosleep F +GLIBC_2.3.2 GLIBC_2.3.2 A +GLIBC_2.3.2 pthread_cond_broadcast F +GLIBC_2.3.2 pthread_cond_destroy F +GLIBC_2.3.2 pthread_cond_init F +GLIBC_2.3.2 pthread_cond_signal F +GLIBC_2.3.2 pthread_cond_timedwait F +GLIBC_2.3.2 pthread_cond_wait F +GLIBC_2.3.3 GLIBC_2.3.3 A +GLIBC_2.3.3 __pthread_cleanup_routine F +GLIBC_2.3.3 __pthread_register_cancel F +GLIBC_2.3.3 __pthread_register_cancel_defer F +GLIBC_2.3.3 __pthread_unregister_cancel F +GLIBC_2.3.3 __pthread_unregister_cancel_restore F +GLIBC_2.3.3 __pthread_unwind_next F +GLIBC_2.3.3 pthread_attr_getaffinity_np F +GLIBC_2.3.3 pthread_attr_setaffinity_np F +GLIBC_2.3.3 pthread_barrierattr_getpshared F +GLIBC_2.3.3 pthread_condattr_getclock F +GLIBC_2.3.3 pthread_condattr_setclock F +GLIBC_2.3.3 pthread_getaffinity_np F +GLIBC_2.3.3 pthread_setaffinity_np F +GLIBC_2.3.3 pthread_timedjoin_np F +GLIBC_2.3.3 pthread_tryjoin_np F +GLIBC_2.3.4 GLIBC_2.3.4 A +GLIBC_2.3.4 pthread_attr_getaffinity_np F +GLIBC_2.3.4 pthread_attr_setaffinity_np F +GLIBC_2.3.4 pthread_getaffinity_np F +GLIBC_2.3.4 pthread_setaffinity_np F +GLIBC_2.3.4 pthread_setschedprio F +GLIBC_2.4 GLIBC_2.4 A +GLIBC_2.4 pthread_mutex_consistent_np F +GLIBC_2.4 pthread_mutex_getprioceiling F +GLIBC_2.4 pthread_mutex_setprioceiling F +GLIBC_2.4 pthread_mutexattr_getprioceiling F +GLIBC_2.4 pthread_mutexattr_getprotocol F +GLIBC_2.4 pthread_mutexattr_getrobust_np F +GLIBC_2.4 pthread_mutexattr_setprioceiling F +GLIBC_2.4 pthread_mutexattr_setprotocol F +GLIBC_2.4 pthread_mutexattr_setrobust_np F diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/libresolv.abilist b/REORG.TODO/sysdeps/unix/sysv/linux/i386/libresolv.abilist new file mode 100644 index 0000000000..4d50e7c8c6 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/libresolv.abilist @@ -0,0 +1,100 @@ +GLIBC_2.0 GLIBC_2.0 A +GLIBC_2.0 __b64_ntop F +GLIBC_2.0 __b64_pton F +GLIBC_2.0 __dn_comp F +GLIBC_2.0 __dn_count_labels F +GLIBC_2.0 __dn_skipname F +GLIBC_2.0 __fp_nquery F +GLIBC_2.0 __fp_query F +GLIBC_2.0 __fp_resstat F +GLIBC_2.0 __hostalias F +GLIBC_2.0 __loc_aton F +GLIBC_2.0 __loc_ntoa F +GLIBC_2.0 __p_cdname F +GLIBC_2.0 __p_cdnname F +GLIBC_2.0 __p_class F +GLIBC_2.0 __p_class_syms D 0x54 +GLIBC_2.0 __p_fqname F +GLIBC_2.0 __p_fqnname F +GLIBC_2.0 __p_option F +GLIBC_2.0 __p_query F +GLIBC_2.0 __p_secstodate F +GLIBC_2.0 __p_time F +GLIBC_2.0 __p_type F +GLIBC_2.0 __p_type_syms D 0x228 +GLIBC_2.0 __putlong F +GLIBC_2.0 __putshort F +GLIBC_2.0 __res_close F +GLIBC_2.0 __res_dnok F +GLIBC_2.0 __res_hnok F +GLIBC_2.0 __res_isourserver F +GLIBC_2.0 __res_mailok F +GLIBC_2.0 __res_nameinquery F +GLIBC_2.0 __res_ownok F +GLIBC_2.0 __res_queriesmatch F +GLIBC_2.0 __res_send F +GLIBC_2.0 __sym_ntop F +GLIBC_2.0 __sym_ntos F +GLIBC_2.0 __sym_ston F +GLIBC_2.0 _gethtbyaddr F +GLIBC_2.0 _gethtbyname F +GLIBC_2.0 _gethtbyname2 F +GLIBC_2.0 _gethtent F +GLIBC_2.0 _getlong F +GLIBC_2.0 _getshort F +GLIBC_2.0 _res_opcodes D 0x40 +GLIBC_2.0 _sethtent F +GLIBC_2.0 dn_expand F +GLIBC_2.0 inet_net_ntop F +GLIBC_2.0 inet_net_pton F +GLIBC_2.0 inet_neta F +GLIBC_2.0 res_gethostbyaddr F +GLIBC_2.0 res_gethostbyname F +GLIBC_2.0 res_gethostbyname2 F +GLIBC_2.0 res_mkquery F +GLIBC_2.0 res_query F +GLIBC_2.0 res_querydomain F +GLIBC_2.0 res_search F +GLIBC_2.0 res_send_setqhook F +GLIBC_2.0 res_send_setrhook F +GLIBC_2.2 GLIBC_2.2 A +GLIBC_2.2 __dn_expand F +GLIBC_2.2 __res_hostalias F +GLIBC_2.2 __res_mkquery F +GLIBC_2.2 __res_nmkquery F +GLIBC_2.2 __res_nquery F +GLIBC_2.2 __res_nquerydomain F +GLIBC_2.2 __res_nsearch F +GLIBC_2.2 __res_nsend F +GLIBC_2.2 __res_query F +GLIBC_2.2 __res_querydomain F +GLIBC_2.2 __res_search F +GLIBC_2.3.2 GLIBC_2.3.2 A +GLIBC_2.3.2 __p_rcode F +GLIBC_2.9 GLIBC_2.9 A +GLIBC_2.9 ns_datetosecs F +GLIBC_2.9 ns_format_ttl F +GLIBC_2.9 ns_get16 F +GLIBC_2.9 ns_get32 F +GLIBC_2.9 ns_initparse F +GLIBC_2.9 ns_makecanon F +GLIBC_2.9 ns_msg_getflag F +GLIBC_2.9 ns_name_compress F +GLIBC_2.9 ns_name_ntol F +GLIBC_2.9 ns_name_ntop F +GLIBC_2.9 ns_name_pack F +GLIBC_2.9 ns_name_pton F +GLIBC_2.9 ns_name_rollback F +GLIBC_2.9 ns_name_skip F +GLIBC_2.9 ns_name_uncompress F +GLIBC_2.9 ns_name_unpack F +GLIBC_2.9 ns_parse_ttl F +GLIBC_2.9 ns_parserr F +GLIBC_2.9 ns_put16 F +GLIBC_2.9 ns_put32 F +GLIBC_2.9 ns_samedomain F +GLIBC_2.9 ns_samename F +GLIBC_2.9 ns_skiprr F +GLIBC_2.9 ns_sprintrr F +GLIBC_2.9 ns_sprintrrf F +GLIBC_2.9 ns_subdomain F diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/librt.abilist b/REORG.TODO/sysdeps/unix/sysv/linux/i386/librt.abilist new file mode 100644 index 0000000000..15e4418863 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/librt.abilist @@ -0,0 +1,47 @@ +GLIBC_2.1 GLIBC_2.1 A +GLIBC_2.1 aio_cancel F +GLIBC_2.1 aio_cancel64 F +GLIBC_2.1 aio_error F +GLIBC_2.1 aio_error64 F +GLIBC_2.1 aio_fsync F +GLIBC_2.1 aio_fsync64 F +GLIBC_2.1 aio_init F +GLIBC_2.1 aio_read F +GLIBC_2.1 aio_read64 F +GLIBC_2.1 aio_return F +GLIBC_2.1 aio_return64 F +GLIBC_2.1 aio_suspend F +GLIBC_2.1 aio_suspend64 F +GLIBC_2.1 aio_write F +GLIBC_2.1 aio_write64 F +GLIBC_2.1 lio_listio F +GLIBC_2.1 lio_listio64 F +GLIBC_2.2 GLIBC_2.2 A +GLIBC_2.2 clock_getcpuclockid F +GLIBC_2.2 clock_getres F +GLIBC_2.2 clock_gettime F +GLIBC_2.2 clock_nanosleep F +GLIBC_2.2 clock_settime F +GLIBC_2.2 shm_open F +GLIBC_2.2 shm_unlink F +GLIBC_2.2 timer_create F +GLIBC_2.2 timer_delete F +GLIBC_2.2 timer_getoverrun F +GLIBC_2.2 timer_gettime F +GLIBC_2.2 timer_settime F +GLIBC_2.3.4 GLIBC_2.3.4 A +GLIBC_2.3.4 mq_close F +GLIBC_2.3.4 mq_getattr F +GLIBC_2.3.4 mq_notify F +GLIBC_2.3.4 mq_open F +GLIBC_2.3.4 mq_receive F +GLIBC_2.3.4 mq_send F +GLIBC_2.3.4 mq_setattr F +GLIBC_2.3.4 mq_timedreceive F +GLIBC_2.3.4 mq_timedsend F +GLIBC_2.3.4 mq_unlink F +GLIBC_2.4 GLIBC_2.4 A +GLIBC_2.4 lio_listio F +GLIBC_2.4 lio_listio64 F +GLIBC_2.7 GLIBC_2.7 A +GLIBC_2.7 __mq_open_2 F diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/libthread_db.abilist b/REORG.TODO/sysdeps/unix/sysv/linux/i386/libthread_db.abilist new file mode 100644 index 0000000000..a8a8c2c68d --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/libthread_db.abilist @@ -0,0 +1,44 @@ +GLIBC_2.1.3 GLIBC_2.1.3 A +GLIBC_2.1.3 td_init F +GLIBC_2.1.3 td_log F +GLIBC_2.1.3 td_ta_clear_event F +GLIBC_2.1.3 td_ta_delete F +GLIBC_2.1.3 td_ta_enable_stats F +GLIBC_2.1.3 td_ta_event_addr F +GLIBC_2.1.3 td_ta_event_getmsg F +GLIBC_2.1.3 td_ta_get_nthreads F +GLIBC_2.1.3 td_ta_get_ph F +GLIBC_2.1.3 td_ta_get_stats F +GLIBC_2.1.3 td_ta_map_id2thr F +GLIBC_2.1.3 td_ta_map_lwp2thr F +GLIBC_2.1.3 td_ta_new F +GLIBC_2.1.3 td_ta_reset_stats F +GLIBC_2.1.3 td_ta_set_event F +GLIBC_2.1.3 td_ta_setconcurrency F +GLIBC_2.1.3 td_ta_thr_iter F +GLIBC_2.1.3 td_ta_tsd_iter F +GLIBC_2.1.3 td_thr_clear_event F +GLIBC_2.1.3 td_thr_dbresume F +GLIBC_2.1.3 td_thr_dbsuspend F +GLIBC_2.1.3 td_thr_event_enable F +GLIBC_2.1.3 td_thr_event_getmsg F +GLIBC_2.1.3 td_thr_get_info F +GLIBC_2.1.3 td_thr_getfpregs F +GLIBC_2.1.3 td_thr_getgregs F +GLIBC_2.1.3 td_thr_getxregs F +GLIBC_2.1.3 td_thr_getxregsize F +GLIBC_2.1.3 td_thr_set_event F +GLIBC_2.1.3 td_thr_setfpregs F +GLIBC_2.1.3 td_thr_setgregs F +GLIBC_2.1.3 td_thr_setprio F +GLIBC_2.1.3 td_thr_setsigpending F +GLIBC_2.1.3 td_thr_setxregs F +GLIBC_2.1.3 td_thr_sigsetmask F +GLIBC_2.1.3 td_thr_tsd F +GLIBC_2.1.3 td_thr_validate F +GLIBC_2.2.3 GLIBC_2.2.3 A +GLIBC_2.2.3 td_symbol_list F +GLIBC_2.3 GLIBC_2.3 A +GLIBC_2.3 td_thr_tls_get_addr F +GLIBC_2.3.3 GLIBC_2.3.3 A +GLIBC_2.3.3 td_thr_tlsbase F diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/libutil.abilist b/REORG.TODO/sysdeps/unix/sysv/linux/i386/libutil.abilist new file mode 100644 index 0000000000..89c67755c4 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/libutil.abilist @@ -0,0 +1,7 @@ +GLIBC_2.0 GLIBC_2.0 A +GLIBC_2.0 forkpty F +GLIBC_2.0 login F +GLIBC_2.0 login_tty F +GLIBC_2.0 logout F +GLIBC_2.0 logwtmp F +GLIBC_2.0 openpty F diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/lll_timedlock_wait.c b/REORG.TODO/sysdeps/unix/sysv/linux/i386/lll_timedlock_wait.c new file mode 100644 index 0000000000..f6875b8f89 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/lll_timedlock_wait.c @@ -0,0 +1 @@ +/* __lll_timedlock_wait is in lowlevellock.S. */ diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/lll_timedwait_tid.c b/REORG.TODO/sysdeps/unix/sysv/linux/i386/lll_timedwait_tid.c new file mode 100644 index 0000000000..43900c6294 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/lll_timedwait_tid.c @@ -0,0 +1 @@ +/* __lll_timedwait_tid is in lowlevellock.S. */ diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/localplt.data b/REORG.TODO/sysdeps/unix/sysv/linux/i386/localplt.data new file mode 100644 index 0000000000..8ea4333846 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/localplt.data @@ -0,0 +1,18 @@ +# Linker in binutils 2.26 and newer consolidates R_X86_64_JUMP_SLOT +# relocation with R_386_GLOB_DAT relocation against the same symbol. +libc.so: _Unwind_Find_FDE + REL R_386_GLOB_DAT +libc.so: calloc + REL R_386_GLOB_DAT +libc.so: free + REL R_386_GLOB_DAT +libc.so: malloc + REL R_386_GLOB_DAT +libc.so: memalign + REL R_386_GLOB_DAT +libc.so: realloc + REL R_386_GLOB_DAT +libm.so: matherr + REL R_386_GLOB_DAT +# The main malloc is interposed into the dynamic linker, for +# allocations after the initial link (when dlopen is used). +ld.so: malloc + REL R_386_GLOB_DAT +ld.so: calloc + REL R_386_GLOB_DAT +ld.so: realloc + REL R_386_GLOB_DAT +ld.so: free + REL R_386_GLOB_DAT +# The TLS-enabled version of these functions is interposed from libc.so. +ld.so: _dl_signal_error + REL R_386_GLOB_DAT +ld.so: _dl_catch_error + REL R_386_GLOB_DAT diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/lockf64.c b/REORG.TODO/sysdeps/unix/sysv/linux/i386/lockf64.c new file mode 100644 index 0000000000..23b99f8f22 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/lockf64.c @@ -0,0 +1,70 @@ +/* Copyright (C) 1994-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#include <sys/types.h> +#include <unistd.h> +#include <fcntl.h> +#include <errno.h> +#include <string.h> +#include <sysdep.h> + +/* lockf is a simplified interface to fcntl's locking facilities. */ + +int +lockf64 (int fd, int cmd, off64_t len64) +{ + struct flock64 fl64; + int cmd64; + int result; + + memset ((char *) &fl64, '\0', sizeof (fl64)); + fl64.l_whence = SEEK_CUR; + fl64.l_start = 0; + fl64.l_len = len64; + + switch (cmd) + { + case F_TEST: + /* Test the lock: return 0 if FD is unlocked or locked by this process; + return -1, set errno to EACCES, if another process holds the lock. */ + fl64.l_type = F_RDLCK; + INTERNAL_SYSCALL_DECL (err); + result = INTERNAL_SYSCALL (fcntl64, err, 3, fd, F_GETLK64, &fl64); + if (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (result, err))) + return INLINE_SYSCALL_ERROR_RETURN_VALUE (INTERNAL_SYSCALL_ERRNO (result, + err)); + if (fl64.l_type == F_UNLCK || fl64.l_pid == __getpid ()) + return 0; + return INLINE_SYSCALL_ERROR_RETURN_VALUE (EACCES); + case F_ULOCK: + fl64.l_type = F_UNLCK; + cmd64 = F_SETLK64; + break; + case F_LOCK: + fl64.l_type = F_WRLCK; + cmd64 = F_SETLKW64; + break; + case F_TLOCK: + fl64.l_type = F_WRLCK; + cmd64 = F_SETLK64; + break; + + default: + return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL); + } + return INLINE_SYSCALL (fcntl64, 3, fd, cmd64, &fl64); +} diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/lowlevellock.S b/REORG.TODO/sysdeps/unix/sysv/linux/i386/lowlevellock.S new file mode 100644 index 0000000000..8fcca5be99 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/lowlevellock.S @@ -0,0 +1,466 @@ +/* Copyright (C) 2002-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. + + 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 <sysdep.h> +#include <pthread-errnos.h> +#include <kernel-features.h> +#include <lowlevellock.h> + +#include <stap-probe.h> + + .text + +#ifdef __ASSUME_PRIVATE_FUTEX +# define LOAD_PRIVATE_FUTEX_WAIT(reg) \ + movl $(FUTEX_WAIT | FUTEX_PRIVATE_FLAG), reg +# define LOAD_PRIVATE_FUTEX_WAKE(reg) \ + movl $(FUTEX_WAKE | FUTEX_PRIVATE_FLAG), reg +# define LOAD_FUTEX_WAIT(reg) \ + xorl $(FUTEX_WAIT | FUTEX_PRIVATE_FLAG), reg +# define LOAD_FUTEX_WAIT_ABS(reg) \ + xorl $(FUTEX_WAIT_BITSET | FUTEX_PRIVATE_FLAG | FUTEX_CLOCK_REALTIME), reg +# define LOAD_FUTEX_WAKE(reg) \ + xorl $(FUTEX_WAKE | FUTEX_PRIVATE_FLAG), reg +#else +# if FUTEX_WAIT == 0 +# define LOAD_PRIVATE_FUTEX_WAIT(reg) \ + movl %gs:PRIVATE_FUTEX, reg +# else +# define LOAD_PRIVATE_FUTEX_WAIT(reg) \ + movl %gs:PRIVATE_FUTEX, reg ; \ + orl $FUTEX_WAIT, reg +# endif +# define LOAD_PRIVATE_FUTEX_WAKE(reg) \ + movl %gs:PRIVATE_FUTEX, reg ; \ + orl $FUTEX_WAKE, reg +# if FUTEX_WAIT == 0 +# define LOAD_FUTEX_WAIT(reg) \ + xorl $FUTEX_PRIVATE_FLAG, reg ; \ + andl %gs:PRIVATE_FUTEX, reg +# else +# define LOAD_FUTEX_WAIT(reg) \ + xorl $FUTEX_PRIVATE_FLAG, reg ; \ + andl %gs:PRIVATE_FUTEX, reg ; \ + orl $FUTEX_WAIT, reg +# endif +# define LOAD_FUTEX_WAIT_ABS(reg) \ + xorl $FUTEX_PRIVATE_FLAG, reg ; \ + andl %gs:PRIVATE_FUTEX, reg ; \ + orl $FUTEX_WAIT_BITSET | FUTEX_CLOCK_REALTIME, reg +# define LOAD_FUTEX_WAKE(reg) \ + xorl $FUTEX_PRIVATE_FLAG, reg ; \ + andl %gs:PRIVATE_FUTEX, reg ; \ + orl $FUTEX_WAKE, reg +#endif + + .globl __lll_lock_wait_private + .type __lll_lock_wait_private,@function + .hidden __lll_lock_wait_private + .align 16 +__lll_lock_wait_private: + cfi_startproc + pushl %edx + cfi_adjust_cfa_offset(4) + pushl %ebx + cfi_adjust_cfa_offset(4) + pushl %esi + cfi_adjust_cfa_offset(4) + cfi_offset(%edx, -8) + cfi_offset(%ebx, -12) + cfi_offset(%esi, -16) + + movl $2, %edx + movl %ecx, %ebx + xorl %esi, %esi /* No timeout. */ + LOAD_PRIVATE_FUTEX_WAIT (%ecx) + + cmpl %edx, %eax /* NB: %edx == 2 */ + jne 2f + +1: LIBC_PROBE (lll_lock_wait_private, 1, %ebx) + movl $SYS_futex, %eax + ENTER_KERNEL + +2: movl %edx, %eax + xchgl %eax, (%ebx) /* NB: lock is implied */ + + testl %eax, %eax + jnz 1b + + popl %esi + cfi_adjust_cfa_offset(-4) + cfi_restore(%esi) + popl %ebx + cfi_adjust_cfa_offset(-4) + cfi_restore(%ebx) + popl %edx + cfi_adjust_cfa_offset(-4) + cfi_restore(%edx) + ret + cfi_endproc + .size __lll_lock_wait_private,.-__lll_lock_wait_private + +#if !IS_IN (libc) + .globl __lll_lock_wait + .type __lll_lock_wait,@function + .hidden __lll_lock_wait + .align 16 +__lll_lock_wait: + cfi_startproc + pushl %edx + cfi_adjust_cfa_offset(4) + pushl %ebx + cfi_adjust_cfa_offset(4) + pushl %esi + cfi_adjust_cfa_offset(4) + cfi_offset(%edx, -8) + cfi_offset(%ebx, -12) + cfi_offset(%esi, -16) + + movl %edx, %ebx + movl $2, %edx + xorl %esi, %esi /* No timeout. */ + LOAD_FUTEX_WAIT (%ecx) + + cmpl %edx, %eax /* NB: %edx == 2 */ + jne 2f + +1: movl $SYS_futex, %eax + ENTER_KERNEL + +2: movl %edx, %eax + xchgl %eax, (%ebx) /* NB: lock is implied */ + + testl %eax, %eax + jnz 1b + + popl %esi + cfi_adjust_cfa_offset(-4) + cfi_restore(%esi) + popl %ebx + cfi_adjust_cfa_offset(-4) + cfi_restore(%ebx) + popl %edx + cfi_adjust_cfa_offset(-4) + cfi_restore(%edx) + ret + cfi_endproc + .size __lll_lock_wait,.-__lll_lock_wait + + /* %ecx: futex + %esi: flags + %edx: timeout + %eax: futex value + */ + .globl __lll_timedlock_wait + .type __lll_timedlock_wait,@function + .hidden __lll_timedlock_wait + .align 16 +__lll_timedlock_wait: + cfi_startproc + pushl %ebp + cfi_adjust_cfa_offset(4) + cfi_rel_offset(%ebp, 0) + pushl %ebx + cfi_adjust_cfa_offset(4) + cfi_rel_offset(%ebx, 0) + +# ifndef __ASSUME_FUTEX_CLOCK_REALTIME +# ifdef PIC + LOAD_PIC_REG (bx) + cmpl $0, __have_futex_clock_realtime@GOTOFF(%ebx) +# else + cmpl $0, __have_futex_clock_realtime +# endif + je .Lreltmo +# endif + + cmpl $0, (%edx) + js 8f + + movl %ecx, %ebx + movl %esi, %ecx + movl %edx, %esi + movl $0xffffffff, %ebp + LOAD_FUTEX_WAIT_ABS (%ecx) + + movl $2, %edx + cmpl %edx, %eax + jne 2f + +1: movl $SYS_futex, %eax + movl $2, %edx + ENTER_KERNEL + +2: xchgl %edx, (%ebx) /* NB: lock is implied */ + + testl %edx, %edx + jz 3f + + cmpl $-ETIMEDOUT, %eax + je 4f + cmpl $-EINVAL, %eax + jne 1b +4: movl %eax, %edx + negl %edx + +3: movl %edx, %eax +7: popl %ebx + cfi_adjust_cfa_offset(-4) + cfi_restore(%ebx) + popl %ebp + cfi_adjust_cfa_offset(-4) + cfi_restore(%ebp) + ret + +8: movl $ETIMEDOUT, %eax + jmp 7b + +# ifndef __ASSUME_FUTEX_CLOCK_REALTIME +.Lreltmo: + /* Check for a valid timeout value. */ + cmpl $1000000000, 4(%edx) + jae 3f + + pushl %esi + cfi_adjust_cfa_offset(4) + cfi_rel_offset(%esi, 0) + pushl %edi + cfi_adjust_cfa_offset(4) + cfi_rel_offset(%edi, 0) + + /* Stack frame for the timespec and timeval structs. */ + subl $8, %esp + cfi_adjust_cfa_offset(8) + + movl %ecx, %ebp + movl %edx, %edi + + movl $2, %edx + xchgl %edx, (%ebp) + + test %edx, %edx + je 6f + +1: + /* Get current time. */ + movl %esp, %ebx + xorl %ecx, %ecx + movl $__NR_gettimeofday, %eax + ENTER_KERNEL + + /* Compute relative timeout. */ + movl 4(%esp), %eax + movl $1000, %edx + mul %edx /* Milli seconds to nano seconds. */ + movl (%edi), %ecx + movl 4(%edi), %edx + subl (%esp), %ecx + subl %eax, %edx + jns 4f + addl $1000000000, %edx + subl $1, %ecx +4: testl %ecx, %ecx + js 2f /* Time is already up. */ + + /* Store relative timeout. */ + movl %ecx, (%esp) + movl %edx, 4(%esp) + + /* Futex call. */ + movl %ebp, %ebx + movl $2, %edx + movl %esp, %esi + movl 16(%esp), %ecx + LOAD_FUTEX_WAIT (%ecx) + movl $SYS_futex, %eax + ENTER_KERNEL + + /* NB: %edx == 2 */ + xchgl %edx, (%ebp) + + testl %edx, %edx + je 6f + + cmpl $-ETIMEDOUT, %eax + jne 1b +2: movl $ETIMEDOUT, %edx + +6: addl $8, %esp + cfi_adjust_cfa_offset(-8) + popl %edi + cfi_adjust_cfa_offset(-4) + cfi_restore(%edi) + popl %esi + cfi_adjust_cfa_offset(-4) + cfi_restore(%esi) +7: popl %ebx + cfi_adjust_cfa_offset(-4) + cfi_restore(%ebx) + popl %ebp + cfi_adjust_cfa_offset(-4) + cfi_restore(%ebp) + movl %edx, %eax + ret + +3: movl $EINVAL, %edx + jmp 7b +# endif + cfi_endproc + .size __lll_timedlock_wait,.-__lll_timedlock_wait +#endif + + .globl __lll_unlock_wake_private + .type __lll_unlock_wake_private,@function + .hidden __lll_unlock_wake_private + .align 16 +__lll_unlock_wake_private: + cfi_startproc + pushl %ebx + cfi_adjust_cfa_offset(4) + pushl %ecx + cfi_adjust_cfa_offset(4) + pushl %edx + cfi_adjust_cfa_offset(4) + cfi_offset(%ebx, -8) + cfi_offset(%ecx, -12) + cfi_offset(%edx, -16) + + movl %eax, %ebx + movl $0, (%eax) + LOAD_PRIVATE_FUTEX_WAKE (%ecx) + movl $1, %edx /* Wake one thread. */ + movl $SYS_futex, %eax + ENTER_KERNEL + + popl %edx + cfi_adjust_cfa_offset(-4) + cfi_restore(%edx) + popl %ecx + cfi_adjust_cfa_offset(-4) + cfi_restore(%ecx) + popl %ebx + cfi_adjust_cfa_offset(-4) + cfi_restore(%ebx) + ret + cfi_endproc + .size __lll_unlock_wake_private,.-__lll_unlock_wake_private + +#if !IS_IN (libc) + .globl __lll_unlock_wake + .type __lll_unlock_wake,@function + .hidden __lll_unlock_wake + .align 16 +__lll_unlock_wake: + cfi_startproc + pushl %ebx + cfi_adjust_cfa_offset(4) + pushl %ecx + cfi_adjust_cfa_offset(4) + pushl %edx + cfi_adjust_cfa_offset(4) + cfi_offset(%ebx, -8) + cfi_offset(%ecx, -12) + cfi_offset(%edx, -16) + + movl %eax, %ebx + movl $0, (%eax) + LOAD_FUTEX_WAKE (%ecx) + movl $1, %edx /* Wake one thread. */ + movl $SYS_futex, %eax + ENTER_KERNEL + + popl %edx + cfi_adjust_cfa_offset(-4) + cfi_restore(%edx) + popl %ecx + cfi_adjust_cfa_offset(-4) + cfi_restore(%ecx) + popl %ebx + cfi_adjust_cfa_offset(-4) + cfi_restore(%ebx) + ret + cfi_endproc + .size __lll_unlock_wake,.-__lll_unlock_wake + + .globl __lll_timedwait_tid + .type __lll_timedwait_tid,@function + .hidden __lll_timedwait_tid + .align 16 +__lll_timedwait_tid: + pushl %edi + pushl %esi + pushl %ebx + pushl %ebp + + movl %eax, %ebp + movl %edx, %edi + subl $8, %esp + + /* Get current time. */ +2: movl %esp, %ebx + xorl %ecx, %ecx + movl $__NR_gettimeofday, %eax + ENTER_KERNEL + + /* Compute relative timeout. */ + movl 4(%esp), %eax + movl $1000, %edx + mul %edx /* Milli seconds to nano seconds. */ + movl (%edi), %ecx + movl 4(%edi), %edx + subl (%esp), %ecx + subl %eax, %edx + jns 5f + addl $1000000000, %edx + subl $1, %ecx +5: testl %ecx, %ecx + js 6f /* Time is already up. */ + + movl %ecx, (%esp) /* Store relative timeout. */ + movl %edx, 4(%esp) + + movl (%ebp), %edx + testl %edx, %edx + jz 4f + + movl %esp, %esi + /* XXX The kernel so far uses global futex for the wakeup at + all times. */ + xorl %ecx, %ecx /* movl $FUTEX_WAIT, %ecx */ + movl %ebp, %ebx + movl $SYS_futex, %eax + ENTER_KERNEL + + cmpl $0, (%ebx) + jne 1f +4: xorl %eax, %eax + +3: addl $8, %esp + popl %ebp + popl %ebx + popl %esi + popl %edi + ret + +1: cmpl $-ETIMEDOUT, %eax + jne 2b +6: movl $ETIMEDOUT, %eax + jmp 3b + .size __lll_timedwait_tid,.-__lll_timedwait_tid +#endif diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/lowlevellock.h b/REORG.TODO/sysdeps/unix/sysv/linux/i386/lowlevellock.h new file mode 100644 index 0000000000..197bb1fcd9 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/lowlevellock.h @@ -0,0 +1,267 @@ +/* Copyright (C) 2002-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. + + 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 _LOWLEVELLOCK_H +#define _LOWLEVELLOCK_H 1 + +#include <stap-probe.h> + +#ifndef __ASSEMBLER__ +# include <time.h> +# include <sys/param.h> +# include <bits/pthreadtypes.h> +# include <kernel-features.h> +# include <tcb-offsets.h> + +# ifndef LOCK_INSTR +# ifdef UP +# define LOCK_INSTR /* nothing */ +# else +# define LOCK_INSTR "lock;" +# endif +# endif +#else +# ifndef LOCK +# ifdef UP +# define LOCK +# else +# define LOCK lock +# endif +# endif +#endif + +#include <lowlevellock-futex.h> + +/* XXX Remove when no assembler code uses futexes anymore. */ +#define SYS_futex __NR_futex + +#ifndef __ASSEMBLER__ + +/* Initializer for compatibility lock. */ +#define LLL_LOCK_INITIALIZER (0) +#define LLL_LOCK_INITIALIZER_LOCKED (1) +#define LLL_LOCK_INITIALIZER_WAITERS (2) + + +/* NB: in the lll_trylock macro we simply return the value in %eax + after the cmpxchg instruction. In case the operation succeded this + value is zero. In case the operation failed, the cmpxchg instruction + has loaded the current value of the memory work which is guaranteed + to be nonzero. */ +#if !IS_IN (libc) || defined UP +# define __lll_trylock_asm LOCK_INSTR "cmpxchgl %2, %1" +#else +# define __lll_trylock_asm "cmpl $0, %%gs:%P5\n\t" \ + "je 0f\n\t" \ + "lock\n" \ + "0:\tcmpxchgl %2, %1" +#endif + +#define lll_trylock(futex) \ + ({ int ret; \ + __asm __volatile (__lll_trylock_asm \ + : "=a" (ret), "=m" (futex) \ + : "r" (LLL_LOCK_INITIALIZER_LOCKED), "m" (futex), \ + "0" (LLL_LOCK_INITIALIZER), \ + "i" (MULTIPLE_THREADS_OFFSET) \ + : "memory"); \ + ret; }) + + +#define lll_cond_trylock(futex) \ + ({ int ret; \ + __asm __volatile (LOCK_INSTR "cmpxchgl %2, %1" \ + : "=a" (ret), "=m" (futex) \ + : "r" (LLL_LOCK_INITIALIZER_WAITERS), \ + "m" (futex), "0" (LLL_LOCK_INITIALIZER) \ + : "memory"); \ + ret; }) + +#if !IS_IN (libc) || defined UP +# define __lll_lock_asm_start LOCK_INSTR "cmpxchgl %1, %2\n\t" +#else +# define __lll_lock_asm_start "cmpl $0, %%gs:%P6\n\t" \ + "je 0f\n\t" \ + "lock\n" \ + "0:\tcmpxchgl %1, %2\n\t" +#endif + +#define lll_lock(futex, private) \ + (void) \ + ({ int ignore1, ignore2; \ + if (__builtin_constant_p (private) && (private) == LLL_PRIVATE) \ + __asm __volatile (__lll_lock_asm_start \ + "jz 18f\n\t" \ + "1:\tleal %2, %%ecx\n" \ + "2:\tcall __lll_lock_wait_private\n" \ + "18:" \ + : "=a" (ignore1), "=c" (ignore2), "=m" (futex) \ + : "0" (0), "1" (1), "m" (futex), \ + "i" (MULTIPLE_THREADS_OFFSET) \ + : "memory"); \ + else \ + { \ + int ignore3; \ + __asm __volatile (__lll_lock_asm_start \ + "jz 18f\n\t" \ + "1:\tleal %2, %%edx\n" \ + "0:\tmovl %8, %%ecx\n" \ + "2:\tcall __lll_lock_wait\n" \ + "18:" \ + : "=a" (ignore1), "=c" (ignore2), \ + "=m" (futex), "=&d" (ignore3) \ + : "1" (1), "m" (futex), \ + "i" (MULTIPLE_THREADS_OFFSET), "0" (0), \ + "g" ((int) (private)) \ + : "memory"); \ + } \ + }) + + +/* Special version of lll_lock which causes the unlock function to + always wakeup waiters. */ +#define lll_cond_lock(futex, private) \ + (void) \ + ({ int ignore1, ignore2, ignore3; \ + __asm __volatile (LOCK_INSTR "cmpxchgl %1, %2\n\t" \ + "jz 18f\n\t" \ + "1:\tleal %2, %%edx\n" \ + "0:\tmovl %7, %%ecx\n" \ + "2:\tcall __lll_lock_wait\n" \ + "18:" \ + : "=a" (ignore1), "=c" (ignore2), "=m" (futex), \ + "=&d" (ignore3) \ + : "0" (0), "1" (2), "m" (futex), "g" ((int) (private))\ + : "memory"); \ + }) + + +#define lll_timedlock(futex, timeout, private) \ + ({ int result, ignore1, ignore2, ignore3; \ + __asm __volatile (LOCK_INSTR "cmpxchgl %1, %3\n\t" \ + "jz 18f\n\t" \ + "1:\tleal %3, %%ecx\n" \ + "0:\tmovl %8, %%edx\n" \ + "2:\tcall __lll_timedlock_wait\n" \ + "18:" \ + : "=a" (result), "=c" (ignore1), "=&d" (ignore2), \ + "=m" (futex), "=S" (ignore3) \ + : "0" (0), "1" (1), "m" (futex), "m" (timeout), \ + "4" ((int) (private)) \ + : "memory"); \ + result; }) + +extern int __lll_timedlock_elision (int *futex, short *adapt_count, + const struct timespec *timeout, + int private) attribute_hidden; + +#define lll_timedlock_elision(futex, adapt_count, timeout, private) \ + __lll_timedlock_elision(&(futex), &(adapt_count), timeout, private) + +#if !IS_IN (libc) || defined UP +# define __lll_unlock_asm LOCK_INSTR "subl $1, %0\n\t" +#else +# define __lll_unlock_asm "cmpl $0, %%gs:%P3\n\t" \ + "je 0f\n\t" \ + "lock\n" \ + "0:\tsubl $1,%0\n\t" +#endif + +#define lll_unlock(futex, private) \ + (void) \ + ({ int ignore; \ + if (__builtin_constant_p (private) && (private) == LLL_PRIVATE) \ + __asm __volatile (__lll_unlock_asm \ + "je 18f\n\t" \ + "1:\tleal %0, %%eax\n" \ + "2:\tcall __lll_unlock_wake_private\n" \ + "18:" \ + : "=m" (futex), "=&a" (ignore) \ + : "m" (futex), "i" (MULTIPLE_THREADS_OFFSET) \ + : "memory"); \ + else \ + { \ + int ignore2; \ + __asm __volatile (__lll_unlock_asm \ + "je 18f\n\t" \ + "1:\tleal %0, %%eax\n" \ + "0:\tmovl %5, %%ecx\n" \ + "2:\tcall __lll_unlock_wake\n" \ + "18:" \ + : "=m" (futex), "=&a" (ignore), "=&c" (ignore2) \ + : "i" (MULTIPLE_THREADS_OFFSET), "m" (futex), \ + "g" ((int) (private)) \ + : "memory"); \ + } \ + }) + + +#define lll_islocked(futex) \ + (futex != LLL_LOCK_INITIALIZER) + +/* The kernel notifies a process which uses CLONE_CHILD_CLEARTID via futex + wake-up when the clone terminates. The memory location contains the + thread ID while the clone is running and is reset to zero by the kernel + afterwards. The kernel up to version 3.16.3 does not use the private futex + operations for futex wake-up when the clone terminates. */ +#define lll_wait_tid(tid) \ + do { \ + __typeof (tid) __tid; \ + while ((__tid = (tid)) != 0) \ + lll_futex_wait (&(tid), __tid, LLL_SHARED);\ + } while (0) + +extern int __lll_timedwait_tid (int *tid, const struct timespec *abstime) + __attribute__ ((regparm (2))) attribute_hidden; + +/* As lll_wait_tid, but with a timeout. If the timeout occurs then return + ETIMEDOUT. If ABSTIME is invalid, return EINVAL. + XXX Note that this differs from the generic version in that we do the + error checking here and not in __lll_timedwait_tid. */ +#define lll_timedwait_tid(tid, abstime) \ + ({ \ + int __result = 0; \ + if ((tid) != 0) \ + { \ + if ((abstime)->tv_nsec < 0 || (abstime)->tv_nsec >= 1000000000) \ + __result = EINVAL; \ + else \ + __result = __lll_timedwait_tid (&(tid), (abstime)); \ + } \ + __result; }) + + +extern int __lll_lock_elision (int *futex, short *adapt_count, int private) + attribute_hidden; + +extern int __lll_unlock_elision(int *lock, int private) + attribute_hidden; + +extern int __lll_trylock_elision(int *lock, short *adapt_count) + attribute_hidden; + +#define lll_lock_elision(futex, adapt_count, private) \ + __lll_lock_elision (&(futex), &(adapt_count), private) +#define lll_unlock_elision(futex, adapt_count, private) \ + __lll_unlock_elision (&(futex), private) +#define lll_trylock_elision(futex, adapt_count) \ + __lll_trylock_elision(&(futex), &(adapt_count)) + +#endif /* !__ASSEMBLER__ */ + +#endif /* lowlevellock.h */ diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/lxstat.c b/REORG.TODO/sysdeps/unix/sysv/linux/i386/lxstat.c new file mode 100644 index 0000000000..fc9d2f234a --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/lxstat.c @@ -0,0 +1,62 @@ +/* lxstat using old-style Unix lstat system call. + Copyright (C) 1991-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +/* Ho hum, if xstat == xstat64 we must get rid of the prototype or gcc + will complain since they don't strictly match. */ +#define __lxstat64 __lxstat64_disable + +#include <errno.h> +#include <stddef.h> +#include <sys/stat.h> +#include <kernel_stat.h> + +#include <sysdep.h> +#include <sys/syscall.h> + +#include <xstatconv.h> + + +/* Get information about the file NAME in BUF. */ +int +__lxstat (int vers, const char *name, struct stat *buf) +{ + int result; + + if (vers == _STAT_VER_KERNEL) + return INLINE_SYSCALL (lstat, 2, name, buf); + + { + struct stat64 buf64; + + INTERNAL_SYSCALL_DECL (err); + result = INTERNAL_SYSCALL (lstat64, err, 2, name, &buf64); + if (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (result, err))) + return INLINE_SYSCALL_ERROR_RETURN_VALUE (INTERNAL_SYSCALL_ERRNO (result, + err)); + else + return __xstat32_conv (vers, &buf64, buf); + } +} + +hidden_def (__lxstat) +weak_alias (__lxstat, _lxstat); +#if XSTAT_IS_XSTAT64 +#undef __lxstat64 +strong_alias (__lxstat, __lxstat64); +hidden_ver (__lxstat, __lxstat64) +#endif diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/makecontext.S b/REORG.TODO/sysdeps/unix/sysv/linux/i386/makecontext.S new file mode 100644 index 0000000000..6d396dd328 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/makecontext.S @@ -0,0 +1,120 @@ +/* Create new context. + Copyright (C) 2001-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@redhat.com>, 2001. + + 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 <sysdep.h> + +#include "ucontext_i.h" + + +ENTRY(__makecontext) + movl 4(%esp), %eax + + /* Load the address of the function we are supposed to run. */ + movl 8(%esp), %ecx + + /* Compute the address of the stack. The information comes from + to us_stack element. */ + movl oSS_SP(%eax), %edx + movl %ecx, oEIP(%eax) + addl oSS_SIZE(%eax), %edx + + /* Remember the number of parameters for the exit handler since + it has to remove them. We store the number in the EBX register + which the function we will call must preserve. */ + movl 12(%esp), %ecx + movl %ecx, oEBX(%eax) + + /* Make room on the new stack for the parameters. + Room for the arguments, return address (== L(exitcode)) and + oLINK pointer is needed. One of the pointer sizes is subtracted + after aligning the stack. */ + negl %ecx + leal -4(%edx,%ecx,4), %edx + negl %ecx + + /* Align the stack. */ + andl $0xfffffff0, %edx + subl $4, %edx + + /* Store the future stack pointer. */ + movl %edx, oESP(%eax) + + /* Put the next context on the new stack (from the uc_link + element). */ + movl oLINK(%eax), %eax + movl %eax, 4(%edx,%ecx,4) + + /* Copy all the parameters. */ + jecxz 2f +1: movl 12(%esp,%ecx,4), %eax + movl %eax, (%edx,%ecx,4) + decl %ecx + jnz 1b +2: + + /* If the function we call returns we must continue with the + context which is given in the uc_link element. To do this + set the return address for the function the user provides + to a little bit of helper code which does the magic (see + below). */ +#ifdef PIC + call 1f + cfi_adjust_cfa_offset (4) +1: popl %ecx + cfi_adjust_cfa_offset (-4) + addl $L(exitcode)-1b, %ecx + movl %ecx, (%edx) +#else + movl $L(exitcode), (%edx) +#endif + /* We need to terminate the FDE here instead of after ret because + the unwinder looks at ra-1 for unwind information. */ + cfi_endproc + + /* 'makecontext' returns no value. */ + ret + + /* This is the helper code which gets called if a function which + is registered with 'makecontext' returns. In this case we + have to install the context listed in the uc_link element of + the context 'makecontext' manipulated at the time of the + 'makecontext' call. If the pointer is NULL the process must + terminate. */ +L(exitcode): + /* This removes the parameters passed to the function given to + 'makecontext' from the stack. EBX contains the number of + parameters (see above). */ + leal (%esp,%ebx,4), %esp + + cmpl $0, (%esp) /* Check the next context. */ + je 2f /* If it is zero exit. */ + + call HIDDEN_JUMPTARGET(__setcontext) + /* If this returns (which can happen if the syscall fails) we'll + exit the program with the return error value (-1). */ + + movl %eax, (%esp) +2: call HIDDEN_JUMPTARGET(exit) + /* The 'exit' call should never return. In case it does cause + the process to terminate. */ + hlt + cfi_startproc +END(__makecontext) + +weak_alias (__makecontext, makecontext) diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/olddirent.h b/REORG.TODO/sysdeps/unix/sysv/linux/i386/olddirent.h new file mode 100644 index 0000000000..413f78d108 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/olddirent.h @@ -0,0 +1,44 @@ +/* Copyright (C) 2000-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#ifndef __OLD_DIRENT_H +#define __OLD_DIRENT_H 1 + +#include <dirent.h> + +struct __old_dirent64 + { + __ino_t d_ino; + __off64_t d_off; + unsigned short int d_reclen; + unsigned char d_type; + char d_name[256]; /* We must not include limits.h! */ + }; + +/* Now define the internal interfaces. */ +extern struct __old_dirent64 *__old_readdir64 (DIR *__dirp); +extern int __old_readdir64_r (DIR *__dirp, struct __old_dirent64 *__entry, + struct __old_dirent64 **__result); +extern __ssize_t __old_getdents64 (int __fd, char *__buf, size_t __nbytes) + internal_function; +int __old_scandir64 (const char * __dir, + struct __old_dirent64 *** __namelist, + int (*__selector) (const struct __old_dirent64 *), + int (*__cmp) (const struct __old_dirent64 **, + const struct __old_dirent64 **)); + +#endif diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/profil-counter.h b/REORG.TODO/sysdeps/unix/sysv/linux/i386/profil-counter.h new file mode 100644 index 0000000000..3e7f75d525 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/profil-counter.h @@ -0,0 +1,31 @@ +/* Low-level statistical profiling support function. Linux/i386 version. + Copyright (C) 1996-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#include <signal.h> +#include <sigcontextinfo.h> + +static void +__profil_counter (int signo, const SIGCONTEXT scp) +{ + profil_count ((void *) GET_PC (scp)); + + /* This is a hack to prevent the compiler from implementing the + above function call as a sibcall. The sibcall would overwrite + the signal context. */ + asm volatile (""); +} diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/putmsg.c b/REORG.TODO/sysdeps/unix/sysv/linux/i386/putmsg.c new file mode 100644 index 0000000000..7270eb07ab --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/putmsg.c @@ -0,0 +1,34 @@ +/* Copyright (C) 1998-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#include <errno.h> +#include <stddef.h> +#include <stropts.h> + +#include <sysdep.h> +#include <sys/syscall.h> + +#ifdef __NR_putpmsg +int +putmsg (int fildes, const struct strbuf *ctlptr, const struct strbuf *dataptr, + int flags) +{ + return INLINE_SYSCALL (putpmsg, 5, fildes, ctlptr, dataptr, -1, flags); +} +#else +# include <streams/putmsg.c> +#endif diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/readdir64.c b/REORG.TODO/sysdeps/unix/sysv/linux/i386/readdir64.c new file mode 100644 index 0000000000..f80b6a7ba2 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/readdir64.c @@ -0,0 +1,43 @@ +/* Copyright (C) 2000-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#define __READDIR __readdir64 +#define __GETDENTS __getdents64 +#define DIRENT_TYPE struct dirent64 + +#include <sysdeps/posix/readdir.c> + +#include <shlib-compat.h> + +#undef __READDIR +#undef __GETDENTS +#undef DIRENT_TYPE + +versioned_symbol (libc, __readdir64, readdir64, GLIBC_2_2); + +#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2) + +#include <sysdeps/unix/sysv/linux/i386/olddirent.h> + +#define __READDIR attribute_compat_text_section __old_readdir64 +#define __GETDENTS __old_getdents64 +#define DIRENT_TYPE struct __old_dirent64 + +#include <sysdeps/posix/readdir.c> + +compat_symbol (libc, __old_readdir64, readdir64, GLIBC_2_1); +#endif diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/readdir64_r.c b/REORG.TODO/sysdeps/unix/sysv/linux/i386/readdir64_r.c new file mode 100644 index 0000000000..344fd53d02 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/readdir64_r.c @@ -0,0 +1,43 @@ +/* Copyright (C) 2000-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#define __READDIR_R __readdir64_r +#define __GETDENTS __getdents64 +#define DIRENT_TYPE struct dirent64 + +#include <sysdeps/posix/readdir_r.c> + +#undef __READDIR_R +#undef __GETDENTS +#undef DIRENT_TYPE + +#include <shlib-compat.h> + +versioned_symbol (libc, __readdir64_r, readdir64_r, GLIBC_2_2); + +#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2) + +#include <sysdeps/unix/sysv/linux/i386/olddirent.h> + +#define __READDIR_R attribute_compat_text_section __old_readdir64_r +#define __GETDENTS __old_getdents64 +#define DIRENT_TYPE struct __old_dirent64 + +#include <sysdeps/posix/readdir_r.c> + +compat_symbol (libc, __old_readdir64_r, readdir64_r, GLIBC_2_1); +#endif diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/readelflib.c b/REORG.TODO/sysdeps/unix/sysv/linux/i386/readelflib.c new file mode 100644 index 0000000000..5312007eb1 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/readelflib.c @@ -0,0 +1,93 @@ +/* Copyright (C) 1999-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Andreas Jaeger <aj@suse.de>, 1999 and + Jakub Jelinek <jakub@redhat.com>, 2000. + + 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/>. */ + + +int process_elf32_file (const char *file_name, const char *lib, int *flag, + unsigned int *osversion, char **soname, + void *file_contents, size_t file_length); +int process_elf64_file (const char *file_name, const char *lib, int *flag, + unsigned int *osversion, char **soname, + void *file_contents, size_t file_length); + +/* Returns 0 if everything is ok, != 0 in case of error. */ +int +process_elf_file (const char *file_name, const char *lib, int *flag, + unsigned int *osversion, char **soname, void *file_contents, + size_t file_length) +{ + ElfW(Ehdr) *elf_header = (ElfW(Ehdr) *) file_contents; + int ret, file_flag = 0; + + switch (elf_header->e_machine) + { + case EM_X86_64: + if (elf_header->e_ident[EI_CLASS] == ELFCLASS64) + /* X86-64 64bit libraries are always libc.so.6+. */ + file_flag = FLAG_X8664_LIB64|FLAG_ELF_LIBC6; + else + /* X32 libraries are always libc.so.6+. */ + file_flag = FLAG_X8664_LIBX32|FLAG_ELF_LIBC6; + break; +#ifndef SKIP_EM_IA_64 + case EM_IA_64: + if (elf_header->e_ident[EI_CLASS] == ELFCLASS64) + { + /* IA64 64bit libraries are always libc.so.6+. */ + file_flag = FLAG_IA64_LIB64|FLAG_ELF_LIBC6; + break; + } + goto failed; +#endif + case EM_386: + if (elf_header->e_ident[EI_CLASS] == ELFCLASS32) + break; + /* Fall through. */ + default: +#ifndef SKIP_EM_IA_64 +failed: +#endif + error (0, 0, _("%s is for unknown machine %d.\n"), + file_name, elf_header->e_machine); + return 1; + } + + if (elf_header->e_ident[EI_CLASS] == ELFCLASS32) + ret = process_elf32_file (file_name, lib, flag, osversion, soname, + file_contents, file_length); + else + ret = process_elf64_file (file_name, lib, flag, osversion, soname, + file_contents, file_length); + + if (!ret && file_flag) + *flag = file_flag; + + return ret; +} + +#undef __ELF_NATIVE_CLASS +#undef process_elf_file +#define process_elf_file process_elf32_file +#define __ELF_NATIVE_CLASS 32 +#include "elf/readelflib.c" + +#undef __ELF_NATIVE_CLASS +#undef process_elf_file +#define process_elf_file process_elf64_file +#define __ELF_NATIVE_CLASS 64 +#include "elf/readelflib.c" diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/register-dump.h b/REORG.TODO/sysdeps/unix/sysv/linux/i386/register-dump.h new file mode 100644 index 0000000000..0ca0866d47 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/register-dump.h @@ -0,0 +1,255 @@ +/* Dump registers. + Copyright (C) 1998-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + 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: + + EAX: XXXXXXXX EBX: XXXXXXXX ECX: XXXXXXXX EDX: XXXXXXXX + ESI: XXXXXXXX EDI: XXXXXXXX EBP: XXXXXXXX ESP: XXXXXXXX + + EIP: XXXXXXXX EFLAGS: XXXXXXXX + + CS: XXXX DS: XXXX ES: XXXX FS: XXXX GS: XXXX SS: XXXX + + Trap: XXXXXXXX Error: XXXXXXXX OldMask: XXXXXXXX + ESP/SIGNAL: XXXXXXXX CR2: XXXXXXXX + + FPUCW: XXXXXXXX FPUSW: XXXXXXXX TAG: XXXXXXXX + IPOFF: XXXXXXXX CSSEL: XXXX DATAOFF: XXXXXXXX DATASEL: XXXX + + ST(0) XXXX XXXXXXXXXXXXXXXX ST(1) XXXX XXXXXXXXXXXXXXXX + ST(2) XXXX XXXXXXXXXXXXXXXX ST(3) XXXX XXXXXXXXXXXXXXXX + ST(4) XXXX XXXXXXXXXXXXXXXX ST(5) XXXX XXXXXXXXXXXXXXXX + ST(6) XXXX XXXXXXXXXXXXXXXX ST(7) XXXX XXXXXXXXXXXXXXXX + + */ + +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, struct sigcontext *ctx) +{ + char regs[21][8]; + char fpregs[31][8]; + struct iovec iov[97]; + size_t nr = 0; + +#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. */ + hexvalue (ctx->eax, regs[0], 8); + hexvalue (ctx->ebx, regs[1], 8); + hexvalue (ctx->ecx, regs[2], 8); + hexvalue (ctx->edx, regs[3], 8); + hexvalue (ctx->esi, regs[4], 8); + hexvalue (ctx->edi, regs[5], 8); + hexvalue (ctx->ebp, regs[6], 8); + hexvalue (ctx->esp, regs[7], 8); + hexvalue (ctx->eip, regs[8], 8); + hexvalue (ctx->eflags, regs[9], 8); + hexvalue (ctx->cs, regs[10], 4); + hexvalue (ctx->ds, regs[11], 4); + hexvalue (ctx->es, regs[12], 4); + hexvalue (ctx->fs, regs[13], 4); + hexvalue (ctx->gs, regs[14], 4); + hexvalue (ctx->ss, regs[15], 4); + hexvalue (ctx->trapno, regs[16], 8); + hexvalue (ctx->err, regs[17], 8); + hexvalue (ctx->oldmask, regs[18], 8); + hexvalue (ctx->esp_at_signal, regs[19], 8); + hexvalue (ctx->cr2, regs[20], 8); + + /* Generate the output. */ + ADD_STRING ("Register dump:\n\n EAX: "); + ADD_MEM (regs[0], 8); + ADD_STRING (" EBX: "); + ADD_MEM (regs[1], 8); + ADD_STRING (" ECX: "); + ADD_MEM (regs[2], 8); + ADD_STRING (" EDX: "); + ADD_MEM (regs[3], 8); + ADD_STRING ("\n ESI: "); + ADD_MEM (regs[4], 8); + ADD_STRING (" EDI: "); + ADD_MEM (regs[5], 8); + ADD_STRING (" EBP: "); + ADD_MEM (regs[6], 8); + ADD_STRING (" ESP: "); + ADD_MEM (regs[7], 8); + ADD_STRING ("\n\n EIP: "); + ADD_MEM (regs[8], 8); + ADD_STRING (" EFLAGS: "); + ADD_MEM (regs[9], 8); + ADD_STRING ("\n\n CS: "); + ADD_MEM (regs[10], 4); + ADD_STRING (" DS: "); + ADD_MEM (regs[11], 4); + ADD_STRING (" ES: "); + ADD_MEM (regs[12], 4); + ADD_STRING (" FS: "); + ADD_MEM (regs[13], 4); + ADD_STRING (" GS: "); + ADD_MEM (regs[14], 4); + ADD_STRING (" SS: "); + ADD_MEM (regs[15], 4); + ADD_STRING ("\n\n Trap: "); + ADD_MEM (regs[16], 8); + ADD_STRING (" Error: "); + ADD_MEM (regs[17], 8); + ADD_STRING (" OldMask: "); + ADD_MEM (regs[18], 8); + ADD_STRING ("\n ESP/signal: "); + ADD_MEM (regs[19], 8); + ADD_STRING (" CR2: "); + ADD_MEM (regs[20], 8); + + if (ctx->fpstate != NULL) + { + + /* Generate output for the FPU control/status registers. */ + hexvalue (ctx->fpstate->cw, fpregs[0], 8); + hexvalue (ctx->fpstate->sw, fpregs[1], 8); + hexvalue (ctx->fpstate->tag, fpregs[2], 8); + hexvalue (ctx->fpstate->ipoff, fpregs[3], 8); + hexvalue (ctx->fpstate->cssel, fpregs[4], 4); + hexvalue (ctx->fpstate->dataoff, fpregs[5], 8); + hexvalue (ctx->fpstate->datasel, fpregs[6], 4); + + ADD_STRING ("\n\n FPUCW: "); + ADD_MEM (fpregs[0], 8); + ADD_STRING (" FPUSW: "); + ADD_MEM (fpregs[1], 8); + ADD_STRING (" TAG: "); + ADD_MEM (fpregs[2], 8); + ADD_STRING ("\n IPOFF: "); + ADD_MEM (fpregs[3], 8); + ADD_STRING (" CSSEL: "); + ADD_MEM (fpregs[4], 4); + ADD_STRING (" DATAOFF: "); + ADD_MEM (fpregs[5], 8); + ADD_STRING (" DATASEL: "); + ADD_MEM (fpregs[6], 4); + + /* Now the real FPU registers. */ + hexvalue (ctx->fpstate->_st[0].exponent, fpregs[7], 8); + hexvalue (ctx->fpstate->_st[0].significand[3] << 16 + | ctx->fpstate->_st[0].significand[2], fpregs[8], 8); + hexvalue (ctx->fpstate->_st[0].significand[1] << 16 + | ctx->fpstate->_st[0].significand[0], fpregs[9], 8); + hexvalue (ctx->fpstate->_st[1].exponent, fpregs[10], 8); + hexvalue (ctx->fpstate->_st[1].significand[3] << 16 + | ctx->fpstate->_st[1].significand[2], fpregs[11], 8); + hexvalue (ctx->fpstate->_st[1].significand[1] << 16 + | ctx->fpstate->_st[1].significand[0], fpregs[12], 8); + hexvalue (ctx->fpstate->_st[2].exponent, fpregs[13], 8); + hexvalue (ctx->fpstate->_st[2].significand[3] << 16 + | ctx->fpstate->_st[2].significand[2], fpregs[14], 8); + hexvalue (ctx->fpstate->_st[2].significand[1] << 16 + | ctx->fpstate->_st[2].significand[0], fpregs[15], 8); + hexvalue (ctx->fpstate->_st[3].exponent, fpregs[16], 8); + hexvalue (ctx->fpstate->_st[3].significand[3] << 16 + | ctx->fpstate->_st[3].significand[2], fpregs[17], 8); + hexvalue (ctx->fpstate->_st[3].significand[1] << 16 + | ctx->fpstate->_st[3].significand[0], fpregs[18], 8); + hexvalue (ctx->fpstate->_st[4].exponent, fpregs[19], 8); + hexvalue (ctx->fpstate->_st[4].significand[3] << 16 + | ctx->fpstate->_st[4].significand[2], fpregs[20], 8); + hexvalue (ctx->fpstate->_st[4].significand[1] << 16 + | ctx->fpstate->_st[4].significand[0], fpregs[21], 8); + hexvalue (ctx->fpstate->_st[5].exponent, fpregs[22], 8); + hexvalue (ctx->fpstate->_st[5].significand[3] << 16 + | ctx->fpstate->_st[5].significand[2], fpregs[23], 8); + hexvalue (ctx->fpstate->_st[5].significand[1] << 16 + | ctx->fpstate->_st[5].significand[0], fpregs[24], 8); + hexvalue (ctx->fpstate->_st[6].exponent, fpregs[25], 8); + hexvalue (ctx->fpstate->_st[6].significand[3] << 16 + | ctx->fpstate->_st[6].significand[2], fpregs[26], 8); + hexvalue (ctx->fpstate->_st[6].significand[1] << 16 + | ctx->fpstate->_st[6].significand[0], fpregs[27], 8); + hexvalue (ctx->fpstate->_st[7].exponent, fpregs[28], 8); + hexvalue (ctx->fpstate->_st[7].significand[3] << 16 + | ctx->fpstate->_st[7].significand[2], fpregs[29], 8); + hexvalue (ctx->fpstate->_st[7].significand[1] << 16 + | ctx->fpstate->_st[7].significand[0], fpregs[30], 8); + + ADD_STRING ("\n\n ST(0) "); + ADD_MEM (fpregs[7], 4); + ADD_STRING (" "); + ADD_MEM (fpregs[8], 8); + ADD_MEM (fpregs[9], 8); + ADD_STRING (" ST(1) "); + ADD_MEM (fpregs[10], 4); + ADD_STRING (" "); + ADD_MEM (fpregs[11], 8); + ADD_MEM (fpregs[12], 8); + ADD_STRING ("\n ST(2) "); + ADD_MEM (fpregs[13], 4); + ADD_STRING (" "); + ADD_MEM (fpregs[14], 8); + ADD_MEM (fpregs[15], 8); + ADD_STRING (" ST(3) "); + ADD_MEM (fpregs[16], 4); + ADD_STRING (" "); + ADD_MEM (fpregs[17], 8); + ADD_MEM (fpregs[18], 8); + ADD_STRING ("\n ST(4) "); + ADD_MEM (fpregs[19], 4); + ADD_STRING (" "); + ADD_MEM (fpregs[20], 8); + ADD_MEM (fpregs[21], 8); + ADD_STRING (" ST(5) "); + ADD_MEM (fpregs[22], 4); + ADD_STRING (" "); + ADD_MEM (fpregs[23], 8); + ADD_MEM (fpregs[24], 8); + ADD_STRING ("\n ST(6) "); + ADD_MEM (fpregs[25], 4); + ADD_STRING (" "); + ADD_MEM (fpregs[26], 8); + ADD_MEM (fpregs[27], 8); + ADD_STRING (" ST(7) "); + ADD_MEM (fpregs[28], 4); + ADD_STRING (" "); + ADD_MEM (fpregs[29], 8); + ADD_MEM (fpregs[30], 8); + } + + ADD_STRING ("\n"); + + /* Write the stuff out. */ + writev (fd, iov, nr); +} + + +#define REGISTER_DUMP register_dump (fd, &ctx) diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/scandir64.c b/REORG.TODO/sysdeps/unix/sysv/linux/i386/scandir64.c new file mode 100644 index 0000000000..5089a2f1a5 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/scandir64.c @@ -0,0 +1,136 @@ +/* Copyright (C) 2000-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#include <dirent.h> + +#define SCANDIR __scandir64 +#define SCANDIR_TAIL __scandir64_tail +#define DIRENT_TYPE struct dirent64 + +#include <dirent/scandir.c> + +#undef SCANDIR +#undef SCANDIR_TAIL +#undef DIRENT_TYPE + +#include <shlib-compat.h> + +versioned_symbol (libc, __scandir64, scandir64, GLIBC_2_2); + +#if SHLIB_COMPAT (libc, GLIBC_2_1, GLIBC_2_2) +# include <string.h> +# include <errno.h> +# include "olddirent.h" + +int +__old_scandir64 (const char *dir, struct __old_dirent64 ***namelist, + int (*select) (const struct __old_dirent64 *), + int (*cmp) (const struct __old_dirent64 **, + const struct __old_dirent64 **)) +{ + DIR *dp = __opendir (dir); + struct __old_dirent64 **v = NULL; + size_t vsize = 0; + struct scandir_cancel_struct c; + struct __old_dirent64 *d; + int save; + + if (dp == NULL) + return -1; + + save = errno; + __set_errno (0); + + c.dp = dp; + c.v = NULL; + c.cnt = 0; + __libc_cleanup_push (__scandir_cancel_handler, &c); + + while ((d = __old_readdir64 (dp)) != NULL) + { + int use_it = select == NULL; + + if (! use_it) + { + use_it = select (d); + /* The select function might have changed errno. It was + zero before and it need to be again to make the latter + tests work. */ + __set_errno (0); + } + + if (use_it) + { + struct __old_dirent64 *vnew; + size_t dsize; + + /* Ignore errors from select or readdir */ + __set_errno (0); + + if (__glibc_unlikely (c.cnt == vsize)) + { + struct __old_dirent64 **new; + if (vsize == 0) + vsize = 10; + else + vsize *= 2; + new = (struct __old_dirent64 **) realloc (v, + vsize * sizeof (*v)); + if (new == NULL) + break; + v = new; + c.v = (void *) v; + } + + dsize = &d->d_name[_D_ALLOC_NAMLEN (d)] - (char *) d; + vnew = (struct __old_dirent64 *) malloc (dsize); + if (vnew == NULL) + break; + + v[c.cnt++] = (struct __old_dirent64 *) memcpy (vnew, d, dsize); + } + } + + if (__builtin_expect (errno, 0) != 0) + { + save = errno; + + while (c.cnt > 0) + free (v[--c.cnt]); + free (v); + c.cnt = -1; + } + else + { + /* Sort the list if we have a comparison function to sort with. */ + if (cmp != NULL) + qsort (v, c.cnt, sizeof (*v), + (int (*) (const void *, const void *)) cmp); + + *namelist = v; + } + + __libc_cleanup_pop (0); + + (void) __closedir (dp); + __set_errno (save); + + return c.cnt; +} +compat_symbol (libc, __old_scandir64, scandir64, GLIBC_2_1); + +#endif diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/setcontext.S b/REORG.TODO/sysdeps/unix/sysv/linux/i386/setcontext.S new file mode 100644 index 0000000000..c6fa618a01 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/setcontext.S @@ -0,0 +1,96 @@ +/* Install given context. + Copyright (C) 2001-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@redhat.com>, 2001. + + 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 <sysdep.h> + +#include "ucontext_i.h" + + +ENTRY(__setcontext) + /* Load address of the context data structure. */ + movl 4(%esp), %eax + + /* Get the current signal mask. Note that we preserve EBX in case + the system call fails and we return from the function with an + error. */ + pushl %ebx + cfi_adjust_cfa_offset (4) + xorl %edx, %edx + leal oSIGMASK(%eax), %ecx + movl $SIG_SETMASK, %ebx + cfi_rel_offset (ebx, 0) + movl $__NR_sigprocmask, %eax + ENTER_KERNEL + popl %ebx + cfi_adjust_cfa_offset (-4) + cfi_restore (ebx) + cmpl $-4095, %eax /* Check %eax for error. */ + jae SYSCALL_ERROR_LABEL /* Jump to error handler if error. */ + + /* EAX was modified, reload it. */ + movl 4(%esp), %eax + + /* Restore the floating-point context. Not the registers, only the + rest. */ + movl oFPREGS(%eax), %ecx + fldenv (%ecx) + + /* Restore the FS segment register. We don't touch the GS register + since it is used for threads. */ + movl oFS(%eax), %ecx + movw %cx, %fs + + /* Fetch the address to return to. */ + movl oEIP(%eax), %ecx + + /* Load the new stack pointer. */ + cfi_def_cfa (eax, 0) + cfi_offset (edi, oEDI) + cfi_offset (esi, oESI) + cfi_offset (ebp, oEBP) + cfi_offset (ebx, oEBX) + cfi_offset (edx, oEDX) + cfi_offset (ecx, oECX) + movl oESP(%eax), %esp + + /* Push the return address on the new stack so we can return there. */ + pushl %ecx + + /* Load the values of all the 32-bit registers (except ESP). + Since we are loading from EAX, it must be last. */ + movl oEDI(%eax), %edi + movl oESI(%eax), %esi + movl oEBP(%eax), %ebp + movl oEBX(%eax), %ebx + movl oEDX(%eax), %edx + movl oECX(%eax), %ecx + movl oEAX(%eax), %eax + + /* End FDE here, we fall into another context. */ + cfi_endproc + cfi_startproc + + /* The following 'ret' will pop the address of the code and jump + to it. */ + + ret +PSEUDO_END(__setcontext) +libc_hidden_def (__setcontext) + +weak_alias (__setcontext, setcontext) diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/shlib-versions b/REORG.TODO/sysdeps/unix/sysv/linux/i386/shlib-versions new file mode 100644 index 0000000000..ca5d15b1df --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/shlib-versions @@ -0,0 +1 @@ +ld=ld-linux.so.2 diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/sigaction.c b/REORG.TODO/sysdeps/unix/sysv/linux/i386/sigaction.c new file mode 100644 index 0000000000..0cc9d67ad9 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/sigaction.c @@ -0,0 +1,129 @@ +/* POSIX.1 `sigaction' call for Linux/i386. + Copyright (C) 1991-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#include <sysdep.h> +#include <errno.h> +#include <stddef.h> +#include <signal.h> +#include <string.h> + +#include <sysdep.h> +#include <sys/syscall.h> +#include <ldsodefs.h> + +/* The difference here is that the sigaction structure used in the + kernel is not the same as we use in the libc. Therefore we must + translate it here. */ +#include <kernel_sigaction.h> + +/* We do not globally define the SA_RESTORER flag so do it here. */ +#define SA_RESTORER 0x04000000 + + +/* Using the hidden attribute here does not change the code but it + helps to avoid warnings. */ +#ifdef __NR_rt_sigaction +extern void restore_rt (void) asm ("__restore_rt") attribute_hidden; +#endif +extern void restore (void) asm ("__restore") attribute_hidden; + + +/* If ACT is not NULL, change the action for SIG to *ACT. + If OACT is not NULL, put the old action for SIG in *OACT. */ +int +__libc_sigaction (int sig, const struct sigaction *act, struct sigaction *oact) +{ + int result; + + struct kernel_sigaction kact, koact; + + if (act) + { + kact.k_sa_handler = act->sa_handler; + kact.sa_flags = act->sa_flags; + memcpy (&kact.sa_mask, &act->sa_mask, sizeof (sigset_t)); + + if (GLRO(dl_sysinfo_dso) == NULL) + { + kact.sa_flags |= SA_RESTORER; + + kact.sa_restorer = ((act->sa_flags & SA_SIGINFO) + ? &restore_rt : &restore); + } + } + + /* XXX The size argument hopefully will have to be changed to the + real size of the user-level sigset_t. */ + INTERNAL_SYSCALL_DECL (err); + result = INTERNAL_SYSCALL (rt_sigaction, err, 4, + sig, act ? &kact : NULL, + oact ? &koact : NULL, _NSIG / 8); + if (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (result, err))) + return INLINE_SYSCALL_ERROR_RETURN_VALUE (INTERNAL_SYSCALL_ERRNO (result, + err)); + else if (oact && result >= 0) + { + oact->sa_handler = koact.k_sa_handler; + memcpy (&oact->sa_mask, &koact.sa_mask, sizeof (sigset_t)); + oact->sa_flags = koact.sa_flags; + oact->sa_restorer = koact.sa_restorer; + } + return result; +} +libc_hidden_def (__libc_sigaction) + +#include <nptl/sigaction.c> + +/* NOTE: Please think twice before making any changes to the bits of + code below. GDB needs some intimate knowledge about it to + recognize them as signal trampolines, and make backtraces through + signal handlers work right. Important are both the names + (__restore and __restore_rt) and the exact instruction sequence. + If you ever feel the need to make any changes, please notify the + appropriate GDB maintainer. */ + +#define RESTORE(name, syscall) RESTORE2 (name, syscall) +#define RESTORE2(name, syscall) \ +asm \ + ( \ + ".text\n" \ + " .align 16\n" \ + "__" #name ":\n" \ + " movl $" #syscall ", %eax\n" \ + " int $0x80" \ + ); + +#ifdef __NR_rt_sigaction +/* The return code for realtime-signals. */ +RESTORE (restore_rt, __NR_rt_sigreturn) +#endif + +/* For the boring old signals. */ +#undef RESTORE2 +#define RESTORE2(name, syscall) \ +asm \ + ( \ + ".text\n" \ + " .align 8\n" \ + "__" #name ":\n" \ + " popl %eax\n" \ + " movl $" #syscall ", %eax\n" \ + " int $0x80" \ + ); + +RESTORE (restore, __NR_sigreturn) diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/sigcontextinfo.h b/REORG.TODO/sysdeps/unix/sysv/linux/i386/sigcontextinfo.h new file mode 100644 index 0000000000..7e2764eb65 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/sigcontextinfo.h @@ -0,0 +1,50 @@ +/* Copyright (C) 1998-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + 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/>. */ + +#define SIGCONTEXT struct sigcontext +#define SIGCONTEXT_EXTRA_ARGS +#define GET_PC(ctx) ((void *) ctx.eip) +#define GET_FRAME(ctx) ((void *) ctx.ebp) +#define GET_STACK(ctx) ((void *) ctx.esp_at_signal) +#define CALL_SIGHANDLER(handler, signo, ctx) \ +do { \ + int __tmp1, __tmp2, __tmp3, __tmp4; \ + __asm __volatile ("movl\t%%esp, %%edi\n\t" \ + "andl\t$-16, %%esp\n\t" \ + "subl\t%8, %%esp\n\t" \ + "movl\t%%edi, %c8-4(%%esp)\n\t" \ + "movl\t%1, 0(%%esp)\n\t" \ + "leal\t4(%%esp), %%edi\n\t" \ + "cld\n\t" \ + "rep\tmovsl\n\t" \ + "call\t*%0\n\t" \ + "cld\n\t" \ + "movl\t%9, %%ecx\n\t" \ + "subl\t%%edi, %%esi\n\t" \ + "leal\t4(%%esp,%%esi,1), %%edi\n\t" \ + "leal\t4(%%esp), %%esi\n\t" \ + "rep\tmovsl\n\t" \ + "movl\t%c8-4(%%esp), %%esp\n\t" \ + : "=a" (__tmp1), "=d" (__tmp2), "=S" (__tmp3), \ + "=c" (__tmp4) \ + : "0" (handler), "1" (signo), "2" (&ctx), \ + "3" (sizeof (struct sigcontext) / 4), \ + "n" ((sizeof (struct sigcontext) + 19) & ~15), \ + "i" (sizeof (struct sigcontext) / 4) \ + : "cc", "edi"); \ +} while (0) diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/smp.h b/REORG.TODO/sysdeps/unix/sysv/linux/i386/smp.h new file mode 100644 index 0000000000..7d1a7f201b --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/smp.h @@ -0,0 +1,55 @@ +/* Determine whether the host has multiple processors. Linux version. + Copyright (C) 1996-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If + not, see <http://www.gnu.org/licenses/>. */ + +#include <errno.h> +#include <fcntl.h> +#include <string.h> +#include <sys/utsname.h> +#include <not-cancel.h> + +/* Test whether the machine has more than one processor. This is not the + best test but good enough. More complicated tests would require `malloc' + which is not available at that time. */ +static inline int +is_smp_system (void) +{ + union + { + struct utsname uts; + char buf[512]; + } u; + char *cp; + + /* Try reading the number using `sysctl' first. */ + if (uname (&u.uts) == 0) + cp = u.uts.version; + else + { + /* This was not successful. Now try reading the /proc filesystem. */ + int fd = open_not_cancel_2 ("/proc/sys/kernel/version", O_RDONLY); + if (__builtin_expect (fd, 0) == -1 + || read_not_cancel (fd, u.buf, sizeof (u.buf)) <= 0) + /* This also didn't work. We give up and say it's a UP machine. */ + u.buf[0] = '\0'; + + close_not_cancel_no_status (fd); + cp = u.buf; + } + + return strstr (cp, "SMP") != NULL; +} diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/swapcontext.S b/REORG.TODO/sysdeps/unix/sysv/linux/i386/swapcontext.S new file mode 100644 index 0000000000..cfdb1f0ad1 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/swapcontext.S @@ -0,0 +1,109 @@ +/* Save current context and install the given one. + Copyright (C) 2001-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@redhat.com>, 2001. + + 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 <sysdep.h> + +#include "ucontext_i.h" + + +ENTRY(__swapcontext) + /* Load address of the context data structure we save in. */ + movl 4(%esp), %eax + + /* Return value of swapcontext. EAX is the only register whose + value is not preserved. */ + movl $0, oEAX(%eax) + + /* Save the 32-bit register values and the return address. */ + movl %ecx, oECX(%eax) + movl %edx, oEDX(%eax) + movl %edi, oEDI(%eax) + movl %esi, oESI(%eax) + movl %ebp, oEBP(%eax) + movl (%esp), %ecx + movl %ecx, oEIP(%eax) + leal 4(%esp), %ecx + movl %ecx, oESP(%eax) + movl %ebx, oEBX(%eax) + + /* Save the FS segment register. */ + xorl %edx, %edx + movw %fs, %dx + movl %edx, oFS(%eax) + + /* We have separate floating-point register content memory on the + stack. We use the __fpregs_mem block in the context. Set the + links up correctly. */ + leal oFPREGSMEM(%eax), %ecx + movl %ecx, oFPREGS(%eax) + /* Save the floating-point context. */ + fnstenv (%ecx) + + /* Load address of the context data structure we have to load. */ + movl 8(%esp), %ecx + + /* Save the current signal mask and install the new one. */ + pushl %ebx + leal oSIGMASK(%eax), %edx + leal oSIGMASK(%ecx), %ecx + movl $SIG_SETMASK, %ebx + movl $__NR_sigprocmask, %eax + ENTER_KERNEL + popl %ebx + cmpl $-4095, %eax /* Check %eax for error. */ + jae SYSCALL_ERROR_LABEL /* Jump to error handler if error. */ + + /* EAX was modified, reload it. */ + movl 8(%esp), %eax + + /* Restore the floating-point context. Not the registers, only the + rest. */ + movl oFPREGS(%eax), %ecx + fldenv (%ecx) + + /* Restore the FS segment register. We don't touch the GS register + since it is used for threads. */ + movl oFS(%eax), %edx + movw %dx, %fs + + /* Fetch the address to return to. */ + movl oEIP(%eax), %ecx + + /* Load the new stack pointer. */ + movl oESP(%eax), %esp + + /* Push the return address on the new stack so we can return there. */ + pushl %ecx + + /* Load the values of all the 32-bit registers (except ESP). + Since we are loading from EAX, it must be last. */ + movl oEDI(%eax), %edi + movl oESI(%eax), %esi + movl oEBP(%eax), %ebp + movl oEBX(%eax), %ebx + movl oEDX(%eax), %edx + movl oECX(%eax), %ecx + movl oEAX(%eax), %eax + + /* The following 'ret' will pop the address of the code and jump + to it. */ + ret +PSEUDO_END(__swapcontext) + +weak_alias (__swapcontext, swapcontext) diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/syscall.S b/REORG.TODO/sysdeps/unix/sysv/linux/i386/syscall.S new file mode 100644 index 0000000000..9d2f176ad4 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/syscall.S @@ -0,0 +1,35 @@ +/* Copyright (C) 1995-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#include <sysdep.h> + +/* Please consult the file sysdeps/unix/sysv/linux/i386/sysdep.h for + more information about the value -4095 used below.*/ + + .text +ENTRY (syscall) + + PUSHARGS_6 /* Save register contents. */ + _DOARGS_6(44) /* Load arguments. */ + movl 20(%esp), %eax /* Load syscall number into %eax. */ + ENTER_KERNEL /* Do the system call. */ + POPARGS_6 /* Restore register contents. */ + cmpl $-4095, %eax /* Check %eax for error. */ + jae SYSCALL_ERROR_LABEL /* Jump to error handler if error. */ + ret /* Return to caller. */ + +PSEUDO_END (syscall) diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/syscalls.list b/REORG.TODO/sysdeps/unix/sysv/linux/i386/syscalls.list new file mode 100644 index 0000000000..58020dfae5 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/syscalls.list @@ -0,0 +1,26 @@ +# File name Caller Syscall name Args Strong name Weak names + +chown - chown32 i:sii __chown chown@@GLIBC_2.1 +lchown - lchown32 i:sii __lchown lchown@@GLIBC_2.0 chown@GLIBC_2.0 +fchown - fchown32 i:iii __fchown fchown + +getegid - getegid32 Ei: __getegid getegid +geteuid - geteuid32 Ei: __geteuid geteuid +getgid - getgid32 Ei: __getgid getgid +getuid - getuid32 Ei: __getuid getuid +getresgid - getresgid32 i:ppp __getresgid getresgid +getresuid - getresuid32 i:ppp __getresuid getresuid +getgroups - getgroups32 i:ip __getgroups getgroups + +setfsgid - setfsgid32 Ei:i setfsgid +setfsuid - setfsuid32 Ei:i setfsuid + +modify_ldt EXTRA modify_ldt i:ipi __modify_ldt modify_ldt +vm86old EXTRA vm86old i:p __vm86old vm86@GLIBC_2.0 +vm86 - vm86 i:ip __vm86 vm86@@GLIBC_2.3.4 + +prlimit64 EXTRA prlimit64 i:iipp prlimit64 + +fanotify_mark EXTRA fanotify_mark i:iiiiis fanotify_mark + +personality EXTRA personality Ei:i __personality personality diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h b/REORG.TODO/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h new file mode 100644 index 0000000000..ebf601918f --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h @@ -0,0 +1,153 @@ +/* Copyright (C) 2002-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Jakub Jelinek <jakub@redhat.com>, 2002. + + 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 <sysdep.h> +#include <tls.h> +#ifndef __ASSEMBLER__ +# include <nptl/pthreadP.h> +#endif + +#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt) + +# undef PSEUDO +# define PSEUDO(name, syscall_name, args) \ + .text; \ + ENTRY (name) \ + cmpl $0, %gs:MULTIPLE_THREADS_OFFSET; \ + jne L(pseudo_cancel); \ + .type __##syscall_name##_nocancel,@function; \ + .globl __##syscall_name##_nocancel; \ + __##syscall_name##_nocancel: \ + DO_CALL (syscall_name, args); \ + cmpl $-4095, %eax; \ + jae SYSCALL_ERROR_LABEL; \ + ret; \ + .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \ + L(pseudo_cancel): \ + CENABLE \ + SAVE_OLDTYPE_##args \ + PUSHCARGS_##args \ + DOCARGS_##args \ + movl $SYS_ify (syscall_name), %eax; \ + ENTER_KERNEL; \ + POPCARGS_##args; \ + POPSTATE_##args \ + cmpl $-4095, %eax; \ + jae SYSCALL_ERROR_LABEL + +# define SAVE_OLDTYPE_0 movl %eax, %ecx; +# define SAVE_OLDTYPE_1 SAVE_OLDTYPE_0 +# define SAVE_OLDTYPE_2 pushl %eax; cfi_adjust_cfa_offset (4); +# define SAVE_OLDTYPE_3 SAVE_OLDTYPE_2 +# define SAVE_OLDTYPE_4 SAVE_OLDTYPE_2 +# define SAVE_OLDTYPE_5 SAVE_OLDTYPE_2 +# define SAVE_OLDTYPE_6 SAVE_OLDTYPE_2 + +# define PUSHCARGS_0 /* No arguments to push. */ +# define DOCARGS_0 /* No arguments to frob. */ +# define POPCARGS_0 /* No arguments to pop. */ +# define _PUSHCARGS_0 /* No arguments to push. */ +# define _POPCARGS_0 /* No arguments to pop. */ + +# define PUSHCARGS_1 movl %ebx, %edx; cfi_register (ebx, edx); PUSHCARGS_0 +# define DOCARGS_1 _DOARGS_1 (4) +# define POPCARGS_1 POPCARGS_0; movl %edx, %ebx; cfi_restore (ebx); +# define _PUSHCARGS_1 pushl %ebx; cfi_adjust_cfa_offset (4); \ + cfi_rel_offset (ebx, 0); _PUSHCARGS_0 +# define _POPCARGS_1 _POPCARGS_0; popl %ebx; \ + cfi_adjust_cfa_offset (-4); cfi_restore (ebx); + +# define PUSHCARGS_2 PUSHCARGS_1 +# define DOCARGS_2 _DOARGS_2 (12) +# define POPCARGS_2 POPCARGS_1 +# define _PUSHCARGS_2 _PUSHCARGS_1 +# define _POPCARGS_2 _POPCARGS_1 + +# define PUSHCARGS_3 _PUSHCARGS_2 +# define DOCARGS_3 _DOARGS_3 (20) +# define POPCARGS_3 _POPCARGS_3 +# define _PUSHCARGS_3 _PUSHCARGS_2 +# define _POPCARGS_3 _POPCARGS_2 + +# define PUSHCARGS_4 _PUSHCARGS_4 +# define DOCARGS_4 _DOARGS_4 (28) +# define POPCARGS_4 _POPCARGS_4 +# define _PUSHCARGS_4 pushl %esi; cfi_adjust_cfa_offset (4); \ + cfi_rel_offset (esi, 0); _PUSHCARGS_3 +# define _POPCARGS_4 _POPCARGS_3; popl %esi; \ + cfi_adjust_cfa_offset (-4); cfi_restore (esi); + +# define PUSHCARGS_5 _PUSHCARGS_5 +# define DOCARGS_5 _DOARGS_5 (36) +# define POPCARGS_5 _POPCARGS_5 +# define _PUSHCARGS_5 pushl %edi; cfi_adjust_cfa_offset (4); \ + cfi_rel_offset (edi, 0); _PUSHCARGS_4 +# define _POPCARGS_5 _POPCARGS_4; popl %edi; \ + cfi_adjust_cfa_offset (-4); cfi_restore (edi); + +# define PUSHCARGS_6 _PUSHCARGS_6 +# define DOCARGS_6 _DOARGS_6 (44) +# define POPCARGS_6 _POPCARGS_6 +# define _PUSHCARGS_6 pushl %ebp; cfi_adjust_cfa_offset (4); \ + cfi_rel_offset (ebp, 0); _PUSHCARGS_5 +# define _POPCARGS_6 _POPCARGS_5; popl %ebp; \ + cfi_adjust_cfa_offset (-4); cfi_restore (ebp); + +# if IS_IN (libpthread) +# define CENABLE call __pthread_enable_asynccancel; +# define CDISABLE call __pthread_disable_asynccancel +# elif IS_IN (libc) +# define CENABLE call __libc_enable_asynccancel; +# define CDISABLE call __libc_disable_asynccancel +# elif IS_IN (librt) +# define CENABLE call __librt_enable_asynccancel; +# define CDISABLE call __librt_disable_asynccancel +# else +# error Unsupported library +# endif +# define POPSTATE_0 \ + pushl %eax; cfi_adjust_cfa_offset (4); movl %ecx, %eax; \ + CDISABLE; popl %eax; cfi_adjust_cfa_offset (-4); +# define POPSTATE_1 POPSTATE_0 +# define POPSTATE_2 xchgl (%esp), %eax; CDISABLE; popl %eax; \ + cfi_adjust_cfa_offset (-4); +# define POPSTATE_3 POPSTATE_2 +# define POPSTATE_4 POPSTATE_3 +# define POPSTATE_5 POPSTATE_4 +# define POPSTATE_6 POPSTATE_5 + +# ifndef __ASSEMBLER__ +# define SINGLE_THREAD_P \ + __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ + header.multiple_threads) == 0, 1) +# else +# define SINGLE_THREAD_P cmpl $0, %gs:MULTIPLE_THREADS_OFFSET +# endif + +#elif !defined __ASSEMBLER__ + +# define SINGLE_THREAD_P (1) +# define NO_CANCELLATION 1 + +#endif + +#ifndef __ASSEMBLER__ +# define RTLD_SINGLE_THREAD_P \ + __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ + header.multiple_threads) == 0, 1) +#endif diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/sysdep.c b/REORG.TODO/sysdeps/unix/sysv/linux/i386/sysdep.c new file mode 100644 index 0000000000..7d65ad3518 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/sysdep.c @@ -0,0 +1,30 @@ +/* Copyright (C) 2015-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#include <errno.h> +#include <sysdep.h> + +/* This routine is jumped to by all the syscall handlers, to stash + an error number into errno. ERROR is the negative error number + returned from the x86 kernel. */ +int +__attribute__ ((__regparm__ (1))) +__syscall_error (int error) +{ + __set_errno (-error); + return -1; +} diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/sysdep.h b/REORG.TODO/sysdeps/unix/sysv/linux/i386/sysdep.h new file mode 100644 index 0000000000..449b23e49b --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/sysdep.h @@ -0,0 +1,657 @@ +/* Copyright (C) 1992-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper, <drepper@gnu.org>, August 1995. + + 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 _LINUX_I386_SYSDEP_H +#define _LINUX_I386_SYSDEP_H 1 + +/* There is some commonality. */ +#include <sysdeps/unix/sysv/linux/sysdep.h> +#include <sysdeps/unix/i386/sysdep.h> +/* Defines RTLD_PRIVATE_ERRNO and USE_DL_SYSINFO. */ +#include <dl-sysdep.h> +#include <tls.h> + + +/* For Linux we can use the system call table in the header file + /usr/include/asm/unistd.h + of the kernel. But these symbols do not follow the SYS_* syntax + so we have to redefine the `SYS_ify' macro here. */ +#undef SYS_ify +#define SYS_ify(syscall_name) __NR_##syscall_name + +#if defined USE_DL_SYSINFO \ + && (IS_IN (libc) || IS_IN (libpthread)) +# define I386_USE_SYSENTER 1 +#else +# undef I386_USE_SYSENTER +#endif + +/* Since GCC 5 and above can properly spill %ebx with PIC when needed, + we can inline syscalls with 6 arguments if GCC 5 or above is used + to compile glibc. Disable GCC 5 optimization when compiling for + profiling or when -fno-omit-frame-pointer is used since asm ("ebp") + can't be used to put the 6th argument in %ebp for syscall. */ +#if __GNUC_PREREQ (5,0) && !defined PROF && CAN_USE_REGISTER_ASM_EBP +# define OPTIMIZE_FOR_GCC_5 +#endif + +#ifdef __ASSEMBLER__ + +/* Linux uses a negative return value to indicate syscall errors, + unlike most Unices, which use the condition codes' carry flag. + + Since version 2.1 the return value of a system call might be + negative even if the call succeeded. E.g., the `lseek' system call + might return a large offset. Therefore we must not anymore test + for < 0, but test for a real error by making sure the value in %eax + is a real error number. Linus said he will make sure the no syscall + returns a value in -1 .. -4095 as a valid result so we can savely + test with -4095. */ + +/* We don't want the label for the error handle to be global when we define + it here. */ +#define SYSCALL_ERROR_LABEL __syscall_error + +#undef PSEUDO +#define PSEUDO(name, syscall_name, args) \ + .text; \ + ENTRY (name) \ + DO_CALL (syscall_name, args); \ + cmpl $-4095, %eax; \ + jae SYSCALL_ERROR_LABEL + +#undef PSEUDO_END +#define PSEUDO_END(name) \ + SYSCALL_ERROR_HANDLER \ + END (name) + +#undef PSEUDO_NOERRNO +#define PSEUDO_NOERRNO(name, syscall_name, args) \ + .text; \ + ENTRY (name) \ + DO_CALL (syscall_name, args) + +#undef PSEUDO_END_NOERRNO +#define PSEUDO_END_NOERRNO(name) \ + END (name) + +#define ret_NOERRNO ret + +/* The function has to return the error code. */ +#undef PSEUDO_ERRVAL +#define PSEUDO_ERRVAL(name, syscall_name, args) \ + .text; \ + ENTRY (name) \ + DO_CALL (syscall_name, args); \ + negl %eax + +#undef PSEUDO_END_ERRVAL +#define PSEUDO_END_ERRVAL(name) \ + END (name) + +#define ret_ERRVAL ret + +#define SYSCALL_ERROR_HANDLER /* Nothing here; code in sysdep.c is used. */ + +/* The original calling convention for system calls on Linux/i386 is + to use int $0x80. */ +#ifdef I386_USE_SYSENTER +# ifdef SHARED +# define ENTER_KERNEL call *%gs:SYSINFO_OFFSET +# else +# define ENTER_KERNEL call *_dl_sysinfo +# endif +#else +# define ENTER_KERNEL int $0x80 +#endif + +/* Linux takes system call arguments in registers: + + syscall number %eax call-clobbered + arg 1 %ebx call-saved + arg 2 %ecx call-clobbered + arg 3 %edx call-clobbered + arg 4 %esi call-saved + arg 5 %edi call-saved + arg 6 %ebp call-saved + + The stack layout upon entering the function is: + + 24(%esp) Arg# 6 + 20(%esp) Arg# 5 + 16(%esp) Arg# 4 + 12(%esp) Arg# 3 + 8(%esp) Arg# 2 + 4(%esp) Arg# 1 + (%esp) Return address + + (Of course a function with say 3 arguments does not have entries for + arguments 4, 5, and 6.) + + The following code tries hard to be optimal. A general assumption + (which is true according to the data books I have) is that + + 2 * xchg is more expensive than pushl + movl + popl + + Beside this a neat trick is used. The calling conventions for Linux + tell that among the registers used for parameters %ecx and %edx need + not be saved. Beside this we may clobber this registers even when + they are not used for parameter passing. + + As a result one can see below that we save the content of the %ebx + register in the %edx register when we have less than 3 arguments + (2 * movl is less expensive than pushl + popl). + + Second unlike for the other registers we don't save the content of + %ecx and %edx when we have more than 1 and 2 registers resp. + + The code below might look a bit long but we have to take care for + the pipelined processors (i586). Here the `pushl' and `popl' + instructions are marked as NP (not pairable) but the exception is + two consecutive of these instruction. This gives no penalty on + other processors though. */ + +#undef DO_CALL +#define DO_CALL(syscall_name, args) \ + PUSHARGS_##args \ + DOARGS_##args \ + movl $SYS_ify (syscall_name), %eax; \ + ENTER_KERNEL \ + POPARGS_##args + +#define PUSHARGS_0 /* No arguments to push. */ +#define DOARGS_0 /* No arguments to frob. */ +#define POPARGS_0 /* No arguments to pop. */ +#define _PUSHARGS_0 /* No arguments to push. */ +#define _DOARGS_0(n) /* No arguments to frob. */ +#define _POPARGS_0 /* No arguments to pop. */ + +#define PUSHARGS_1 movl %ebx, %edx; L(SAVEBX1): PUSHARGS_0 +#define DOARGS_1 _DOARGS_1 (4) +#define POPARGS_1 POPARGS_0; movl %edx, %ebx; L(RESTBX1): +#define _PUSHARGS_1 pushl %ebx; cfi_adjust_cfa_offset (4); \ + cfi_rel_offset (ebx, 0); L(PUSHBX1): _PUSHARGS_0 +#define _DOARGS_1(n) movl n(%esp), %ebx; _DOARGS_0(n-4) +#define _POPARGS_1 _POPARGS_0; popl %ebx; cfi_adjust_cfa_offset (-4); \ + cfi_restore (ebx); L(POPBX1): + +#define PUSHARGS_2 PUSHARGS_1 +#define DOARGS_2 _DOARGS_2 (8) +#define POPARGS_2 POPARGS_1 +#define _PUSHARGS_2 _PUSHARGS_1 +#define _DOARGS_2(n) movl n(%esp), %ecx; _DOARGS_1 (n-4) +#define _POPARGS_2 _POPARGS_1 + +#define PUSHARGS_3 _PUSHARGS_2 +#define DOARGS_3 _DOARGS_3 (16) +#define POPARGS_3 _POPARGS_3 +#define _PUSHARGS_3 _PUSHARGS_2 +#define _DOARGS_3(n) movl n(%esp), %edx; _DOARGS_2 (n-4) +#define _POPARGS_3 _POPARGS_2 + +#define PUSHARGS_4 _PUSHARGS_4 +#define DOARGS_4 _DOARGS_4 (24) +#define POPARGS_4 _POPARGS_4 +#define _PUSHARGS_4 pushl %esi; cfi_adjust_cfa_offset (4); \ + cfi_rel_offset (esi, 0); L(PUSHSI1): _PUSHARGS_3 +#define _DOARGS_4(n) movl n(%esp), %esi; _DOARGS_3 (n-4) +#define _POPARGS_4 _POPARGS_3; popl %esi; cfi_adjust_cfa_offset (-4); \ + cfi_restore (esi); L(POPSI1): + +#define PUSHARGS_5 _PUSHARGS_5 +#define DOARGS_5 _DOARGS_5 (32) +#define POPARGS_5 _POPARGS_5 +#define _PUSHARGS_5 pushl %edi; cfi_adjust_cfa_offset (4); \ + cfi_rel_offset (edi, 0); L(PUSHDI1): _PUSHARGS_4 +#define _DOARGS_5(n) movl n(%esp), %edi; _DOARGS_4 (n-4) +#define _POPARGS_5 _POPARGS_4; popl %edi; cfi_adjust_cfa_offset (-4); \ + cfi_restore (edi); L(POPDI1): + +#define PUSHARGS_6 _PUSHARGS_6 +#define DOARGS_6 _DOARGS_6 (40) +#define POPARGS_6 _POPARGS_6 +#define _PUSHARGS_6 pushl %ebp; cfi_adjust_cfa_offset (4); \ + cfi_rel_offset (ebp, 0); L(PUSHBP1): _PUSHARGS_5 +#define _DOARGS_6(n) movl n(%esp), %ebp; _DOARGS_5 (n-4) +#define _POPARGS_6 _POPARGS_5; popl %ebp; cfi_adjust_cfa_offset (-4); \ + cfi_restore (ebp); L(POPBP1): + +#else /* !__ASSEMBLER__ */ + +extern int __syscall_error (int) + attribute_hidden __attribute__ ((__regparm__ (1))); + +#ifndef OPTIMIZE_FOR_GCC_5 +/* We need some help from the assembler to generate optimal code. We + define some macros here which later will be used. */ +asm (".L__X'%ebx = 1\n\t" + ".L__X'%ecx = 2\n\t" + ".L__X'%edx = 2\n\t" + ".L__X'%eax = 3\n\t" + ".L__X'%esi = 3\n\t" + ".L__X'%edi = 3\n\t" + ".L__X'%ebp = 3\n\t" + ".L__X'%esp = 3\n\t" + ".macro bpushl name reg\n\t" + ".if 1 - \\name\n\t" + ".if 2 - \\name\n\t" + "error\n\t" + ".else\n\t" + "xchgl \\reg, %ebx\n\t" + ".endif\n\t" + ".endif\n\t" + ".endm\n\t" + ".macro bpopl name reg\n\t" + ".if 1 - \\name\n\t" + ".if 2 - \\name\n\t" + "error\n\t" + ".else\n\t" + "xchgl \\reg, %ebx\n\t" + ".endif\n\t" + ".endif\n\t" + ".endm\n\t"); + +/* Six-argument syscalls use an out-of-line helper, because an inline + asm using all registers apart from %esp cannot work reliably and + the assembler does not support describing an asm that saves and + restores %ebp itself as a separate stack frame. This structure + stores the arguments not passed in registers; %edi is passed with a + pointer to this structure. */ +struct libc_do_syscall_args +{ + int ebx, edi, ebp; +}; +#endif + +/* Define a macro which expands inline into the wrapper code for a system + call. */ +#undef INLINE_SYSCALL +#if IS_IN (libc) +# define INLINE_SYSCALL(name, nr, args...) \ + ({ \ + unsigned int resultvar = INTERNAL_SYSCALL (name, , nr, args); \ + __glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (resultvar, )) \ + ? __syscall_error (-INTERNAL_SYSCALL_ERRNO (resultvar, )) \ + : (int) resultvar; }) +#else +# define INLINE_SYSCALL(name, nr, args...) \ + ({ \ + unsigned int resultvar = INTERNAL_SYSCALL (name, , nr, args); \ + if (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (resultvar, ))) \ + { \ + __set_errno (INTERNAL_SYSCALL_ERRNO (resultvar, )); \ + resultvar = 0xffffffff; \ + } \ + (int) resultvar; }) +#endif + +/* Set error number and return -1. Return the internal function, + __syscall_error, which sets errno from the negative error number + and returns -1, to avoid PIC. */ +#undef INLINE_SYSCALL_ERROR_RETURN_VALUE +#define INLINE_SYSCALL_ERROR_RETURN_VALUE(resultvar) \ + __syscall_error (-(resultvar)) + +/* List of system calls which are supported as vsyscalls. */ +# define HAVE_CLOCK_GETTIME_VSYSCALL 1 +# define HAVE_GETTIMEOFDAY_VSYSCALL 1 + +/* Define a macro which expands inline into the wrapper code for a system + call. This use is for internal calls that do not need to handle errors + normally. It will never touch errno. This returns just what the kernel + gave back. + + The _NCS variant allows non-constant syscall numbers but it is not + possible to use more than four parameters. */ +#undef INTERNAL_SYSCALL +#define INTERNAL_SYSCALL_MAIN_0(name, err, args...) \ + INTERNAL_SYSCALL_MAIN_INLINE(name, err, 0, args) +#define INTERNAL_SYSCALL_MAIN_1(name, err, args...) \ + INTERNAL_SYSCALL_MAIN_INLINE(name, err, 1, args) +#define INTERNAL_SYSCALL_MAIN_2(name, err, args...) \ + INTERNAL_SYSCALL_MAIN_INLINE(name, err, 2, args) +#define INTERNAL_SYSCALL_MAIN_3(name, err, args...) \ + INTERNAL_SYSCALL_MAIN_INLINE(name, err, 3, args) +#define INTERNAL_SYSCALL_MAIN_4(name, err, args...) \ + INTERNAL_SYSCALL_MAIN_INLINE(name, err, 4, args) +#define INTERNAL_SYSCALL_MAIN_5(name, err, args...) \ + INTERNAL_SYSCALL_MAIN_INLINE(name, err, 5, args) +/* Each object using 6-argument inline syscalls must include a + definition of __libc_do_syscall. */ +#ifdef OPTIMIZE_FOR_GCC_5 +# define INTERNAL_SYSCALL_MAIN_6(name, err, args...) \ + INTERNAL_SYSCALL_MAIN_INLINE(name, err, 6, args) +#else /* GCC 5 */ +# define INTERNAL_SYSCALL_MAIN_6(name, err, arg1, arg2, arg3, \ + arg4, arg5, arg6) \ + struct libc_do_syscall_args _xv = \ + { \ + (int) (arg1), \ + (int) (arg5), \ + (int) (arg6) \ + }; \ + asm volatile ( \ + "movl %1, %%eax\n\t" \ + "call __libc_do_syscall" \ + : "=a" (resultvar) \ + : "i" (__NR_##name), "c" (arg2), "d" (arg3), "S" (arg4), "D" (&_xv) \ + : "memory", "cc") +#endif /* GCC 5 */ +#define INTERNAL_SYSCALL(name, err, nr, args...) \ + ({ \ + register unsigned int resultvar; \ + INTERNAL_SYSCALL_MAIN_##nr (name, err, args); \ + (int) resultvar; }) +#ifdef I386_USE_SYSENTER +# ifdef OPTIMIZE_FOR_GCC_5 +# ifdef SHARED +# define INTERNAL_SYSCALL_MAIN_INLINE(name, err, nr, args...) \ + LOADREGS_##nr(args) \ + asm volatile ( \ + "call *%%gs:%P2" \ + : "=a" (resultvar) \ + : "a" (__NR_##name), "i" (offsetof (tcbhead_t, sysinfo)) \ + ASMARGS_##nr(args) : "memory", "cc") +# define INTERNAL_SYSCALL_NCS(name, err, nr, args...) \ + ({ \ + register unsigned int resultvar; \ + LOADREGS_##nr(args) \ + asm volatile ( \ + "call *%%gs:%P2" \ + : "=a" (resultvar) \ + : "a" (name), "i" (offsetof (tcbhead_t, sysinfo)) \ + ASMARGS_##nr(args) : "memory", "cc"); \ + (int) resultvar; }) +# else +# define INTERNAL_SYSCALL_MAIN_INLINE(name, err, nr, args...) \ + LOADREGS_##nr(args) \ + asm volatile ( \ + "call *_dl_sysinfo" \ + : "=a" (resultvar) \ + : "a" (__NR_##name) ASMARGS_##nr(args) : "memory", "cc") +# define INTERNAL_SYSCALL_NCS(name, err, nr, args...) \ + ({ \ + register unsigned int resultvar; \ + LOADREGS_##nr(args) \ + asm volatile ( \ + "call *_dl_sysinfo" \ + : "=a" (resultvar) \ + : "a" (name) ASMARGS_##nr(args) : "memory", "cc"); \ + (int) resultvar; }) +# endif +# else /* GCC 5 */ +# ifdef SHARED +# define INTERNAL_SYSCALL_MAIN_INLINE(name, err, nr, args...) \ + EXTRAVAR_##nr \ + asm volatile ( \ + LOADARGS_##nr \ + "movl %1, %%eax\n\t" \ + "call *%%gs:%P2\n\t" \ + RESTOREARGS_##nr \ + : "=a" (resultvar) \ + : "i" (__NR_##name), "i" (offsetof (tcbhead_t, sysinfo)) \ + ASMFMT_##nr(args) : "memory", "cc") +# define INTERNAL_SYSCALL_NCS(name, err, nr, args...) \ + ({ \ + register unsigned int resultvar; \ + EXTRAVAR_##nr \ + asm volatile ( \ + LOADARGS_##nr \ + "call *%%gs:%P2\n\t" \ + RESTOREARGS_##nr \ + : "=a" (resultvar) \ + : "0" (name), "i" (offsetof (tcbhead_t, sysinfo)) \ + ASMFMT_##nr(args) : "memory", "cc"); \ + (int) resultvar; }) +# else +# define INTERNAL_SYSCALL_MAIN_INLINE(name, err, nr, args...) \ + EXTRAVAR_##nr \ + asm volatile ( \ + LOADARGS_##nr \ + "movl %1, %%eax\n\t" \ + "call *_dl_sysinfo\n\t" \ + RESTOREARGS_##nr \ + : "=a" (resultvar) \ + : "i" (__NR_##name) ASMFMT_##nr(args) : "memory", "cc") +# define INTERNAL_SYSCALL_NCS(name, err, nr, args...) \ + ({ \ + register unsigned int resultvar; \ + EXTRAVAR_##nr \ + asm volatile ( \ + LOADARGS_##nr \ + "call *_dl_sysinfo\n\t" \ + RESTOREARGS_##nr \ + : "=a" (resultvar) \ + : "0" (name) ASMFMT_##nr(args) : "memory", "cc"); \ + (int) resultvar; }) +# endif +# endif /* GCC 5 */ +#else +# ifdef OPTIMIZE_FOR_GCC_5 +# define INTERNAL_SYSCALL_MAIN_INLINE(name, err, nr, args...) \ + LOADREGS_##nr(args) \ + asm volatile ( \ + "int $0x80" \ + : "=a" (resultvar) \ + : "a" (__NR_##name) ASMARGS_##nr(args) : "memory", "cc") +# define INTERNAL_SYSCALL_NCS(name, err, nr, args...) \ + ({ \ + register unsigned int resultvar; \ + LOADREGS_##nr(args) \ + asm volatile ( \ + "int $0x80" \ + : "=a" (resultvar) \ + : "a" (name) ASMARGS_##nr(args) : "memory", "cc"); \ + (int) resultvar; }) +# else /* GCC 5 */ +# define INTERNAL_SYSCALL_MAIN_INLINE(name, err, nr, args...) \ + EXTRAVAR_##nr \ + asm volatile ( \ + LOADARGS_##nr \ + "movl %1, %%eax\n\t" \ + "int $0x80\n\t" \ + RESTOREARGS_##nr \ + : "=a" (resultvar) \ + : "i" (__NR_##name) ASMFMT_##nr(args) : "memory", "cc") +# define INTERNAL_SYSCALL_NCS(name, err, nr, args...) \ + ({ \ + register unsigned int resultvar; \ + EXTRAVAR_##nr \ + asm volatile ( \ + LOADARGS_##nr \ + "int $0x80\n\t" \ + RESTOREARGS_##nr \ + : "=a" (resultvar) \ + : "0" (name) ASMFMT_##nr(args) : "memory", "cc"); \ + (int) resultvar; }) +# endif /* GCC 5 */ +#endif + +#undef INTERNAL_SYSCALL_DECL +#define INTERNAL_SYSCALL_DECL(err) do { } while (0) + +#undef INTERNAL_SYSCALL_ERROR_P +#define INTERNAL_SYSCALL_ERROR_P(val, err) \ + ((unsigned int) (val) >= 0xfffff001u) + +#undef INTERNAL_SYSCALL_ERRNO +#define INTERNAL_SYSCALL_ERRNO(val, err) (-(val)) + +#define LOADARGS_0 +#ifdef __PIC__ +# if defined I386_USE_SYSENTER && defined SHARED +# define LOADARGS_1 \ + "bpushl .L__X'%k3, %k3\n\t" +# define LOADARGS_5 \ + "movl %%ebx, %4\n\t" \ + "movl %3, %%ebx\n\t" +# else +# define LOADARGS_1 \ + "bpushl .L__X'%k2, %k2\n\t" +# define LOADARGS_5 \ + "movl %%ebx, %3\n\t" \ + "movl %2, %%ebx\n\t" +# endif +# define LOADARGS_2 LOADARGS_1 +# define LOADARGS_3 \ + "xchgl %%ebx, %%edi\n\t" +# define LOADARGS_4 LOADARGS_3 +#else +# define LOADARGS_1 +# define LOADARGS_2 +# define LOADARGS_3 +# define LOADARGS_4 +# define LOADARGS_5 +#endif + +#define RESTOREARGS_0 +#ifdef __PIC__ +# if defined I386_USE_SYSENTER && defined SHARED +# define RESTOREARGS_1 \ + "bpopl .L__X'%k3, %k3\n\t" +# define RESTOREARGS_5 \ + "movl %4, %%ebx" +# else +# define RESTOREARGS_1 \ + "bpopl .L__X'%k2, %k2\n\t" +# define RESTOREARGS_5 \ + "movl %3, %%ebx" +# endif +# define RESTOREARGS_2 RESTOREARGS_1 +# define RESTOREARGS_3 \ + "xchgl %%edi, %%ebx\n\t" +# define RESTOREARGS_4 RESTOREARGS_3 +#else +# define RESTOREARGS_1 +# define RESTOREARGS_2 +# define RESTOREARGS_3 +# define RESTOREARGS_4 +# define RESTOREARGS_5 +#endif + +#ifdef OPTIMIZE_FOR_GCC_5 +# define LOADREGS_0() +# define ASMARGS_0() +# define LOADREGS_1(arg1) \ + LOADREGS_0 () +# define ASMARGS_1(arg1) \ + ASMARGS_0 (), "b" ((unsigned int) (arg1)) +# define LOADREGS_2(arg1, arg2) \ + LOADREGS_1 (arg1) +# define ASMARGS_2(arg1, arg2) \ + ASMARGS_1 (arg1), "c" ((unsigned int) (arg2)) +# define LOADREGS_3(arg1, arg2, arg3) \ + LOADREGS_2 (arg1, arg2) +# define ASMARGS_3(arg1, arg2, arg3) \ + ASMARGS_2 (arg1, arg2), "d" ((unsigned int) (arg3)) +# define LOADREGS_4(arg1, arg2, arg3, arg4) \ + LOADREGS_3 (arg1, arg2, arg3) +# define ASMARGS_4(arg1, arg2, arg3, arg4) \ + ASMARGS_3 (arg1, arg2, arg3), "S" ((unsigned int) (arg4)) +# define LOADREGS_5(arg1, arg2, arg3, arg4, arg5) \ + LOADREGS_4 (arg1, arg2, arg3, arg4) +# define ASMARGS_5(arg1, arg2, arg3, arg4, arg5) \ + ASMARGS_4 (arg1, arg2, arg3, arg4), "D" ((unsigned int) (arg5)) +# define LOADREGS_6(arg1, arg2, arg3, arg4, arg5, arg6) \ + register unsigned int _a6 asm ("ebp") = (unsigned int) (arg6); \ + LOADREGS_5 (arg1, arg2, arg3, arg4, arg5) +# define ASMARGS_6(arg1, arg2, arg3, arg4, arg5, arg6) \ + ASMARGS_5 (arg1, arg2, arg3, arg4, arg5), "r" (_a6) +#endif /* GCC 5 */ + +#define ASMFMT_0() +#ifdef __PIC__ +# define ASMFMT_1(arg1) \ + , "cd" (arg1) +# define ASMFMT_2(arg1, arg2) \ + , "d" (arg1), "c" (arg2) +# define ASMFMT_3(arg1, arg2, arg3) \ + , "D" (arg1), "c" (arg2), "d" (arg3) +# define ASMFMT_4(arg1, arg2, arg3, arg4) \ + , "D" (arg1), "c" (arg2), "d" (arg3), "S" (arg4) +# define ASMFMT_5(arg1, arg2, arg3, arg4, arg5) \ + , "0" (arg1), "m" (_xv), "c" (arg2), "d" (arg3), "S" (arg4), "D" (arg5) +#else +# define ASMFMT_1(arg1) \ + , "b" (arg1) +# define ASMFMT_2(arg1, arg2) \ + , "b" (arg1), "c" (arg2) +# define ASMFMT_3(arg1, arg2, arg3) \ + , "b" (arg1), "c" (arg2), "d" (arg3) +# define ASMFMT_4(arg1, arg2, arg3, arg4) \ + , "b" (arg1), "c" (arg2), "d" (arg3), "S" (arg4) +# define ASMFMT_5(arg1, arg2, arg3, arg4, arg5) \ + , "b" (arg1), "c" (arg2), "d" (arg3), "S" (arg4), "D" (arg5) +#endif + +#define EXTRAVAR_0 +#define EXTRAVAR_1 +#define EXTRAVAR_2 +#define EXTRAVAR_3 +#define EXTRAVAR_4 +#ifdef __PIC__ +# define EXTRAVAR_5 int _xv; +#else +# define EXTRAVAR_5 +#endif + +/* Consistency check for position-independent code. */ +#if defined __PIC__ && !defined OPTIMIZE_FOR_GCC_5 +# define check_consistency() \ + ({ int __res; \ + __asm__ __volatile__ \ + (LOAD_PIC_REG_STR (cx) ";" \ + "subl %%ebx, %%ecx;" \ + "je 1f;" \ + "ud2;" \ + "1:\n" \ + : "=c" (__res)); \ + __res; }) +#endif + +#endif /* __ASSEMBLER__ */ + + +/* Pointer mangling support. */ +#if IS_IN (rtld) +/* We cannot use the thread descriptor because in ld.so we use setjmp + earlier than the descriptor is initialized. Using a global variable + is too complicated here since we have no PC-relative addressing mode. */ +#else +# ifdef __ASSEMBLER__ +# define PTR_MANGLE(reg) xorl %gs:POINTER_GUARD, reg; \ + roll $9, reg +# define PTR_DEMANGLE(reg) rorl $9, reg; \ + xorl %gs:POINTER_GUARD, reg +# else +# define PTR_MANGLE(var) asm ("xorl %%gs:%c2, %0\n" \ + "roll $9, %0" \ + : "=r" (var) \ + : "0" (var), \ + "i" (offsetof (tcbhead_t, \ + pointer_guard))) +# define PTR_DEMANGLE(var) asm ("rorl $9, %0\n" \ + "xorl %%gs:%c2, %0" \ + : "=r" (var) \ + : "0" (var), \ + "i" (offsetof (tcbhead_t, \ + pointer_guard))) +# endif +#endif + +#endif /* linux/i386/sysdep.h */ diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/time.c b/REORG.TODO/sysdeps/unix/sysv/linux/i386/time.c new file mode 100644 index 0000000000..f614a2d73b --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/time.c @@ -0,0 +1,34 @@ +/* time -- Get number of seconds since Epoch. Linux/i386 version. + Copyright (C) 2015-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#ifdef SHARED +# define time __redirect_time +#endif + +#include <time.h> + +#ifdef SHARED +# undef time +# define time_type __redirect_time + +# undef libc_hidden_def +# define libc_hidden_def(name) \ + __hidden_ver1 (__time_syscall, __GI_time, __time_syscall); +#endif + +#include <sysdeps/unix/sysv/linux/x86/time.c> diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/ucontext_i.sym b/REORG.TODO/sysdeps/unix/sysv/linux/i386/ucontext_i.sym new file mode 100644 index 0000000000..b11a5509cd --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/ucontext_i.sym @@ -0,0 +1,30 @@ +#include <stddef.h> +#include <signal.h> +#include <sys/ucontext.h> + +-- + +SIG_BLOCK +SIG_SETMASK + +#define ucontext(member) offsetof (ucontext_t, member) +#define mcontext(member) ucontext (uc_mcontext.member) +#define mreg(reg) mcontext (gregs[REG_##reg]) + +oLINK ucontext (uc_link) +oSS_SP ucontext (uc_stack.ss_sp) +oSS_SIZE ucontext (uc_stack.ss_size) +oGS mreg (GS) +oFS mreg (FS) +oEDI mreg (EDI) +oESI mreg (ESI) +oEBP mreg (EBP) +oESP mreg (ESP) +oEBX mreg (EBX) +oEDX mreg (EDX) +oECX mreg (ECX) +oEAX mreg (EAX) +oEIP mreg (EIP) +oFPREGS mcontext (fpregs) +oSIGMASK ucontext (uc_sigmask) +oFPREGSMEM ucontext (__fpregs_mem) diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/versionsort64.c b/REORG.TODO/sysdeps/unix/sysv/linux/i386/versionsort64.c new file mode 100644 index 0000000000..3e1c6ea35b --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/versionsort64.c @@ -0,0 +1,48 @@ +/* Copyright (C) 1992-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#include <dirent.h> +#include <string.h> + +int +__versionsort64 (const struct dirent64 **a, const struct dirent64 **b) +{ + return __strverscmp ((*a)->d_name, (*b)->d_name); +} + +#include <shlib-compat.h> + +versioned_symbol (libc, __versionsort64, versionsort64, GLIBC_2_2); + +#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2) + +#include <sysdeps/unix/sysv/linux/i386/olddirent.h> + +int +__old_versionsort64 (const struct __old_dirent64 **a, + const struct __old_dirent64 **b); + +int +attribute_compat_text_section +__old_versionsort64 (const struct __old_dirent64 **a, + const struct __old_dirent64 **b) +{ + return __strverscmp ((*a)->d_name, (*b)->d_name); +} + +compat_symbol (libc, __old_versionsort64, versionsort64, GLIBC_2_1); +#endif diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/vfork.S b/REORG.TODO/sysdeps/unix/sysv/linux/i386/vfork.S new file mode 100644 index 0000000000..92ceca74c7 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/vfork.S @@ -0,0 +1,57 @@ +/* Copyright (C) 1999-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Andreas Schwab <schwab@gnu.org>. + + 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 <sysdep.h> +#define _ERRNO_H 1 +#include <bits/errno.h> +#include <tcb-offsets.h> + + +/* Clone the calling process, but without copying the whole address space. + The calling process is suspended until the new process exits or is + replaced by a call to `execve'. Return -1 for errors, 0 to the new process, + and the process ID of the new process to the old process. */ + +ENTRY (__vfork) + + /* Pop the return PC value into ECX. */ + popl %ecx + cfi_adjust_cfa_offset (-4) + cfi_register (%eip, %ecx) + + /* Stuff the syscall number in EAX and enter into the kernel. */ + movl $SYS_ify (vfork), %eax + int $0x80 + + /* Jump to the return PC. Don't jump directly since this + disturbs the branch target cache. Instead push the return + address back on the stack. */ + pushl %ecx + cfi_adjust_cfa_offset (4) + + cmpl $-4095, %eax + /* Branch forward if it failed. */ + jae SYSCALL_ERROR_LABEL + + ret + +PSEUDO_END (__vfork) +libc_hidden_def (__vfork) + +weak_alias (__vfork, vfork) +strong_alias (__vfork, __libc_vfork) diff --git a/REORG.TODO/sysdeps/unix/sysv/linux/i386/xstat.c b/REORG.TODO/sysdeps/unix/sysv/linux/i386/xstat.c new file mode 100644 index 0000000000..6b8b1ce3e7 --- /dev/null +++ b/REORG.TODO/sysdeps/unix/sysv/linux/i386/xstat.c @@ -0,0 +1,61 @@ +/* xstat using old-style Unix stat system call. + Copyright (C) 1991-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +/* Ho hum, if xstat == xstat64 we must get rid of the prototype or gcc + will complain since they don't strictly match. */ +#define __xstat64 __xstat64_disable + +#include <errno.h> +#include <stddef.h> +#include <sys/stat.h> +#include <kernel_stat.h> + +#include <sysdep.h> +#include <sys/syscall.h> + +#include <xstatconv.h> + + +/* Get information about the file NAME in BUF. */ +int +__xstat (int vers, const char *name, struct stat *buf) +{ + int result; + + if (vers == _STAT_VER_KERNEL) + return INLINE_SYSCALL (stat, 2, name, buf); + + { + struct stat64 buf64; + + INTERNAL_SYSCALL_DECL (err); + result = INTERNAL_SYSCALL (stat64, err, 2, name, &buf64); + if (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (result, err))) + return INLINE_SYSCALL_ERROR_RETURN_VALUE (INTERNAL_SYSCALL_ERRNO (result, + err)); + else + return __xstat32_conv (vers, &buf64, buf); + } +} +hidden_def (__xstat) +weak_alias (__xstat, _xstat); +#if XSTAT_IS_XSTAT64 +# undef __xstat64 +strong_alias (__xstat, __xstat64); +hidden_ver (__xstat, __xstat64) +#endif |