diff options
author | Joseph Myers <joseph@codesourcery.com> | 2012-04-21 08:38:55 -0700 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2012-04-21 08:38:55 -0700 |
commit | 25593dcaf4cbdb744eff54fc426b29ae0b96817d (patch) | |
tree | 6eefd4c3d151eeb5d3438ea9d395d3bab7b4c692 | |
parent | 9002644d9f39c18fc4d7787ee06959a09afd4df5 (diff) | |
download | glibc-25593dcaf4cbdb744eff54fc426b29ae0b96817d.tar.gz |
Merge sysdeps/unix/sysv/linux/arm/eabi into sysdeps/unix/sysv/linux/arm.
-rw-r--r-- | ChangeLog.arm | 161 | ||||
-rw-r--r-- | ChangeLog.mips | 6 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/Makefile | 41 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/____longjmp_chk.S (renamed from sysdeps/unix/sysv/linux/arm/eabi/____longjmp_chk.S) | 0 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/configure (renamed from sysdeps/unix/sysv/linux/arm/eabi/configure) | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/configure.in (renamed from sysdeps/unix/sysv/linux/arm/eabi/configure.in) | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/eabi/Makefile | 42 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/eabi/syscalls.list | 32 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/eabi/sysdep.h | 199 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/ftruncate64.c (renamed from sysdeps/unix/sysv/linux/arm/eabi/ftruncate64.c) | 0 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/getcontext.S (renamed from sysdeps/unix/sysv/linux/arm/eabi/getcontext.S) | 0 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/internal_accept4.S (renamed from sysdeps/unix/sysv/linux/arm/eabi/internal_accept4.S) | 0 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/internal_recvmmsg.S (renamed from sysdeps/unix/sysv/linux/arm/eabi/internal_recvmmsg.S) | 0 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/internal_sendmmsg.S (renamed from sysdeps/unix/sysv/linux/arm/eabi/internal_sendmmsg.S) | 0 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/libc-do-syscall.S (renamed from sysdeps/unix/sysv/linux/arm/eabi/libc-do-syscall.S) | 0 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/makecontext.c (renamed from sysdeps/unix/sysv/linux/arm/eabi/makecontext.c) | 0 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/mmap64.S (renamed from sysdeps/unix/sysv/linux/arm/eabi/mmap64.S) | 0 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/msgctl.c (renamed from sysdeps/unix/sysv/linux/arm/eabi/msgctl.c) | 0 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/nptl/Makefile (renamed from sysdeps/unix/sysv/linux/arm/eabi/nptl/Makefile) | 0 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/nptl/configure (renamed from sysdeps/unix/sysv/linux/arm/eabi/nptl/configure) | 0 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/nptl/configure.in (renamed from sysdeps/unix/sysv/linux/arm/eabi/nptl/configure.in) | 0 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/nptl/nptl-aeabi_unwind_cpp_pr1.c (renamed from sysdeps/unix/sysv/linux/arm/eabi/nptl/nptl-aeabi_unwind_cpp_pr1.c) | 0 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/nptl/rt-aeabi_unwind_cpp_pr1.c (renamed from sysdeps/unix/sysv/linux/arm/eabi/nptl/rt-aeabi_unwind_cpp_pr1.c) | 0 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/nptl/sysdep-cancel.h (renamed from sysdeps/unix/sysv/linux/arm/eabi/nptl/sysdep-cancel.h) | 0 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/nptl/unwind-forcedunwind.c (renamed from sysdeps/unix/sysv/linux/arm/eabi/nptl/unwind-forcedunwind.c) | 0 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/nptl/unwind-resume.c (renamed from sysdeps/unix/sysv/linux/arm/eabi/nptl/unwind-resume.c) | 0 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/nptl/unwind.h (renamed from sysdeps/unix/sysv/linux/arm/eabi/nptl/unwind.h) | 0 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/oldgetrlimit.c (renamed from sysdeps/unix/sysv/linux/arm/eabi/oldgetrlimit.c) | 0 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/oldsetrlimit.c (renamed from sysdeps/unix/sysv/linux/arm/eabi/oldsetrlimit.c) | 0 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/pread.c (renamed from sysdeps/unix/sysv/linux/arm/eabi/pread.c) | 0 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/pread64.c (renamed from sysdeps/unix/sysv/linux/arm/eabi/pread64.c) | 0 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/pwrite.c (renamed from sysdeps/unix/sysv/linux/arm/eabi/pwrite.c) | 0 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/pwrite64.c (renamed from sysdeps/unix/sysv/linux/arm/eabi/pwrite64.c) | 0 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/readahead.c (renamed from sysdeps/unix/sysv/linux/arm/eabi/readahead.c) | 0 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/semctl.c (renamed from sysdeps/unix/sysv/linux/arm/eabi/semctl.c) | 0 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/setcontext.S (renamed from sysdeps/unix/sysv/linux/arm/eabi/setcontext.S) | 0 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/shmctl.c (renamed from sysdeps/unix/sysv/linux/arm/eabi/shmctl.c) | 0 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/sigrestorer.S (renamed from sysdeps/unix/sysv/linux/arm/eabi/sigrestorer.S) | 0 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/socket.S | 126 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/swapcontext.S (renamed from sysdeps/unix/sysv/linux/arm/eabi/swapcontext.S) | 0 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/syscall.S (renamed from sysdeps/unix/sysv/linux/arm/eabi/syscall.S) | 0 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/syscalls.list | 35 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/sysdep.h | 208 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/truncate64.c (renamed from sysdeps/unix/sysv/linux/arm/eabi/truncate64.c) | 0 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/umount.c (renamed from sysdeps/unix/sysv/linux/arm/eabi/umount.c) | 0 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/mips/mips32/readahead.c | 2 |
46 files changed, 388 insertions, 468 deletions
diff --git a/ChangeLog.arm b/ChangeLog.arm index f16e6916df..43a595dc71 100644 --- a/ChangeLog.arm +++ b/ChangeLog.arm @@ -1,3 +1,164 @@ +2012-04-21 Joseph Myers <joseph@codesourcery.com> + + [BZ #13556] + * sysdeps/unix/sysv/linux/arm/socket.S: Remove. + * sysdeps/unix/sysv/linux/arm/syscalls.list (syscall): Remove. + (oldgetrlimit): Likewise. + (oldsetrlimit): Likewise. + (syscall): Likewise. + (msgget): Add syscall from eabi/syscalls.list. + (msgrcv): Likewise. + (msgsnd): Likewise. + (shmat): Likewise. + (shmdt): Likewise. + (shmget): Likewise. + (semop): Likewise. + (semtimedop): Likewise. + (semget): Likewise. + (accept): Likewise. + (bind): Likewise. + (connect): Likewise. + (getpeername): Likewise. + (getsockname): Likewise. + (getsockopt): Likewise. + (listen): Likewise. + (recv): Likewise. + (recvfrom): Likewise. + (recvmsg): Likewise. + (send): Likewise. + (sendmsg): Likewise. + (sendto): Likewise. + (setsockopt): Likewise. + (shutdown): Likewise. + (socket): Likewise. + (socketpair): Likewise. + * sysdeps/unix/sysv/linux/arm/eabi/syscalls.list: Remove. + * sysdeps/unix/sysv/linux/arm/Makefile [subdir = csu] + (CFLAGS-libc-start.c): Add setting from eabi/Makefile. + [subdir = rt] (librt-sysdep_routines): Likewise. + [subdir = rt] (librt-shared-only-routines): Likewise. + [subdir = nptl] (libpthread-sysdep_routines): Likewise. + [subdir = nptl] (libpthread-shared-only-routines): Likewise. + [subdir = resolv] (libanl-sysdep_routines): Likewise. + [subdir = resolv] (libanl-shared-only-routines): Likewise. + [subdir = csu] (sysdep_routines): Likewise. + [subdir = nscd] (nscd-modules): Likewise. + [subdir = nss] (libnss_db-sysdep_routines): Likewise. + [subdir = nss] (libnss_db-shared-only-routines): Likewise. + [subdir = posix] (LDFLAGS-tst-rfc3484): Likewise. + [subdir = posix] (LDFLAGS-tst-rfc3484-2): Likewise. + [subdir = posix] (LDFLAGS-tst-rfc3484-3): Likewise. + * sysdeps/unix/sysv/linux/arm/eabi/Makefile: Remove. + * sysdeps/unix/sysv/linux/arm/sysdep.h (__NR_SYSCALL_BASE): Add + test from eabi/sysdep.h. + (__NR_stime): Add #undef from eabi/sysdep.h. + (__NR_alarm): Likewise. + (DO_CALL): Use definition from eabi/sysdep.h. + (DOARGS_0): Likewise. + (DOARGS_1): Likewise. + (DOARGS_2): Likewise. + (DOARGS_3): Likewise. + (DOARGS_4): Likewise. + (DOARGS_5): Likewise. + (DOARGS_6): Likewise. + (DOARGS_7): Likewise. + (UNDOARGS_0): Likewise. + (UNDOARGS_1): Likewise. + (UNDOARGS_2): Likewise. + (UNDOARGS_3): Likewise. + (UNDOARGS_4): Likewise. + (UNDOARGS_5): Likewise. + (UNDOARGS_6): Likewise. + (UNDOARGS_7): Likewise. + (INTERNAL_SYSCALL_RAW): Likewise. + [__thumb__] (LOAD_ARGS_7): Do not define. + [__thumb__] (ASM_ARGS_7): Likewise. + (INTERNAL_SYSCALL_NCS): Use definition from eabi/sysdep.h. + (INTERNAL_SYSCALL_NCS_0): Remove. + (INTERNAL_SYSCALL_NCS_1): Likewise. + (INTERNAL_SYSCALL_NCS_2): Likewise. + (INTERNAL_SYSCALL_NCS_3): Likewise. + (INTERNAL_SYSCALL_NCS_4): Likewise. + (INTERNAL_SYSCALL_NCS_5): Likewise. + * sysdeps/unix/sysv/linux/arm/eabi/sysdep.h: Remove. + * sysdeps/unix/sysv/linux/arm/eabi/____longjmp_chk.S: Move to ... + * sysdeps/unix/sysv/linux/arm/____longjmp_chk.S: ... here. + * sysdeps/unix/sysv/linux/arm/eabi/configure.in: Move to ... + * sysdeps/unix/sysv/linux/arm/configure.in: ... here. Update + comment. + * sysdeps/unix/sysv/linux/arm/eabi/configure: Move to ... + * sysdeps/unix/sysv/linux/arm/configure: ... here. Regenerate. + * sysdeps/unix/sysv/linux/arm/eabi/ftruncate64.c: Move to ... + * sysdeps/unix/sysv/linux/arm/ftruncate64.c: ... here. + * sysdeps/unix/sysv/linux/arm/eabi/getcontext.S: Move to ... + * sysdeps/unix/sysv/linux/arm/getcontext.S: ... here. + * sysdeps/unix/sysv/linux/arm/eabi/internal_accept4.S: Move to ... + * sysdeps/unix/sysv/linux/arm/internal_accept4.S: ... here. + * sysdeps/unix/sysv/linux/arm/eabi/internal_recvmmsg.S: Move to ... + * sysdeps/unix/sysv/linux/arm/internal_recvmmsg.S: ... here. + * sysdeps/unix/sysv/linux/arm/eabi/internal_sendmmsg.S: Move to ... + * sysdeps/unix/sysv/linux/arm/internal_sendmmsg.S: ... here. + * sysdeps/unix/sysv/linux/arm/eabi/libc-do-syscall.S: Move to ... + * sysdeps/unix/sysv/linux/arm/libc-do-syscall.S: ... here. + * sysdeps/unix/sysv/linux/arm/eabi/makecontext.c: Move to ... + * sysdeps/unix/sysv/linux/arm/makecontext.c: ... here. + * sysdeps/unix/sysv/linux/arm/eabi/mmap64.S: Move to ... + * sysdeps/unix/sysv/linux/arm/mmap64.S: ... here. + * sysdeps/unix/sysv/linux/arm/eabi/msgctl.c: Move to ... + * sysdeps/unix/sysv/linux/arm/msgctl.c: ... here. + * sysdeps/unix/sysv/linux/arm/eabi/oldgetrlimit.c: Move to ... + * sysdeps/unix/sysv/linux/arm/oldgetrlimit.c: ... here. + * sysdeps/unix/sysv/linux/arm/eabi/oldsetrlimit.c: Move to ... + * sysdeps/unix/sysv/linux/arm/oldsetrlimit.c: ... here. + * sysdeps/unix/sysv/linux/arm/eabi/pread.c: Move to ... + * sysdeps/unix/sysv/linux/arm/pread.c: ... here. + * sysdeps/unix/sysv/linux/arm/eabi/pread64.c: Move to ... + * sysdeps/unix/sysv/linux/arm/pread64.c: ... here. + * sysdeps/unix/sysv/linux/arm/eabi/pwrite.c: Move to ... + * sysdeps/unix/sysv/linux/arm/pwrite.c: ... here. + * sysdeps/unix/sysv/linux/arm/eabi/pwrite64.c: Move to ... + * sysdeps/unix/sysv/linux/arm/pwrite64.c: ... here. + * sysdeps/unix/sysv/linux/arm/eabi/readahead.c: Move to ... + * sysdeps/unix/sysv/linux/arm/readahead.c: ... here. + * sysdeps/unix/sysv/linux/arm/eabi/semctl.c: Move to ... + * sysdeps/unix/sysv/linux/arm/semctl.c: ... here. + * sysdeps/unix/sysv/linux/arm/eabi/setcontext.S: Move to ... + * sysdeps/unix/sysv/linux/arm/setcontext.S: ... here. + * sysdeps/unix/sysv/linux/arm/eabi/shmctl.c: Move to ... + * sysdeps/unix/sysv/linux/arm/shmctl.c: ... here. + * sysdeps/unix/sysv/linux/arm/eabi/sigrestorer.S: Move to ... + * sysdeps/unix/sysv/linux/arm/sigrestorer.S: ... here. + * sysdeps/unix/sysv/linux/arm/eabi/swapcontext.S: Move to ... + * sysdeps/unix/sysv/linux/arm/swapcontext.S: ... here. + * sysdeps/unix/sysv/linux/arm/eabi/syscall.S: Move to ... + * sysdeps/unix/sysv/linux/arm/syscall.S: ... here. + * sysdeps/unix/sysv/linux/arm/eabi/truncate64.c: Move to ... + * sysdeps/unix/sysv/linux/arm/truncate64.c: ... here. + * sysdeps/unix/sysv/linux/arm/eabi/umount.c: Move to ... + * sysdeps/unix/sysv/linux/arm/umount.c: ... here. + * sysdeps/unix/sysv/linux/arm/eabi/nptl/Makefile: Move to ... + * sysdeps/unix/sysv/linux/arm/nptl/Makefile: ... here. + * sysdeps/unix/sysv/linux/arm/eabi/nptl/configure.in: Move to ... + * sysdeps/unix/sysv/linux/arm/nptl/configure.in: ... here. + * sysdeps/unix/sysv/linux/arm/eabi/nptl/configure: Move to ... + * sysdeps/unix/sysv/linux/arm/nptl/configure: ... here. + * sysdeps/unix/sysv/linux/arm/eabi/nptl/nptl-aeabi_unwind_cpp_pr1.c: + Move to ... + * sysdeps/unix/sysv/linux/arm/nptl/nptl-aeabi_unwind_cpp_pr1.c: + ... here. + * sysdeps/unix/sysv/linux/arm/eabi/nptl/rt-aeabi_unwind_cpp_pr1.c: + Move to ... + * sysdeps/unix/sysv/linux/arm/nptl/rt-aeabi_unwind_cpp_pr1.c: ... here. + * sysdeps/unix/sysv/linux/arm/eabi/nptl/sysdep-cancel.h: Move to ... + * sysdeps/unix/sysv/linux/arm/nptl/sysdep-cancel.h: ... here. + * sysdeps/unix/sysv/linux/arm/eabi/nptl/unwind-forcedunwind.c: + Move to ... + * sysdeps/unix/sysv/linux/arm/nptl/unwind-forcedunwind.c: ... here. + * sysdeps/unix/sysv/linux/arm/eabi/nptl/unwind-resume.c: Move to ... + * sysdeps/unix/sysv/linux/arm/nptl/unwind-resume.c: ... here. + * sysdeps/unix/sysv/linux/arm/eabi/nptl/unwind.h: Move to ... + * sysdeps/unix/sysv/linux/arm/nptl/unwind.h: ... here. + 2012-04-16 Andreas Jaeger <aj@suse.de> * sysdeps/unix/sysv/linux/arm/ldsodefs.h: Undefine diff --git a/ChangeLog.mips b/ChangeLog.mips index 01f51c0c40..6e0523de80 100644 --- a/ChangeLog.mips +++ b/ChangeLog.mips @@ -1,3 +1,9 @@ +2012-04-21 Joseph Myers <joseph@codesourcery.com> + + * sysdeps/unix/sysv/linux/mips/mips32/readahead.c: Include + sysdeps/unix/sysv/linux/arm/readahead.c not + sysdeps/unix/sysv/linux/arm/eabi/readahead.c. + 2012-03-28 Joseph Myers <joseph@codesourcery.com> * sysdeps/unix/sysv/linux/mips/bits/mman.h (MAP_STACK): Define. diff --git a/sysdeps/unix/sysv/linux/arm/Makefile b/sysdeps/unix/sysv/linux/arm/Makefile index a9817368a1..fb1e3a5b99 100644 --- a/sysdeps/unix/sysv/linux/arm/Makefile +++ b/sysdeps/unix/sysv/linux/arm/Makefile @@ -1,4 +1,9 @@ ifeq ($(subdir),csu) +# In order for unwinding to fail when it falls out of main, we need a +# cantunwind marker. There's one in start.S. To make sure we reach it, add +# unwind tables for __libc_start_main. +CFLAGS-libc-start.c += -fexceptions + sysdep_routines += aeabi_read_tp libc-aeabi_read_tp static-only-routines += aeabi_read_tp shared-only-routines += libc-aeabi_read_tp @@ -24,3 +29,39 @@ endif ifeq ($(subdir),stdlib) gen-as-const-headers += ucontext_i.sym endif + +# Add a syscall function to each library that needs one. + +ifeq ($(subdir),rt) +librt-sysdep_routines += libc-do-syscall +librt-shared-only-routines += libc-do-syscall +endif + +ifeq ($(subdir),nptl) +libpthread-sysdep_routines += libc-do-syscall +libpthread-shared-only-routines += libc-do-syscall +endif + +ifeq ($(subdir),resolv) +libanl-sysdep_routines += libc-do-syscall +libanl-shared-only-routines += libc-do-syscall +endif + +ifeq ($(subdir),csu) +sysdep_routines += libc-do-syscall +endif + +ifeq ($(subdir),nscd) +nscd-modules += libc-do-syscall +endif + +ifeq ($(subdir),nss) +libnss_db-sysdep_routines += libc-do-syscall +libnss_db-shared-only-routines += libc-do-syscall +endif + +ifeq ($(subdir),posix) +LDFLAGS-tst-rfc3484 += $(common-objpfx)csu/libc-do-syscall.o +LDFLAGS-tst-rfc3484-2 += $(common-objpfx)csu/libc-do-syscall.o +LDFLAGS-tst-rfc3484-3 += $(common-objpfx)csu/libc-do-syscall.o +endif diff --git a/sysdeps/unix/sysv/linux/arm/eabi/____longjmp_chk.S b/sysdeps/unix/sysv/linux/arm/____longjmp_chk.S index 8ec41521ca..8ec41521ca 100644 --- a/sysdeps/unix/sysv/linux/arm/eabi/____longjmp_chk.S +++ b/sysdeps/unix/sysv/linux/arm/____longjmp_chk.S diff --git a/sysdeps/unix/sysv/linux/arm/eabi/configure b/sysdeps/unix/sysv/linux/arm/configure index c7e20cfdc5..5b5f4c993a 100644 --- a/sysdeps/unix/sysv/linux/arm/eabi/configure +++ b/sysdeps/unix/sysv/linux/arm/configure @@ -1,5 +1,5 @@ # This file is generated from configure.in by Autoconf. DO NOT EDIT! - # Local configure fragment for sysdeps/unix/sysv/linux/arm/eabi. + # Local configure fragment for sysdeps/unix/sysv/linux/arm. arch_minimum_kernel=2.6.16 libc_cv_gcc_unwind_find_fde=no diff --git a/sysdeps/unix/sysv/linux/arm/eabi/configure.in b/sysdeps/unix/sysv/linux/arm/configure.in index cc0e9b5bd3..b57c4e37b8 100644 --- a/sysdeps/unix/sysv/linux/arm/eabi/configure.in +++ b/sysdeps/unix/sysv/linux/arm/configure.in @@ -1,5 +1,5 @@ GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. -# Local configure fragment for sysdeps/unix/sysv/linux/arm/eabi. +# Local configure fragment for sysdeps/unix/sysv/linux/arm. arch_minimum_kernel=2.6.16 libc_cv_gcc_unwind_find_fde=no diff --git a/sysdeps/unix/sysv/linux/arm/eabi/Makefile b/sysdeps/unix/sysv/linux/arm/eabi/Makefile deleted file mode 100644 index b7baae9e91..0000000000 --- a/sysdeps/unix/sysv/linux/arm/eabi/Makefile +++ /dev/null @@ -1,42 +0,0 @@ -ifeq ($(subdir),csu) -# In order for unwinding to fail when it falls out of main, we need a -# cantunwind marker. There's one in start.S. To make sure we reach it, add -# unwind tables for __libc_start_main. -CFLAGS-libc-start.c += -fexceptions -endif - -# Add a syscall function to each library that needs one. - -ifeq ($(subdir),rt) -librt-sysdep_routines += libc-do-syscall -librt-shared-only-routines += libc-do-syscall -endif - -ifeq ($(subdir),nptl) -libpthread-sysdep_routines += libc-do-syscall -libpthread-shared-only-routines += libc-do-syscall -endif - -ifeq ($(subdir),resolv) -libanl-sysdep_routines += libc-do-syscall -libanl-shared-only-routines += libc-do-syscall -endif - -ifeq ($(subdir),csu) -sysdep_routines += libc-do-syscall -endif - -ifeq ($(subdir),nscd) -nscd-modules += libc-do-syscall -endif - -ifeq ($(subdir),nss) -libnss_db-sysdep_routines += libc-do-syscall -libnss_db-shared-only-routines += libc-do-syscall -endif - -ifeq ($(subdir),posix) -LDFLAGS-tst-rfc3484 += $(common-objpfx)csu/libc-do-syscall.o -LDFLAGS-tst-rfc3484-2 += $(common-objpfx)csu/libc-do-syscall.o -LDFLAGS-tst-rfc3484-3 += $(common-objpfx)csu/libc-do-syscall.o -endif diff --git a/sysdeps/unix/sysv/linux/arm/eabi/syscalls.list b/sysdeps/unix/sysv/linux/arm/eabi/syscalls.list deleted file mode 100644 index e896902471..0000000000 --- a/sysdeps/unix/sysv/linux/arm/eabi/syscalls.list +++ /dev/null @@ -1,32 +0,0 @@ -# File name Caller Syscall name # args Strong name Weak names - -# Semaphore and shm system calls. msgctl, shmctl, and semctl have C -# wrappers (to set __IPC_64). -msgget - msgget i:ii __msgget msgget -msgrcv - msgrcv Ci:ibnii __msgrcv msgrcv -msgsnd - msgsnd Ci:ibni __msgsnd msgsnd -shmat - shmat i:ipi __shmat shmat -shmdt - shmdt i:s __shmdt shmdt -shmget - shmget i:iii __shmget shmget -semop - semop i:ipi __semop semop -semtimedop - semtimedop i:ipip semtimedop -semget - semget i:iii __semget semget - -# proper socket implementations: -accept - accept Ci:iBN __libc_accept __accept accept -bind - bind i:ipi __bind bind -connect - connect Ci:ipi __libc_connect __connect_internal __connect connect -getpeername - getpeername i:ipp __getpeername getpeername -getsockname - getsockname i:ipp __getsockname getsockname -getsockopt - getsockopt i:iiiBN __getsockopt getsockopt -listen - listen i:ii __listen listen -recv - recv Ci:ibni __libc_recv __recv recv -recvfrom - recvfrom Ci:ibniBN __libc_recvfrom __recvfrom recvfrom -recvmsg - recvmsg Ci:ipi __libc_recvmsg __recvmsg recvmsg -send - send Ci:ibni __libc_send __send send -sendmsg - sendmsg Ci:ipi __libc_sendmsg __sendmsg sendmsg -sendto - sendto Ci:ibnibn __libc_sendto __sendto sendto -setsockopt - setsockopt i:iiibn __setsockopt setsockopt -shutdown - shutdown i:ii __shutdown shutdown -socket - socket i:iii __socket socket -socketpair - socketpair i:iiif __socketpair socketpair diff --git a/sysdeps/unix/sysv/linux/arm/eabi/sysdep.h b/sysdeps/unix/sysv/linux/arm/eabi/sysdep.h deleted file mode 100644 index 408142c1af..0000000000 --- a/sysdeps/unix/sysv/linux/arm/eabi/sysdep.h +++ /dev/null @@ -1,199 +0,0 @@ -/* Copyright (C) 2005, 2006, 2007, 2009 - Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - Contributed by Daniel Jacobowitz <dan@codesourcery.com>, Oct 2005. - - 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_ARM_EABI_SYSDEP_H -#define _LINUX_ARM_EABI_SYSDEP_H 1 - -#include <arm/sysdep.h> - -#include <tls.h> - -#if __NR_SYSCALL_BASE != 0 -# error Kernel headers are too old -#endif - -/* Don't use stime, even if the kernel headers define it. We have - settimeofday, and some EABI kernels have removed stime. Similarly - use setitimer to implement alarm. */ -#undef __NR_stime -#undef __NR_alarm - -/* The ARM EABI user interface passes the syscall number in r7, instead - of in the swi. This is more efficient, because the kernel does not need - to fetch the swi from memory to find out the number; which can be painful - with separate I-cache and D-cache. Make sure to use 0 for the SWI - argument; otherwise the (optional) compatibility code for APCS binaries - may be invoked. */ - -#if defined(__thumb__) -/* We can not expose the use of r7 to the compiler. GCC (as - of 4.5) uses r7 as the hard frame pointer for Thumb - although - for Thumb-2 it isn't obviously a better choice than r11. - And GCC does not support asms that conflict with the frame - pointer. - - This would be easier if syscall numbers never exceeded 255, - but they do. For the moment the LOAD_ARGS_7 is sacrificed. - We can't use push/pop inside the asm because that breaks - unwinding (i.e. thread cancellation) for this frame. We can't - locally save and restore r7, because we do not know if this - function uses r7 or if it is our caller's r7; if it is our caller's, - then unwinding will fail higher up the stack. So we move the - syscall out of line and provide its own unwind information. */ -#undef LOAD_ARGS_7 -#undef INTERNAL_SYSCALL_RAW -#define INTERNAL_SYSCALL_RAW(name, err, nr, args...) \ - ({ \ - register int _a1 asm ("a1"); \ - int _nametmp = name; \ - LOAD_ARGS_##nr (args) \ - register int _name asm ("ip") = _nametmp; \ - asm volatile ("bl __libc_do_syscall" \ - : "=r" (_a1) \ - : "r" (_name) ASM_ARGS_##nr \ - : "memory", "lr"); \ - _a1; }) -#else /* ARM */ -#undef INTERNAL_SYSCALL_RAW -#define INTERNAL_SYSCALL_RAW(name, err, nr, args...) \ - ({ \ - register int _a1 asm ("r0"), _nr asm ("r7"); \ - LOAD_ARGS_##nr (args) \ - _nr = name; \ - asm volatile ("swi 0x0 @ syscall " #name \ - : "=r" (_a1) \ - : "r" (_nr) ASM_ARGS_##nr \ - : "memory"); \ - _a1; }) -#endif - -/* For EABI, non-constant syscalls are actually pretty easy... */ -#undef INTERNAL_SYSCALL_NCS -#define INTERNAL_SYSCALL_NCS(number, err, nr, args...) \ - INTERNAL_SYSCALL_RAW (number, err, nr, args) - -/* We must save and restore r7 (call-saved) for the syscall number. - We never make function calls from inside here (only potentially - signal handlers), so we do not bother with doubleword alignment. - - Just like the APCS syscall convention, the EABI syscall convention uses - r0 through r6 for up to seven syscall arguments. None are ever passed to - the kernel on the stack, although incoming arguments are on the stack for - syscalls with five or more arguments. - - The assembler will convert the literal pool load to a move for most - syscalls. */ - -#undef DO_CALL -#define DO_CALL(syscall_name, args) \ - DOARGS_##args; \ - ldr r7, =SYS_ify (syscall_name); \ - swi 0x0; \ - UNDOARGS_##args - -#undef DOARGS_0 -#define DOARGS_0 \ - .fnstart; \ - str r7, [sp, #-4]!; \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (r7, 0); \ - .save { r7 } -#undef DOARGS_1 -#define DOARGS_1 DOARGS_0 -#undef DOARGS_2 -#define DOARGS_2 DOARGS_0 -#undef DOARGS_3 -#define DOARGS_3 DOARGS_0 -#undef DOARGS_4 -#define DOARGS_4 DOARGS_0 -#undef DOARGS_5 -#define DOARGS_5 \ - .fnstart; \ - stmfd sp!, {r4, r7}; \ - cfi_adjust_cfa_offset (8); \ - cfi_rel_offset (r4, 0); \ - cfi_rel_offset (r7, 4); \ - .save { r4, r7 }; \ - ldr r4, [sp, #8] -#undef DOARGS_6 -#define DOARGS_6 \ - .fnstart; \ - mov ip, sp; \ - stmfd sp!, {r4, r5, r7}; \ - cfi_adjust_cfa_offset (12); \ - cfi_rel_offset (r4, 0); \ - cfi_rel_offset (r5, 4); \ - cfi_rel_offset (r7, 8); \ - .save { r4, r5, r7 }; \ - ldmia ip, {r4, r5} -#undef DOARGS_7 -#define DOARGS_7 \ - .fnstart; \ - mov ip, sp; \ - stmfd sp!, {r4, r5, r6, r7}; \ - cfi_adjust_cfa_offset (16); \ - cfi_rel_offset (r4, 0); \ - cfi_rel_offset (r5, 4); \ - cfi_rel_offset (r6, 8); \ - cfi_rel_offset (r7, 12); \ - .save { r4, r5, r6, r7 }; \ - ldmia ip, {r4, r5, r6} - -#undef UNDOARGS_0 -#define UNDOARGS_0 \ - ldr r7, [sp], #4; \ - cfi_adjust_cfa_offset (-4); \ - cfi_restore (r7); \ - .fnend -#undef UNDOARGS_1 -#define UNDOARGS_1 UNDOARGS_0 -#undef UNDOARGS_2 -#define UNDOARGS_2 UNDOARGS_0 -#undef UNDOARGS_3 -#define UNDOARGS_3 UNDOARGS_0 -#undef UNDOARGS_4 -#define UNDOARGS_4 UNDOARGS_0 -#undef UNDOARGS_5 -#define UNDOARGS_5 \ - ldmfd sp!, {r4, r7}; \ - cfi_adjust_cfa_offset (-8); \ - cfi_restore (r4); \ - cfi_restore (r7); \ - .fnend -#undef UNDOARGS_6 -#define UNDOARGS_6 \ - ldmfd sp!, {r4, r5, r7}; \ - cfi_adjust_cfa_offset (-12); \ - cfi_restore (r4); \ - cfi_restore (r5); \ - cfi_restore (r7); \ - .fnend -#undef UNDOARGS_7 -#define UNDOARGS_7 \ - ldmfd sp!, {r4, r5, r6, r7}; \ - cfi_adjust_cfa_offset (-16); \ - cfi_restore (r4); \ - cfi_restore (r5); \ - cfi_restore (r6); \ - cfi_restore (r7); \ - .fnend - -#endif /* _LINUX_ARM_EABI_SYSDEP_H */ diff --git a/sysdeps/unix/sysv/linux/arm/eabi/ftruncate64.c b/sysdeps/unix/sysv/linux/arm/ftruncate64.c index ad5eb186c2..ad5eb186c2 100644 --- a/sysdeps/unix/sysv/linux/arm/eabi/ftruncate64.c +++ b/sysdeps/unix/sysv/linux/arm/ftruncate64.c diff --git a/sysdeps/unix/sysv/linux/arm/eabi/getcontext.S b/sysdeps/unix/sysv/linux/arm/getcontext.S index 435eb12c8f..435eb12c8f 100644 --- a/sysdeps/unix/sysv/linux/arm/eabi/getcontext.S +++ b/sysdeps/unix/sysv/linux/arm/getcontext.S diff --git a/sysdeps/unix/sysv/linux/arm/eabi/internal_accept4.S b/sysdeps/unix/sysv/linux/arm/internal_accept4.S index eeb5f50a26..eeb5f50a26 100644 --- a/sysdeps/unix/sysv/linux/arm/eabi/internal_accept4.S +++ b/sysdeps/unix/sysv/linux/arm/internal_accept4.S diff --git a/sysdeps/unix/sysv/linux/arm/eabi/internal_recvmmsg.S b/sysdeps/unix/sysv/linux/arm/internal_recvmmsg.S index eeb5f50a26..eeb5f50a26 100644 --- a/sysdeps/unix/sysv/linux/arm/eabi/internal_recvmmsg.S +++ b/sysdeps/unix/sysv/linux/arm/internal_recvmmsg.S diff --git a/sysdeps/unix/sysv/linux/arm/eabi/internal_sendmmsg.S b/sysdeps/unix/sysv/linux/arm/internal_sendmmsg.S index eeb5f50a26..eeb5f50a26 100644 --- a/sysdeps/unix/sysv/linux/arm/eabi/internal_sendmmsg.S +++ b/sysdeps/unix/sysv/linux/arm/internal_sendmmsg.S diff --git a/sysdeps/unix/sysv/linux/arm/eabi/libc-do-syscall.S b/sysdeps/unix/sysv/linux/arm/libc-do-syscall.S index 0ec81734f8..0ec81734f8 100644 --- a/sysdeps/unix/sysv/linux/arm/eabi/libc-do-syscall.S +++ b/sysdeps/unix/sysv/linux/arm/libc-do-syscall.S diff --git a/sysdeps/unix/sysv/linux/arm/eabi/makecontext.c b/sysdeps/unix/sysv/linux/arm/makecontext.c index d6ae6f0d76..d6ae6f0d76 100644 --- a/sysdeps/unix/sysv/linux/arm/eabi/makecontext.c +++ b/sysdeps/unix/sysv/linux/arm/makecontext.c diff --git a/sysdeps/unix/sysv/linux/arm/eabi/mmap64.S b/sysdeps/unix/sysv/linux/arm/mmap64.S index be4dd52de4..be4dd52de4 100644 --- a/sysdeps/unix/sysv/linux/arm/eabi/mmap64.S +++ b/sysdeps/unix/sysv/linux/arm/mmap64.S diff --git a/sysdeps/unix/sysv/linux/arm/eabi/msgctl.c b/sysdeps/unix/sysv/linux/arm/msgctl.c index 38aedadf49..38aedadf49 100644 --- a/sysdeps/unix/sysv/linux/arm/eabi/msgctl.c +++ b/sysdeps/unix/sysv/linux/arm/msgctl.c diff --git a/sysdeps/unix/sysv/linux/arm/eabi/nptl/Makefile b/sysdeps/unix/sysv/linux/arm/nptl/Makefile index ef8076cf3f..ef8076cf3f 100644 --- a/sysdeps/unix/sysv/linux/arm/eabi/nptl/Makefile +++ b/sysdeps/unix/sysv/linux/arm/nptl/Makefile diff --git a/sysdeps/unix/sysv/linux/arm/eabi/nptl/configure b/sysdeps/unix/sysv/linux/arm/nptl/configure index 518269913a..518269913a 100644 --- a/sysdeps/unix/sysv/linux/arm/eabi/nptl/configure +++ b/sysdeps/unix/sysv/linux/arm/nptl/configure diff --git a/sysdeps/unix/sysv/linux/arm/eabi/nptl/configure.in b/sysdeps/unix/sysv/linux/arm/nptl/configure.in index 22f6f4b8f2..22f6f4b8f2 100644 --- a/sysdeps/unix/sysv/linux/arm/eabi/nptl/configure.in +++ b/sysdeps/unix/sysv/linux/arm/nptl/configure.in diff --git a/sysdeps/unix/sysv/linux/arm/eabi/nptl/nptl-aeabi_unwind_cpp_pr1.c b/sysdeps/unix/sysv/linux/arm/nptl/nptl-aeabi_unwind_cpp_pr1.c index 7b83522437..7b83522437 100644 --- a/sysdeps/unix/sysv/linux/arm/eabi/nptl/nptl-aeabi_unwind_cpp_pr1.c +++ b/sysdeps/unix/sysv/linux/arm/nptl/nptl-aeabi_unwind_cpp_pr1.c diff --git a/sysdeps/unix/sysv/linux/arm/eabi/nptl/rt-aeabi_unwind_cpp_pr1.c b/sysdeps/unix/sysv/linux/arm/nptl/rt-aeabi_unwind_cpp_pr1.c index 7b83522437..7b83522437 100644 --- a/sysdeps/unix/sysv/linux/arm/eabi/nptl/rt-aeabi_unwind_cpp_pr1.c +++ b/sysdeps/unix/sysv/linux/arm/nptl/rt-aeabi_unwind_cpp_pr1.c diff --git a/sysdeps/unix/sysv/linux/arm/eabi/nptl/sysdep-cancel.h b/sysdeps/unix/sysv/linux/arm/nptl/sysdep-cancel.h index c26bec3dca..c26bec3dca 100644 --- a/sysdeps/unix/sysv/linux/arm/eabi/nptl/sysdep-cancel.h +++ b/sysdeps/unix/sysv/linux/arm/nptl/sysdep-cancel.h diff --git a/sysdeps/unix/sysv/linux/arm/eabi/nptl/unwind-forcedunwind.c b/sysdeps/unix/sysv/linux/arm/nptl/unwind-forcedunwind.c index 29e2c2b00b..29e2c2b00b 100644 --- a/sysdeps/unix/sysv/linux/arm/eabi/nptl/unwind-forcedunwind.c +++ b/sysdeps/unix/sysv/linux/arm/nptl/unwind-forcedunwind.c diff --git a/sysdeps/unix/sysv/linux/arm/eabi/nptl/unwind-resume.c b/sysdeps/unix/sysv/linux/arm/nptl/unwind-resume.c index 285b99b5ed..285b99b5ed 100644 --- a/sysdeps/unix/sysv/linux/arm/eabi/nptl/unwind-resume.c +++ b/sysdeps/unix/sysv/linux/arm/nptl/unwind-resume.c diff --git a/sysdeps/unix/sysv/linux/arm/eabi/nptl/unwind.h b/sysdeps/unix/sysv/linux/arm/nptl/unwind.h index 9b6bed8e3c..9b6bed8e3c 100644 --- a/sysdeps/unix/sysv/linux/arm/eabi/nptl/unwind.h +++ b/sysdeps/unix/sysv/linux/arm/nptl/unwind.h diff --git a/sysdeps/unix/sysv/linux/arm/eabi/oldgetrlimit.c b/sysdeps/unix/sysv/linux/arm/oldgetrlimit.c index 6e25b021ab..6e25b021ab 100644 --- a/sysdeps/unix/sysv/linux/arm/eabi/oldgetrlimit.c +++ b/sysdeps/unix/sysv/linux/arm/oldgetrlimit.c diff --git a/sysdeps/unix/sysv/linux/arm/eabi/oldsetrlimit.c b/sysdeps/unix/sysv/linux/arm/oldsetrlimit.c index 6e25b021ab..6e25b021ab 100644 --- a/sysdeps/unix/sysv/linux/arm/eabi/oldsetrlimit.c +++ b/sysdeps/unix/sysv/linux/arm/oldsetrlimit.c diff --git a/sysdeps/unix/sysv/linux/arm/eabi/pread.c b/sysdeps/unix/sysv/linux/arm/pread.c index 4efe349e93..4efe349e93 100644 --- a/sysdeps/unix/sysv/linux/arm/eabi/pread.c +++ b/sysdeps/unix/sysv/linux/arm/pread.c diff --git a/sysdeps/unix/sysv/linux/arm/eabi/pread64.c b/sysdeps/unix/sysv/linux/arm/pread64.c index 59bd9cfe0b..59bd9cfe0b 100644 --- a/sysdeps/unix/sysv/linux/arm/eabi/pread64.c +++ b/sysdeps/unix/sysv/linux/arm/pread64.c diff --git a/sysdeps/unix/sysv/linux/arm/eabi/pwrite.c b/sysdeps/unix/sysv/linux/arm/pwrite.c index 43788e5420..43788e5420 100644 --- a/sysdeps/unix/sysv/linux/arm/eabi/pwrite.c +++ b/sysdeps/unix/sysv/linux/arm/pwrite.c diff --git a/sysdeps/unix/sysv/linux/arm/eabi/pwrite64.c b/sysdeps/unix/sysv/linux/arm/pwrite64.c index c7bfdaf9f3..c7bfdaf9f3 100644 --- a/sysdeps/unix/sysv/linux/arm/eabi/pwrite64.c +++ b/sysdeps/unix/sysv/linux/arm/pwrite64.c diff --git a/sysdeps/unix/sysv/linux/arm/eabi/readahead.c b/sysdeps/unix/sysv/linux/arm/readahead.c index 2d15b09c4a..2d15b09c4a 100644 --- a/sysdeps/unix/sysv/linux/arm/eabi/readahead.c +++ b/sysdeps/unix/sysv/linux/arm/readahead.c diff --git a/sysdeps/unix/sysv/linux/arm/eabi/semctl.c b/sysdeps/unix/sysv/linux/arm/semctl.c index 145162909c..145162909c 100644 --- a/sysdeps/unix/sysv/linux/arm/eabi/semctl.c +++ b/sysdeps/unix/sysv/linux/arm/semctl.c diff --git a/sysdeps/unix/sysv/linux/arm/eabi/setcontext.S b/sysdeps/unix/sysv/linux/arm/setcontext.S index 78003f52dc..78003f52dc 100644 --- a/sysdeps/unix/sysv/linux/arm/eabi/setcontext.S +++ b/sysdeps/unix/sysv/linux/arm/setcontext.S diff --git a/sysdeps/unix/sysv/linux/arm/eabi/shmctl.c b/sysdeps/unix/sysv/linux/arm/shmctl.c index c121e99917..c121e99917 100644 --- a/sysdeps/unix/sysv/linux/arm/eabi/shmctl.c +++ b/sysdeps/unix/sysv/linux/arm/shmctl.c diff --git a/sysdeps/unix/sysv/linux/arm/eabi/sigrestorer.S b/sysdeps/unix/sysv/linux/arm/sigrestorer.S index b8ae839f5d..b8ae839f5d 100644 --- a/sysdeps/unix/sysv/linux/arm/eabi/sigrestorer.S +++ b/sysdeps/unix/sysv/linux/arm/sigrestorer.S diff --git a/sysdeps/unix/sysv/linux/arm/socket.S b/sysdeps/unix/sysv/linux/arm/socket.S deleted file mode 100644 index 5d238d3ed5..0000000000 --- a/sysdeps/unix/sysv/linux/arm/socket.S +++ /dev/null @@ -1,126 +0,0 @@ -/* Copyright (C) 1995, 1996, 1997, 1998, 2003, 2004, 2005 - 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-cancel.h> -#include <socketcall.h> - -#define P(a, b) P2(a, b) -#define P2(a, b) a##b - - .text -/* The socket-oriented system calls are handled unusally in Linux. - They are all gated through the single `socketcall' system call number. - `socketcall' takes two arguments: the first is the subcode, specifying - which socket function is being called; and the second is a pointer to - the arguments to the specific function. - - The .S files for the other calls just #define socket and #include this. */ - -#ifndef __socket -# ifndef NO_WEAK_ALIAS -# define __socket P(__,socket) -# else -# define __socket socket -# endif -#endif - -#define PUSHARGS_1 str a1, [sp, $-4]! -#define PUSHARGS_2 stmfd sp!, {a1, a2} -#define PUSHARGS_3 stmfd sp!, {a1, a2, a3} -#define PUSHARGS_4 stmfd sp!, {a1, a2, a3, a4} -#define PUSHARGS_5 stmfd sp!, {a1, a2, a3, a4} /* Caller has already pushed arg 5 */ -#define PUSHARGS_6 stmfd sp!, {a1, a2, a3, a4} - -#define POPARGS_1 add sp, sp, #4 -#define POPARGS_2 add sp, sp, #8 -#define POPARGS_3 add sp, sp, #12 -#define POPARGS_4 add sp, sp, #16 -#define POPARGS_5 add sp, sp, #16 -#define POPARGS_6 add sp, sp, #16 - -#ifndef NARGS -#define NARGS 3 /* If we were called with no wrapper, this is really socket() */ -#endif - -#if defined NEED_CANCELLATION && defined CENABLE - PSEUDO_PROLOGUE -#endif - -.globl __socket -ENTRY (__socket) - /* This code previously moved sp into ip and stored the args using - stmdb ip!, {a1-a4}. It did not modify sp, so the stack never had - to be restored after the syscall completed. It saved an - instruction and meant no stack cleanup work was required. - - This will not work in the case of a socket call being interrupted - by a signal. If the signal handler uses any stack the arguments - to socket will be trashed. The results of a restart of any - socket call are then unpredictable. */ - - /* Push args onto the stack. */ - P(PUSHARGS_,NARGS) - -#if defined NEED_CANCELLATION && defined CENABLE - SINGLE_THREAD_P - bne 1f -#endif - - /* Do the system call trap. */ - mov a1, $P(SOCKOP_,socket) - mov a2, sp - swi SYS_ify(socketcall) - - /* Pop args off the stack */ - P(POPARGS_,NARGS) - - /* r0 is < 0 if there was an error. */ - cmn r0, $124 - RETINSTR(cc, r14) - b PLTJMP(SYSCALL_ERROR) - -#if defined NEED_CANCELLATION && defined CENABLE -1: - str lr, [sp, #-4]! - CENABLE - mov ip, r0 - - mov r0, #P(SOCKOP_,socket) - add r1, sp, #4 - swi SYS_ify(socketcall) - - str r0, [sp, #-4]! - mov r0, ip - CDISABLE - ldr r0, [sp], #4 - ldr lr, [sp], #4 - - P(POPARGS_,NARGS) - - /* r0 is < 0 if there was an error. */ - cmn r0, $124 - RETINSTR(cc, r14) - b PLTJMP(SYSCALL_ERROR) -#endif - -PSEUDO_END (__socket) - -#ifndef NO_WEAK_ALIAS -weak_alias (__socket, socket) -#endif diff --git a/sysdeps/unix/sysv/linux/arm/eabi/swapcontext.S b/sysdeps/unix/sysv/linux/arm/swapcontext.S index 09492d0000..09492d0000 100644 --- a/sysdeps/unix/sysv/linux/arm/eabi/swapcontext.S +++ b/sysdeps/unix/sysv/linux/arm/swapcontext.S diff --git a/sysdeps/unix/sysv/linux/arm/eabi/syscall.S b/sysdeps/unix/sysv/linux/arm/syscall.S index 3faf919d85..3faf919d85 100644 --- a/sysdeps/unix/sysv/linux/arm/eabi/syscall.S +++ b/sysdeps/unix/sysv/linux/arm/syscall.S diff --git a/sysdeps/unix/sysv/linux/arm/syscalls.list b/sysdeps/unix/sysv/linux/arm/syscalls.list index 820602b791..b8852d9406 100644 --- a/sysdeps/unix/sysv/linux/arm/syscalls.list +++ b/sysdeps/unix/sysv/linux/arm/syscalls.list @@ -1,9 +1,36 @@ # File name Caller Syscall name # args Strong name Weak names -syscall - syscall 7 syscall -oldgetrlimit EXTRA getrlimit i:ip __old_getrlimit getrlimit@GLIBC_2.0 -oldsetrlimit EXTRA setrlimit i:ip __old_setrlimit setrlimit@GLIBC_2.0 - prlimit64 EXTRA prlimit64 i:iipp prlimit64 fanotify_mark EXTRA fanotify_mark i:iiiiis fanotify_mark + +# Semaphore and shm system calls. msgctl, shmctl, and semctl have C +# wrappers (to set __IPC_64). +msgget - msgget i:ii __msgget msgget +msgrcv - msgrcv Ci:ibnii __msgrcv msgrcv +msgsnd - msgsnd Ci:ibni __msgsnd msgsnd +shmat - shmat i:ipi __shmat shmat +shmdt - shmdt i:s __shmdt shmdt +shmget - shmget i:iii __shmget shmget +semop - semop i:ipi __semop semop +semtimedop - semtimedop i:ipip semtimedop +semget - semget i:iii __semget semget + +# proper socket implementations: +accept - accept Ci:iBN __libc_accept __accept accept +bind - bind i:ipi __bind bind +connect - connect Ci:ipi __libc_connect __connect_internal __connect connect +getpeername - getpeername i:ipp __getpeername getpeername +getsockname - getsockname i:ipp __getsockname getsockname +getsockopt - getsockopt i:iiiBN __getsockopt getsockopt +listen - listen i:ii __listen listen +recv - recv Ci:ibni __libc_recv __recv recv +recvfrom - recvfrom Ci:ibniBN __libc_recvfrom __recvfrom recvfrom +recvmsg - recvmsg Ci:ipi __libc_recvmsg __recvmsg recvmsg +send - send Ci:ibni __libc_send __send send +sendmsg - sendmsg Ci:ipi __libc_sendmsg __sendmsg sendmsg +sendto - sendto Ci:ibnibn __libc_sendto __sendto sendto +setsockopt - setsockopt i:iiibn __setsockopt setsockopt +shutdown - shutdown i:ii __shutdown shutdown +socket - socket i:iii __socket socket +socketpair - socketpair i:iiif __socketpair socketpair diff --git a/sysdeps/unix/sysv/linux/arm/sysdep.h b/sysdeps/unix/sysv/linux/arm/sysdep.h index 4d08ea9e4e..be67c211d7 100644 --- a/sysdeps/unix/sysv/linux/arm/sysdep.h +++ b/sysdeps/unix/sysv/linux/arm/sysdep.h @@ -1,5 +1,4 @@ -/* Copyright (C) 1992, 93, 1995-2000, 2002, 2003, 2005, 2006, 2009 - Free Software Foundation, Inc. +/* Copyright (C) 1992-2012 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>, August 1995. ARM changes by Philip Blundell, <pjb27@cam.ac.uk>, May 1997. @@ -29,6 +28,16 @@ #include <tls.h> +#if __NR_SYSCALL_BASE != 0 +# error Kernel headers are too old +#endif + +/* Don't use stime, even if the kernel headers define it. We have + settimeofday, and some EABI kernels have removed stime. Similarly + use setitimer to implement alarm. */ +#undef __NR_stime +#undef __NR_alarm + /* In order to get __set_errno() definition in INLINE_SYSCALL. */ #ifndef __ASSEMBLER__ #include <errno.h> @@ -163,8 +172,14 @@ __local_syscall_error: \ # define SYSCALL_ERROR __syscall_error #endif +/* The ARM EABI user interface passes the syscall number in r7, instead + of in the swi. This is more efficient, because the kernel does not need + to fetch the swi from memory to find out the number; which can be painful + with separate I-cache and D-cache. Make sure to use 0 for the SWI + argument; otherwise the (optional) compatibility code for APCS binaries + may be invoked. */ + /* Linux takes system call args in registers: - syscall number in the SWI instruction arg 1 r0 arg 2 r1 arg 3 r2 @@ -190,58 +205,111 @@ __local_syscall_error: \ */ +/* We must save and restore r7 (call-saved) for the syscall number. + We never make function calls from inside here (only potentially + signal handlers), so we do not bother with doubleword alignment. + + Just like the APCS syscall convention, the EABI syscall convention uses + r0 through r6 for up to seven syscall arguments. None are ever passed to + the kernel on the stack, although incoming arguments are on the stack for + syscalls with five or more arguments. + + The assembler will convert the literal pool load to a move for most + syscalls. */ + #undef DO_CALL #define DO_CALL(syscall_name, args) \ DOARGS_##args; \ - swi SYS_ify (syscall_name); \ + ldr r7, =SYS_ify (syscall_name); \ + swi 0x0; \ UNDOARGS_##args -#define DOARGS_0 /* nothing */ -#define DOARGS_1 /* nothing */ -#define DOARGS_2 /* nothing */ -#define DOARGS_3 /* nothing */ -#define DOARGS_4 /* nothing */ -#define DOARGS_5 \ - str r4, [sp, $-4]!; \ +#undef DOARGS_0 +#define DOARGS_0 \ + .fnstart; \ + str r7, [sp, #-4]!; \ cfi_adjust_cfa_offset (4); \ + cfi_rel_offset (r7, 0); \ + .save { r7 } +#undef DOARGS_1 +#define DOARGS_1 DOARGS_0 +#undef DOARGS_2 +#define DOARGS_2 DOARGS_0 +#undef DOARGS_3 +#define DOARGS_3 DOARGS_0 +#undef DOARGS_4 +#define DOARGS_4 DOARGS_0 +#undef DOARGS_5 +#define DOARGS_5 \ + .fnstart; \ + stmfd sp!, {r4, r7}; \ + cfi_adjust_cfa_offset (8); \ cfi_rel_offset (r4, 0); \ - ldr r4, [sp, $4] + cfi_rel_offset (r7, 4); \ + .save { r4, r7 }; \ + ldr r4, [sp, #8] +#undef DOARGS_6 #define DOARGS_6 \ + .fnstart; \ mov ip, sp; \ - stmfd sp!, {r4, r5}; \ - cfi_adjust_cfa_offset (8); \ + stmfd sp!, {r4, r5, r7}; \ + cfi_adjust_cfa_offset (12); \ cfi_rel_offset (r4, 0); \ cfi_rel_offset (r5, 4); \ + cfi_rel_offset (r7, 8); \ + .save { r4, r5, r7 }; \ ldmia ip, {r4, r5} +#undef DOARGS_7 #define DOARGS_7 \ + .fnstart; \ mov ip, sp; \ - stmfd sp!, {r4, r5, r6}; \ - cfi_adjust_cfa_offset (12); \ + stmfd sp!, {r4, r5, r6, r7}; \ + cfi_adjust_cfa_offset (16); \ cfi_rel_offset (r4, 0); \ cfi_rel_offset (r5, 4); \ cfi_rel_offset (r6, 8); \ + cfi_rel_offset (r7, 12); \ + .save { r4, r5, r6, r7 }; \ ldmia ip, {r4, r5, r6} -#define UNDOARGS_0 /* nothing */ -#define UNDOARGS_1 /* nothing */ -#define UNDOARGS_2 /* nothing */ -#define UNDOARGS_3 /* nothing */ -#define UNDOARGS_4 /* nothing */ -#define UNDOARGS_5 \ - ldr r4, [sp], $4; \ +#undef UNDOARGS_0 +#define UNDOARGS_0 \ + ldr r7, [sp], #4; \ cfi_adjust_cfa_offset (-4); \ - cfi_restore (r4) -#define UNDOARGS_6 \ - ldmfd sp!, {r4, r5}; \ + cfi_restore (r7); \ + .fnend +#undef UNDOARGS_1 +#define UNDOARGS_1 UNDOARGS_0 +#undef UNDOARGS_2 +#define UNDOARGS_2 UNDOARGS_0 +#undef UNDOARGS_3 +#define UNDOARGS_3 UNDOARGS_0 +#undef UNDOARGS_4 +#define UNDOARGS_4 UNDOARGS_0 +#undef UNDOARGS_5 +#define UNDOARGS_5 \ + ldmfd sp!, {r4, r7}; \ cfi_adjust_cfa_offset (-8); \ cfi_restore (r4); \ - cfi_restore (r5) -#define UNDOARGS_7 \ - ldmfd sp!, {r4, r5, r6}; \ + cfi_restore (r7); \ + .fnend +#undef UNDOARGS_6 +#define UNDOARGS_6 \ + ldmfd sp!, {r4, r5, r7}; \ cfi_adjust_cfa_offset (-12); \ cfi_restore (r4); \ cfi_restore (r5); \ - cfi_restore (r6) + cfi_restore (r7); \ + .fnend +#undef UNDOARGS_7 +#define UNDOARGS_7 \ + ldmfd sp!, {r4, r5, r6, r7}; \ + cfi_adjust_cfa_offset (-16); \ + cfi_restore (r4); \ + cfi_restore (r5); \ + cfi_restore (r6); \ + cfi_restore (r7); \ + .fnend #else /* not __ASSEMBLER__ */ @@ -260,19 +328,46 @@ __local_syscall_error: \ #undef INTERNAL_SYSCALL_DECL #define INTERNAL_SYSCALL_DECL(err) do { } while (0) -#undef INTERNAL_SYSCALL_RAW -#define INTERNAL_SYSCALL_RAW(name, err, nr, args...) \ - ({ unsigned int _sys_result; \ - { \ - register int _a1 asm ("a1"); \ +#if defined(__thumb__) +/* We can not expose the use of r7 to the compiler. GCC (as + of 4.5) uses r7 as the hard frame pointer for Thumb - although + for Thumb-2 it isn't obviously a better choice than r11. + And GCC does not support asms that conflict with the frame + pointer. + + This would be easier if syscall numbers never exceeded 255, + but they do. For the moment the LOAD_ARGS_7 is sacrificed. + We can't use push/pop inside the asm because that breaks + unwinding (i.e. thread cancellation) for this frame. We can't + locally save and restore r7, because we do not know if this + function uses r7 or if it is our caller's r7; if it is our caller's, + then unwinding will fail higher up the stack. So we move the + syscall out of line and provide its own unwind information. */ +# undef INTERNAL_SYSCALL_RAW +# define INTERNAL_SYSCALL_RAW(name, err, nr, args...) \ + ({ \ + register int _a1 asm ("a1"); \ + int _nametmp = name; \ + LOAD_ARGS_##nr (args) \ + register int _name asm ("ip") = _nametmp; \ + asm volatile ("bl __libc_do_syscall" \ + : "=r" (_a1) \ + : "r" (_name) ASM_ARGS_##nr \ + : "memory", "lr"); \ + _a1; }) +#else /* ARM */ +# undef INTERNAL_SYSCALL_RAW +# define INTERNAL_SYSCALL_RAW(name, err, nr, args...) \ + ({ \ + register int _a1 asm ("r0"), _nr asm ("r7"); \ LOAD_ARGS_##nr (args) \ - asm volatile ("swi %1 @ syscall " #name \ + _nr = name; \ + asm volatile ("swi 0x0 @ syscall " #name \ : "=r" (_a1) \ - : "i" (name) ASM_ARGS_##nr \ + : "r" (_nr) ASM_ARGS_##nr \ : "memory"); \ - _sys_result = _a1; \ - } \ - (int) _sys_result; }) + _a1; }) +#endif #undef INTERNAL_SYSCALL #define INTERNAL_SYSCALL(name, err, nr, args...) \ @@ -321,29 +416,18 @@ __local_syscall_error: \ LOAD_ARGS_5 (a1, a2, a3, a4, a5) \ register int _v2 asm ("v2") = _v2tmp; #define ASM_ARGS_6 ASM_ARGS_5, "r" (_v2) -#define LOAD_ARGS_7(a1, a2, a3, a4, a5, a6, a7) \ - int _v3tmp = (int) (a7); \ - LOAD_ARGS_6 (a1, a2, a3, a4, a5, a6) \ +#ifndef __thumb__ +# define LOAD_ARGS_7(a1, a2, a3, a4, a5, a6, a7) \ + int _v3tmp = (int) (a7); \ + LOAD_ARGS_6 (a1, a2, a3, a4, a5, a6) \ register int _v3 asm ("v3") = _v3tmp; -#define ASM_ARGS_7 ASM_ARGS_6, "r" (_v3) - -/* We can't implement non-constant syscalls directly since the syscall - number is normally encoded in the instruction. So use SYS_syscall. */ -#define INTERNAL_SYSCALL_NCS(number, err, nr, args...) \ - INTERNAL_SYSCALL_NCS_##nr (number, err, args) - -#define INTERNAL_SYSCALL_NCS_0(number, err, args...) \ - INTERNAL_SYSCALL (syscall, err, 1, number, args) -#define INTERNAL_SYSCALL_NCS_1(number, err, args...) \ - INTERNAL_SYSCALL (syscall, err, 2, number, args) -#define INTERNAL_SYSCALL_NCS_2(number, err, args...) \ - INTERNAL_SYSCALL (syscall, err, 3, number, args) -#define INTERNAL_SYSCALL_NCS_3(number, err, args...) \ - INTERNAL_SYSCALL (syscall, err, 4, number, args) -#define INTERNAL_SYSCALL_NCS_4(number, err, args...) \ - INTERNAL_SYSCALL (syscall, err, 5, number, args) -#define INTERNAL_SYSCALL_NCS_5(number, err, args...) \ - INTERNAL_SYSCALL (syscall, err, 6, number, args) +# define ASM_ARGS_7 ASM_ARGS_6, "r" (_v3) +#endif + +/* For EABI, non-constant syscalls are actually pretty easy... */ +#undef INTERNAL_SYSCALL_NCS +#define INTERNAL_SYSCALL_NCS(number, err, nr, args...) \ + INTERNAL_SYSCALL_RAW (number, err, nr, args) #endif /* __ASSEMBLER__ */ diff --git a/sysdeps/unix/sysv/linux/arm/eabi/truncate64.c b/sysdeps/unix/sysv/linux/arm/truncate64.c index 409bf19333..409bf19333 100644 --- a/sysdeps/unix/sysv/linux/arm/eabi/truncate64.c +++ b/sysdeps/unix/sysv/linux/arm/truncate64.c diff --git a/sysdeps/unix/sysv/linux/arm/eabi/umount.c b/sysdeps/unix/sysv/linux/arm/umount.c index d9d671f88d..d9d671f88d 100644 --- a/sysdeps/unix/sysv/linux/arm/eabi/umount.c +++ b/sysdeps/unix/sysv/linux/arm/umount.c diff --git a/sysdeps/unix/sysv/linux/mips/mips32/readahead.c b/sysdeps/unix/sysv/linux/mips/mips32/readahead.c index b5b967ce96..80170c3e8a 100644 --- a/sysdeps/unix/sysv/linux/mips/mips32/readahead.c +++ b/sysdeps/unix/sysv/linux/mips/mips32/readahead.c @@ -1 +1 @@ -#include <sysdeps/unix/sysv/linux/arm/eabi/readahead.c> +#include <sysdeps/unix/sysv/linux/arm/readahead.c> |