[PATCH v2 40/46] openat: Add openat syscall for NPTL

Markos Chandras markos.chandras at gmail.com
Mon Nov 26 14:24:22 UTC 2012


From: Markos Chandras <markos.chandras at imgtec.com>

Signed-off-by: Markos Chandras <markos.chandras at imgtec.com>
---
 libc/sysdeps/linux/common/Makefile.in              |  2 +-
 .../sysdeps/unix/sysv/linux/Makefile.commonarch    |  4 +++-
 libpthread/nptl/sysdeps/unix/sysv/linux/openat.S   | 22 ++++++++++++++++++++++
 3 files changed, 26 insertions(+), 2 deletions(-)
 create mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/openat.S

diff --git a/libc/sysdeps/linux/common/Makefile.in b/libc/sysdeps/linux/common/Makefile.in
index bbffd9a..3663e91 100644
--- a/libc/sysdeps/linux/common/Makefile.in
+++ b/libc/sysdeps/linux/common/Makefile.in
@@ -65,7 +65,7 @@ CSRC-$(if $(findstring yy,$(UCLIBC_LINUX_SPECIFIC)$(UCLIBC_HAS_LFS)),y) += \
 # NPTL needs these internally: madvise.c
 CSRC-$(findstring y,$(UCLIBC_LINUX_SPECIFIC)$(UCLIBC_HAS_THREADS_NATIVE)) += madvise.c
 ifeq ($(UCLIBC_HAS_THREADS_NATIVE),y)
-CSRC- += fork.c getpid.c raise.c open.c close.c read.c write.c
+CSRC- += fork.c getpid.c raise.c open.c openat.c close.c read.c write.c
 CSRC- += $(if $(findstring =arm=,=$(TARGET_ARCH)=),vfork.c)
 CSRC- += $(if $(findstring =x86_64=,=$(TARGET_ARCH)=),vfork.c)
 CSRC- += $(if $(findstring =mips=y=,=$(TARGET_ARCH)=$(CONFIG_MIPS_O32_ABI)=),waitpid.c)
diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/Makefile.commonarch b/libpthread/nptl/sysdeps/unix/sysv/linux/Makefile.commonarch
index 8a762b7..ab2d6c9 100644
--- a/libpthread/nptl/sysdeps/unix/sysv/linux/Makefile.commonarch
+++ b/libpthread/nptl/sysdeps/unix/sysv/linux/Makefile.commonarch
@@ -77,7 +77,7 @@ librt_linux_CSRC += mq_notify.c timer_create.c timer_delete.c		\
 	timer_settime.c
 
 # These provide both a cancellable and a not cancellable implementation
-libc_linux_SSRC = close.S open.S write.S read.S waitpid.S
+libc_linux_SSRC = close.S open.S openat.S write.S read.S waitpid.S
 libc_linux_SSRC := $(filter-out $(libc_linux_arch_SSRC-OMIT),$(libc_linux_SSRC))
 
 libpthread_linux_CSRC := $(filter-out $(notdir $(libpthread_linux_arch_OBJS:.o=.c)),$(libpthread_linux_CSRC))
@@ -145,6 +145,7 @@ CFLAGS-OMIT-libc-lowlevellock.c = -DNOT_IN_libc -DIS_IN_libpthread
 
 CFLAGS-OMIT-close.S = -DNOT_IN_libc -DIS_IN_libpthread
 CFLAGS-OMIT-open.S = -DNOT_IN_libc -DIS_IN_libpthread
+CFLAGS-OMIT-openat.S = -DNOT_IN_libc -DIS_IN_libpthread
 CFLAGS-OMIT-read.S = -DNOT_IN_libc -DIS_IN_libpthread
 CFLAGS-OMIT-write.S = -DNOT_IN_libc -DIS_IN_libpthread
 CFLAGS-OMIT-waitpid.S = -DNOT_IN_libc -DIS_IN_libpthread
@@ -158,6 +159,7 @@ CFLAGS-OMIT-timer_routines.c = -DIS_IN_libpthread
 CFLAGS-OMIT-timer_settime.c = -DIS_IN_libpthread
 
 ASFLAGS-open.S = -D_LIBC_REENTRANT
+ASFLAGS-openat.S = -D_LIBC_REENTRANT
 ASFLAGS-close.S = -D_LIBC_REENTRANT
 ASFLAGS-read.S = -D_LIBC_REENTRANT
 ASFLAGS-write.S = -D_LIBC_REENTRANT
diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/openat.S b/libpthread/nptl/sysdeps/unix/sysv/linux/openat.S
new file mode 100644
index 0000000..468154b
--- /dev/null
+++ b/libpthread/nptl/sysdeps/unix/sysv/linux/openat.S
@@ -0,0 +1,22 @@
+#include <sysdep-cancel.h>
+
+/*
+extern int __openat_nocancel (const char *, int, ...) attribute_hidden;
+*/
+#if !defined NOT_IN_libc || defined IS_IN_libpthread || defined IS_IN_librt
+
+#if defined(__NR_openat)
+PSEUDO (__libc_openat, openat, 4)
+ret
+PSEUDO_END(__libc_openat)
+
+libc_hidden_def (__openat_nocancel)
+libc_hidden_def (__libc_openat)
+weak_alias (__libc_openat, __openat)
+libc_hidden_weak (__openat)
+weak_alias (__libc_openat, openat)
+libc_hidden_weak (openat)
+
+#endif
+
+#endif
-- 
1.8.0




More information about the uClibc mailing list