@@ -89,7 +89,7 @@ ENTRY(____longjmp_chk)
xorl %edi, %edi
lea -sizeSS(%rsp), %RSI_LP
movl $__NR_sigaltstack, %eax
- syscall
+ SYSCALL_INST
/* Without working sigaltstack we cannot perform the test. */
testl %eax, %eax
jne .Lok2
@@ -52,7 +52,7 @@ ENTRY(__push___start_context)
movl $ARCH_CET_ALLOC_SHSTK, %edi
movl $__NR_arch_prctl, %eax
/* The new shadow stack base is returned in __ssp[1]. */
- syscall
+ SYSCALL_INST
testq %rax, %rax
jne L(hlt) /* This should never happen. */
@@ -98,7 +98,7 @@ ENTRY(__pthread_disable_asynccancel)
xorq %r10, %r10
addq $CANCELHANDLING, %rdi
LOAD_PRIVATE_FUTEX_WAIT (%esi)
- syscall
+ SYSCALL_INST
movl %fs:CANCELHANDLING, %eax
jmp 3b
END(__pthread_disable_asynccancel)
@@ -73,7 +73,7 @@ ENTRY (__clone)
/* End FDE now, because in the child the unwind info will be
wrong. */
cfi_endproc;
- syscall
+ SYSCALL_INST
testq %rax,%rax
jl SYSCALL_ERROR_LABEL
@@ -96,7 +96,7 @@ L(thread_start):
/* Call exit with return value from function call. */
movq %rax, %rdi
movl $SYS_ify(exit), %eax
- syscall
+ SYSCALL_INST
cfi_endproc;
cfi_startproc;
@@ -73,7 +73,7 @@ ENTRY(__getcontext)
mov %RSP_LP, %RSI_LP
movl $ARCH_CET_STATUS, %edi
movl $__NR_arch_prctl, %eax
- syscall
+ SYSCALL_INST
testq %rax, %rax
jz L(continue_no_err)
@@ -125,7 +125,7 @@ L(no_shstk):
#endif
movl $_NSIG8,%r10d
movl $__NR_rt_sigprocmask, %eax
- syscall
+ SYSCALL_INST
cmpq $-4095, %rax /* Check %rax for error. */
jae SYSCALL_ERROR_LABEL /* Jump to error handler if error. */
@@ -44,7 +44,7 @@ ENTRY(__setcontext)
movl $SIG_SETMASK, %edi
movl $_NSIG8,%r10d
movl $__NR_rt_sigprocmask, %eax
- syscall
+ SYSCALL_INST
/* Pop the pointer into RDX. The choice is arbitrary, but
leaving RDI and RSI available for use later can avoid
shuffling values. */
@@ -78,7 +78,7 @@ asm \
" .type __" #name ",@function\n" \
"__" #name ":\n" \
" movq $" #syscall ", %rax\n" \
- " syscall\n" \
+ SYSCALL_INST \
".LEND_" #name ":\n" \
".section .eh_frame,\"a\",@progbits\n" \
".LSTARTFRAME_" #name ":\n" \
@@ -77,7 +77,7 @@ ENTRY(__swapcontext)
movl $SIG_SETMASK, %edi
movl $_NSIG8,%r10d
movl $__NR_rt_sigprocmask, %eax
- syscall
+ SYSCALL_INST
cmpq $-4095, %rax /* Check %rax for error. */
jae SYSCALL_ERROR_LABEL /* Jump to error handler if error. */
@@ -117,7 +117,7 @@ ENTRY(__swapcontext)
mov %RSP_LP, %RSI_LP
movl $ARCH_CET_STATUS, %edi
movl $__NR_arch_prctl, %eax
- syscall
+ SYSCALL_INST
testq %rax, %rax
jz L(continue_no_err)
@@ -34,7 +34,7 @@ ENTRY (syscall)
movq %r8, %r10
movq %r9, %r8
movq 8(%rsp),%r9 /* arg6 is on the stack. */
- syscall /* Do the system call. */
+ SYSCALL_INST /* Do the system call. */
cmpq $-4095, %rax /* Check %rax for error. */
jae SYSCALL_ERROR_LABEL /* Jump to error handler if error. */
ret /* Return to caller. */
@@ -26,6 +26,12 @@
/* Defines RTLD_PRIVATE_ERRNO. */
#include <dl-sysdep.h>
+#ifdef __ASSEMBLER__
+# define SYSCALL_INST syscall
+#else
+# define SYSCALL_INST "syscall\n\t"
+#endif
+
/* 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
@@ -176,7 +182,7 @@
# define DO_CALL(syscall_name, args) \
DOARGS_##args \
movl $SYS_ify (syscall_name), %eax; \
- syscall;
+ SYSCALL_INST;
# define DOARGS_0 /* nothing */
# define DOARGS_1 /* nothing */
@@ -240,7 +246,7 @@
({ \
unsigned long int resultvar; \
asm volatile ( \
- "syscall\n\t" \
+ SYSCALL_INST \
: "=a" (resultvar) \
: "0" (number) \
: "memory", REGISTERS_CLOBBERED_BY_SYSCALL); \
@@ -254,7 +260,7 @@
TYPEFY (arg1, __arg1) = ARGIFY (arg1); \
register TYPEFY (arg1, _a1) asm ("rdi") = __arg1; \
asm volatile ( \
- "syscall\n\t" \
+ SYSCALL_INST \
: "=a" (resultvar) \
: "0" (number), "r" (_a1) \
: "memory", REGISTERS_CLOBBERED_BY_SYSCALL); \
@@ -270,7 +276,7 @@
register TYPEFY (arg2, _a2) asm ("rsi") = __arg2; \
register TYPEFY (arg1, _a1) asm ("rdi") = __arg1; \
asm volatile ( \
- "syscall\n\t" \
+ SYSCALL_INST \
: "=a" (resultvar) \
: "0" (number), "r" (_a1), "r" (_a2) \
: "memory", REGISTERS_CLOBBERED_BY_SYSCALL); \
@@ -288,7 +294,7 @@
register TYPEFY (arg2, _a2) asm ("rsi") = __arg2; \
register TYPEFY (arg1, _a1) asm ("rdi") = __arg1; \
asm volatile ( \
- "syscall\n\t" \
+ SYSCALL_INST \
: "=a" (resultvar) \
: "0" (number), "r" (_a1), "r" (_a2), "r" (_a3) \
: "memory", REGISTERS_CLOBBERED_BY_SYSCALL); \
@@ -308,7 +314,7 @@
register TYPEFY (arg2, _a2) asm ("rsi") = __arg2; \
register TYPEFY (arg1, _a1) asm ("rdi") = __arg1; \
asm volatile ( \
- "syscall\n\t" \
+ SYSCALL_INST \
: "=a" (resultvar) \
: "0" (number), "r" (_a1), "r" (_a2), "r" (_a3), "r" (_a4) \
: "memory", REGISTERS_CLOBBERED_BY_SYSCALL); \
@@ -330,7 +336,7 @@
register TYPEFY (arg2, _a2) asm ("rsi") = __arg2; \
register TYPEFY (arg1, _a1) asm ("rdi") = __arg1; \
asm volatile ( \
- "syscall\n\t" \
+ SYSCALL_INST \
: "=a" (resultvar) \
: "0" (number), "r" (_a1), "r" (_a2), "r" (_a3), "r" (_a4), \
"r" (_a5) \
@@ -355,7 +361,7 @@
register TYPEFY (arg2, _a2) asm ("rsi") = __arg2; \
register TYPEFY (arg1, _a1) asm ("rdi") = __arg1; \
asm volatile ( \
- "syscall\n\t" \
+ SYSCALL_INST \
: "=a" (resultvar) \
: "0" (number), "r" (_a1), "r" (_a2), "r" (_a3), "r" (_a4), \
"r" (_a5), "r" (_a6) \
@@ -51,7 +51,7 @@ ENTRY (__vfork)
/* Stuff the syscall number in RAX and enter into the kernel. */
movl $SYS_ify (vfork), %eax
- syscall
+ SYSCALL_INST
#if !SHSTK_ENABLED
/* Push back the return PC. */
@@ -26,7 +26,7 @@
TYPEFY (arg1, __arg1) = ARGIFY (arg1); \
register TYPEFY (arg1, _a1) asm ("rdi") = __arg1; \
asm volatile ( \
- "syscall\n\t" \
+ SYSCALL_INST \
: "=a" (resultvar) \
: "0" (number), "r" (_a1) \
: "memory", REGISTERS_CLOBBERED_BY_SYSCALL); \
@@ -161,7 +161,7 @@ _Static_assert (offsetof (tcbhead_t, __glibc_unused2) == 0x80,
_head->self = _thrdescr; \
\
/* It is a simple syscall to set the %fs value for the thread. */ \
- asm volatile ("syscall" \
+ asm volatile (SYSCALL_INST \
: "=a" (_result) \
: "0" ((unsigned long int) __NR_arch_prctl), \
"D" ((unsigned long int) ARCH_SET_FS), \