Skip to content

Commit b18649a

Browse files
avoid clobber
1 parent 2dc9c1e commit b18649a

File tree

1 file changed

+10
-9
lines changed

1 file changed

+10
-9
lines changed

libc/src/setjmp/x86_64/setjmp.cpp

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
namespace LIBC_NAMESPACE_DECL {
1818

1919
LLVM_LIBC_FUNCTION(int, setjmp, (jmp_buf buf)) {
20+
long tmp;
2021
asm(R"(
2122
mov %%rbx, %[rbx]
2223
mov %%rbp, %[rbp]
@@ -25,16 +26,16 @@ LLVM_LIBC_FUNCTION(int, setjmp, (jmp_buf buf)) {
2526
mov %%r14, %[r14]
2627
mov %%r15, %[r15]
2728
28-
lea 8(%%rsp), %%rax
29-
mov %%rax, %[rsp]
29+
lea 8(%%rsp), %[tmp]
30+
mov %[tmp], %[rsp]
3031
31-
mov (%%rsp), %%rax
32-
mov %%rax, %[rip]
33-
)" ::[rbx] "m"(buf->rbx),
34-
[rbp] "m"(buf->rbp), [r12] "m"(buf->r12), [r13] "m"(buf->r13),
35-
[r14] "m"(buf->r14), [r15] "m"(buf->r15), [rsp] "m"(buf->rsp),
36-
[rip] "m"(buf->rip)
37-
: "rax");
32+
mov (%%rsp), %[tmp]
33+
mov %[tmp], %[rip]
34+
)"
35+
: [tmp] "=r"(tmp)
36+
: [rbx] "m"(buf->rbx), [rbp] "m"(buf->rbp), [r12] "m"(buf->r12),
37+
[r13] "m"(buf->r13), [r14] "m"(buf->r14), [r15] "m"(buf->r15),
38+
[rsp] "m"(buf->rsp), [rip] "m"(buf->rip));
3839
return 0;
3940
}
4041

0 commit comments

Comments
 (0)