diff options
Diffstat (limited to 'gnu/packages/patches/sbcl-fix-arm64-shared-lib.patch')
-rw-r--r-- | gnu/packages/patches/sbcl-fix-arm64-shared-lib.patch | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/gnu/packages/patches/sbcl-fix-arm64-shared-lib.patch b/gnu/packages/patches/sbcl-fix-arm64-shared-lib.patch new file mode 100644 index 0000000000..5aa654764e --- /dev/null +++ b/gnu/packages/patches/sbcl-fix-arm64-shared-lib.patch @@ -0,0 +1,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 + |