summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Chestnykh <dm.chestnykh@gmail.com>2024-02-11 09:29:54 +0300
committerWaldemar Brodkorb <wbx@openadk.org>2024-02-18 05:56:22 +0100
commited6a9513157f54894629d8dfa8890df0245505ec (patch)
tree2b990ec9cac83bdc3f5fb0b45e4cfe4a382b8888
parent750a3fc91dec0e522b5fac57a75a9fe0047648bf (diff)
Add extra `-shared` to link.so command.
While compiling OpenADK I discovered that there may be a case where UCLIBC_EXTRA_LDFLAGS contains `-fpie -pie`. Linker ignores `-shared` if `-pie` flag is passed after and produces an executable binary instead of shared object. This leads to linking failure because `ld-uClibc.so.1` becomes executable instead of shared object. `ld-uClibc.so.1` is used as one of the inputs when linking of libc.so.1 and linking proccess fails. To prevent this issue we need to pass extra `-shared` flag in `link.so` target command after all other flags to overwrite `-pie` effect. Signed-off-by: Dmitry Chestnykh <dm.chestnykh@gmail.com>
-rw-r--r--Makerules2
1 files changed, 1 insertions, 1 deletions
diff --git a/Makerules b/Makerules
index 1a7443c39..fe8a7916e 100644
--- a/Makerules
+++ b/Makerules
@@ -334,7 +334,7 @@ define link.so
-Wl,-soname=$(notdir $@).$(2) \
$(CFLAG_-nostdlib) $(CFLAG_-nostartfiles) \
-o $(dir $@)$(1) $(START_FILE-$(notdir $@)) \
- -Wl,--whole-archive $(firstword $^) -Wl,--no-whole-archive \
+ -Wl,--whole-archive $(firstword $^) -Wl,--no-whole-archive -shared \
$(LIBS-$(notdir $@)) $(LIBGCC) $(END_FILE-$(notdir $@))
$(Q)$(LN) -sf $(1) $@.$(2)
$(Q)$(LN) -sf $(1) $@