OSDN Git Service

x86_64: add new __NR_arch_prctl syscall
authorPavel Chupin <pavel.v.chupin@intel.com>
Wed, 12 Dec 2012 09:18:50 +0000 (13:18 +0400)
committerElliott Hughes <enh@google.com>
Tue, 1 Oct 2013 20:56:21 +0000 (13:56 -0700)
This is used to set/get TLS on x86_64. There's no public declaration
of this because it's not meant to be used outside the C library, like
glibc (though we don't currently have any visibility controls to ensure
this).

Change-Id: I5fc0a5e3ffc3f4cd597d92ee685ab19568ea18f7
Signed-off-by: Pavel Chupin <pavel.v.chupin@intel.com>
libc/SYSCALLS.TXT
libc/arch-x86_64/syscalls.mk
libc/arch-x86_64/syscalls/arch_prctl.S [new file with mode: 0644]

index bb014bc..6465de4 100644 (file)
@@ -94,6 +94,7 @@ int     chroot(const char*)  all
 # IMPORTANT: Even though <sys/prctl.h> declares prctl(int, ...), the syscall stub must take 6 arguments
 #            to match the kernel implementation.
 int     prctl(int option, unsigned int arg2, unsigned int arg3, unsigned int arg4, unsigned int arg5) all
+long    arch_prctl(int, unsigned long) x86_64
 int     capget(cap_user_header_t header, cap_user_data_t data) all
 int     capset(cap_user_header_t header, const cap_user_data_t data) all
 int     sigaltstack(const stack_t*, stack_t*) all
index 568f1e8..5a7a880 100644 (file)
@@ -41,6 +41,7 @@ syscall_src += arch-x86_64/syscalls/vfork.S
 syscall_src += arch-x86_64/syscalls/setregid.S
 syscall_src += arch-x86_64/syscalls/chroot.S
 syscall_src += arch-x86_64/syscalls/prctl.S
+syscall_src += arch-x86_64/syscalls/arch_prctl.S
 syscall_src += arch-x86_64/syscalls/capget.S
 syscall_src += arch-x86_64/syscalls/capset.S
 syscall_src += arch-x86_64/syscalls/sigaltstack.S
diff --git a/libc/arch-x86_64/syscalls/arch_prctl.S b/libc/arch-x86_64/syscalls/arch_prctl.S
new file mode 100644 (file)
index 0000000..eaf9494
--- /dev/null
@@ -0,0 +1,17 @@
+/* autogenerated by gensyscalls.py */
+#include <asm/unistd.h>
+#include <linux/err.h>
+#include <machine/asm.h>
+
+ENTRY(arch_prctl)
+    movl    $__NR_arch_prctl, %eax
+    syscall
+    cmpq    $-MAX_ERRNO, %rax
+    jb      1f
+    negl    %eax
+    movl    %eax, %edi
+    call    __set_errno
+    orq     $-1, %rax
+1:
+    ret
+END(arch_prctl)