1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
From b25c5a9f89922554e1221dab761e1eb583113953 Mon Sep 17 00:00:00 2001
From: Douglas Katzman <dougk@google.com>
Date: Thu, 4 Sep 2025 13:28:15 -0400
Subject: [PATCH 1/2] Change asm to avoid 'ld' error making libsbcl.so on linux
Fixes lp#2122059
---
src/runtime/arm64-assem.S | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/src/runtime/arm64-assem.S b/src/runtime/arm64-assem.S
index 95e0bfc89..b708f4ca0 100644
--- a/src/runtime/arm64-assem.S
+++ b/src/runtime/arm64-assem.S
@@ -235,9 +235,15 @@ no_args:
// load CARDTABLE-TN. reg_NAME macros aren't autogenerated for native asm code
// and it hardly seems worth #defining it to use in one assembly statement.
+#ifdef LISP_FEATURE_LINUX
+ adrp x28, :got:gc_card_mark
+ ldr x28, [x28, #:got_lo12:gc_card_mark]
+ ldr x28, [x28]
+#else
adrp x28, PAGE(gc_card_mark)
add x28, x28, PAGELOW(gc_card_mark)
ldr x28, [x28]
+#endif
// Load the closure-fun (or simple-fun-self), in case we're
// trying to call a closure.
--
2.51.0
From 076ae8dfc67d23bda158666847c5f1b627d90778 Mon Sep 17 00:00:00 2001
From: Stas Boukarev <stassats@gmail.com>
Date: Thu, 4 Sep 2025 20:39:24 +0300
Subject: [PATCH 2/2] Fix libsbcl.so on linux arm64
It got already fixed but this one has a macro.
---
src/runtime/GNUmakefile | 2 +-
src/runtime/arm64-assem.S | 43 ++++++++++++++++++++++-----------------
2 files changed, 25 insertions(+), 20 deletions(-)
diff --git a/src/runtime/GNUmakefile b/src/runtime/GNUmakefile
index cb34b5586..3a63d1c67 100644
--- a/src/runtime/GNUmakefile
+++ b/src/runtime/GNUmakefile
@@ -138,7 +138,7 @@ libsbcl.so: $(PIC_OBJS)
%.pic.o: %.c
$(CC) -fPIC -c $(CPPFLAGS) $(filter-out -fno-pie,$(CFLAGS)) $< -o $@
%.pic.o: %.S # (-fPIC doesn't affect hand-written assembly source)
- $(CC) -c $(CPPFLAGS) $(CFLAGS) $< -o $@
+ $(CC) -c $(CPPFLAGS) $(CFLAGS) $< -o $@ -DLIBSBCL
SHRINKWRAP_DEPS = ../../output/sbcl.core ../../tools-for-build/elftool.lisp
shrinkwrap-sbcl.s shrinkwrap-sbcl-core.o: $(SHRINKWRAP_DEPS)
diff --git a/src/runtime/arm64-assem.S b/src/runtime/arm64-assem.S
index b708f4ca0..1794fc60e 100644
--- a/src/runtime/arm64-assem.S
+++ b/src/runtime/arm64-assem.S
@@ -13,24 +13,37 @@
#endif
-#ifdef LISP_FEATURE_DARWIN
-#define GNAME(var) _##var
-#define PAGE(var) _##var@PAGE
-#define PAGELOW(var) _##var@PAGEOFF
-#else
-#define GNAME(var) var
-#define PAGE(var) var
-#define PAGELOW(var) #:lo12:##var
-#endif
-
#ifdef LISP_FEATURE_DARWIN
#define TYPE(name)
#define SIZE(name)
+#define GNAME(var) _##var
+
+.macro LOAD_GNAME, dest, symbol
+ adrp \dest, _\symbol@PAGE
+ ldr \dest, [\dest, _\symbol@PAGEOFF]
+.endm
+
#else
+
#define TYPE(name) .type name,%function
#define SIZE(name) .size name,.-name
+#define GNAME(var) var
+
+#ifdef LIBSBCL
+.macro LOAD_GNAME, dest, symbol
+ adrp \dest, :got:\symbol
+ ldr \dest, [\dest, #:got_lo12:\symbol]
+ ldr \dest, [\dest]
+.endm
+#else
+.macro LOAD_GNAME, dest, symbol
+ adrp \dest, \symbol
+ ldr \dest, [\dest, #:lo12:\symbol]
+.endm
+#endif
#endif
+
#ifdef LISP_FEATURE_SB_THREAD
.macro ENTER_PA
str reg_wNULL,[reg_THREAD,THREAD_PSEUDO_ATOMIC_BITS_OFFSET]
@@ -235,15 +248,7 @@ no_args:
// load CARDTABLE-TN. reg_NAME macros aren't autogenerated for native asm code
// and it hardly seems worth #defining it to use in one assembly statement.
-#ifdef LISP_FEATURE_LINUX
- adrp x28, :got:gc_card_mark
- ldr x28, [x28, #:got_lo12:gc_card_mark]
- ldr x28, [x28]
-#else
- adrp x28, PAGE(gc_card_mark)
- add x28, x28, PAGELOW(gc_card_mark)
- ldr x28, [x28]
-#endif
+ LOAD_GNAME x28, gc_card_mark
// Load the closure-fun (or simple-fun-self), in case we're
// trying to call a closure.
--
2.51.0
|