From b25c5a9f89922554e1221dab761e1eb583113953 Mon Sep 17 00:00:00 2001 From: Douglas Katzman 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 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