summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndres Freund2022-09-01 18:49:36 +0000
committerAndres Freund2022-09-01 18:49:36 +0000
commite5484554ba90536aaff42db588a6397633713c43 (patch)
tree52158fff89e11285fee77dd45f6209ccaa6ce081
parenta1b9b14cc80327854ff667973096a230434a2386 (diff)
aix: when building with gcc, tell gcc we're building a shared library
Not passing -shared to gcc when building a shared library triggers linking to the wrong libgcc (libgcc.a instead of libgcc_s.a) and prevents emitting correct unwind information. It's somewhat surprising that this hasn't caused known problems so far. Doing so requires adding path to libgcc to libpath, or linking statically to libgcc - as the latter increases .so size substantially (for not entirely obvious reasons), shared linking seems preferrable. It likely is worth building executables with -shared-libgcc too, but I've not done that here. Discussion: https://postgr.es/m/[email protected]
-rw-r--r--src/makefiles/Makefile.aix11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/makefiles/Makefile.aix b/src/makefiles/Makefile.aix
index 4cf2cc52d45..9408c1e2913 100644
--- a/src/makefiles/Makefile.aix
+++ b/src/makefiles/Makefile.aix
@@ -8,10 +8,21 @@ AROPT = crs
# -blibpath must contain ALL directories where we should look for libraries
libpath := $(shell echo $(subst -L,:,$(filter -L/%,$(LDFLAGS))) | sed -e's/ //g'):/usr/lib:/lib
+# when building with gcc, need to make sure that libgcc can be found
+ifeq ($(GCC), yes)
+libpath := $(libpath):$(dir $(shell gcc -print-libgcc-file-name))
+endif
+
rpath = -Wl,-blibpath:'$(rpathdir)$(libpath)'
LDFLAGS_SL += -Wl,-bnoentry -Wl,-H512 -Wl,-bM:SRE
+# gcc needs to know it's building a shared lib, otherwise it'll not emit
+# correct code / link to the right support libraries
+ifeq ($(GCC), yes)
+LDFLAGS_SL += -shared
+endif
+
# env var name to use in place of LD_LIBRARY_PATH
ld_library_path_var = LIBPATH