Skip to content

Commit 913e955

Browse files
use shared header for offsets
1 parent fa3e817 commit 913e955

File tree

3 files changed

+32
-18
lines changed

3 files changed

+32
-18
lines changed

libc/src/setjmp/x86_64/setjmp.S

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,14 @@
77
//===----------------------------------------------------------------------===//
88

99
#include "src/__support/assembly.h"
10+
#include "src/setjmp/x86_64/setjmp.h"
1011

1112
#define paste(ns) _ZN22 ## ns ## 6setjmpEP9__jmp_buf
1213
#define expand(x) paste(x)
1314
#define LIBC_NAMESPACE_setjump expand(LIBC_NAMESPACE)
1415
// aka _ZN22__llvm_libc_19_0_0_git6setjmpEP9__jmp_buf
1516
// aka __llvm_libc_19_0_0_git::setjmp(__jmp_buf*)
1617

17-
// Brittle! Changing the layout of __jmp_buf will break this!
18-
#define RBX_OFFSET 0
19-
#define RBP_OFFSET 8
20-
#define R12_OFFSET 16
21-
#define R13_OFFSET 24
22-
#define R14_OFFSET 32
23-
#define R15_OFFSET 40
24-
#define RSP_OFFSET 48
25-
#define RIP_OFFSET 56
26-
2718
.global setjump
2819
.global LIBC_NAMESPACE_setjump
2920

libc/src/setjmp/x86_64/setjmp.h

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
2+
// TODO: license block
3+
#ifndef LLVM_LIBC_SRC_SETJMP_X86_64_SETJMP_H
4+
#define LLVM_LIBC_SRC_SETJMP_X86_64_SETJMP_H
5+
6+
#ifdef __ASSEMBLER__
7+
#define UL(x) x
8+
#else
9+
#define UL(x) x##UL
10+
#endif
11+
12+
// Brittle! Changing the layout of __jmp_buf will break this!
13+
#define RBX_OFFSET UL(0)
14+
#define RBP_OFFSET UL(8)
15+
#define R12_OFFSET UL(16)
16+
#define R13_OFFSET UL(24)
17+
#define R14_OFFSET UL(32)
18+
#define R15_OFFSET UL(40)
19+
#define RSP_OFFSET UL(48)
20+
#define RIP_OFFSET UL(56)
21+
22+
#endif // LLVM_LIBC_SRC_SETJMP_X86_64_SETJMP_H

libc/test/include/setjmp_test.cpp

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,22 @@
88

99
#include "include/llvm-libc-macros/offsetof-macro.h"
1010
#include "include/llvm-libc-types/jmp_buf.h"
11+
#include "src/setjmp/x86_64/setjmp.h"
1112
#include "test/UnitTest/Test.h"
1213

1314
// If this test fails, then *_OFFSET macro definitions in
1415
// libc/src/setjmp/x86_64/setjmp.S need to be fixed. This is a simple change
1516
// detector.
1617
TEST(LlvmLibcSetjmpTest, JmpBufLayout) {
1718
#ifdef __x86_64__
18-
ASSERT_EQ(offsetof(__jmp_buf, rbx), 0UL);
19-
ASSERT_EQ(offsetof(__jmp_buf, rbp), 8UL);
20-
ASSERT_EQ(offsetof(__jmp_buf, r12), 16UL);
21-
ASSERT_EQ(offsetof(__jmp_buf, r13), 24UL);
22-
ASSERT_EQ(offsetof(__jmp_buf, r14), 32UL);
23-
ASSERT_EQ(offsetof(__jmp_buf, r15), 40UL);
24-
ASSERT_EQ(offsetof(__jmp_buf, rsp), 48UL);
25-
ASSERT_EQ(offsetof(__jmp_buf, rip), 56UL);
19+
ASSERT_EQ(offsetof(__jmp_buf, rbx), RBX_OFFSET);
20+
ASSERT_EQ(offsetof(__jmp_buf, rbp), RBP_OFFSET);
21+
ASSERT_EQ(offsetof(__jmp_buf, r12), R12_OFFSET);
22+
ASSERT_EQ(offsetof(__jmp_buf, r13), R13_OFFSET);
23+
ASSERT_EQ(offsetof(__jmp_buf, r14), R14_OFFSET);
24+
ASSERT_EQ(offsetof(__jmp_buf, r15), R15_OFFSET);
25+
ASSERT_EQ(offsetof(__jmp_buf, rsp), RSP_OFFSET);
26+
ASSERT_EQ(offsetof(__jmp_buf, rip), RIP_OFFSET);
2627
ASSERT_EQ(sizeof(__jmp_buf), 64UL);
2728
ASSERT_EQ(alignof(__jmp_buf), 8UL);
2829
#endif // __x86_64__

0 commit comments

Comments
 (0)