summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGHC GitLab CI <ghc-ci@gitlab-haskell.org>2021-03-02 02:53:09 +0000
committerCheng Shao <cheng.shao@tweag.io>2021-10-28 17:28:18 +0000
commit43dbf1c3ec7dfdf1f5a3c0dd6d0f764b8307bacd (patch)
tree2edb7dd55c7158323492935e33a072057a176156
parentbfec18be2f8fe5c28403d9ee5657b8019229be12 (diff)
downloadhaskell-43dbf1c3ec7dfdf1f5a3c0dd6d0f764b8307bacd.tar.gz
rts/linker: Resolve __fini_array_* symbols to NULL
If the __fini_array_{start,end} symbols are not defined (e.g. as is often the case when linking against musl) then resolve them to NULL. (cherry picked from commit fcd970b56853350c2de330decb5c2658fcf6e7f8)
-rw-r--r--rts/Linker.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/rts/Linker.c b/rts/Linker.c
index d959cffef5..55d1e3d186 100644
--- a/rts/Linker.c
+++ b/rts/Linker.c
@@ -908,6 +908,10 @@ SymbolAddr* lookupDependentSymbol (SymbolName* lbl, ObjectCode *dependent)
return NULL;
# endif
} else {
+ static void *RTS_NO_FINI = NULL;
+ if (strcmp(lbl, "__fini_array_end") == 0) { return (SymbolAddr *) &RTS_NO_FINI; }
+ if (strcmp(lbl, "__fini_array_start") == 0) { return (SymbolAddr *) &RTS_NO_FINI; }
+
if (dependent) {
// Add dependent as symbol's owner's dependency
ObjectCode *owner = pinfo->owner;