|
@@ -1284,7 +1284,10 @@ void * stack_before_call __attribute_unused = NULL;
|
|
|
|
|
|
#define CALL_ENTRY(l, cookies) \
|
|
|
({ long ret; \
|
|
|
- __asm__ volatile("movq %%rsp, stack_before_call(%%rip)\r\n" \
|
|
|
+ __asm__ volatile( \
|
|
|
+ "pushq $0\r\n" \
|
|
|
+ "popfq\r\n" \
|
|
|
+ "movq %%rsp, stack_before_call(%%rip)\r\n" \
|
|
|
"leaq 1f(%%rip), %%rdx\r\n" \
|
|
|
"movq %2, %%rsp\r\n" \
|
|
|
"jmp *%1\r\n" \
|
|
@@ -1292,7 +1295,7 @@ void * stack_before_call __attribute_unused = NULL;
|
|
|
\
|
|
|
: "=a"(ret) : "a"(l->l_entry), "b"(cookies) \
|
|
|
: "rcx", "rdx", "rdi", "rsi", "r8", "r9", \
|
|
|
- "r10", "r11", "memory"); \
|
|
|
+ "r10", "r11", "memory", "cc"); \
|
|
|
ret; })
|
|
|
#else
|
|
|
# error "unsupported architecture"
|