[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