summaryrefslogtreecommitdiff
path: root/gnu/packages/patches/sbcl-fix-arm64-shared-lib.patch
blob: 5aa654764eddb9e556578592afc77d3268b43dc7 (plain)
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