diff --git a/payloads/libpayload/Makefile.mk b/payloads/libpayload/Makefile.mk index 079fa325fe..8c6b28767c 100644 --- a/payloads/libpayload/Makefile.mk +++ b/payloads/libpayload/Makefile.mk @@ -110,6 +110,14 @@ includes-handler= \ $(obj)/libpayload.a: $(foreach class,$(libraries),$$($(class)-objs)) printf " AR $(subst $(CURDIR)/,,$(@))\n" printf "create $@\n$(foreach objc,$(filter-out %.a,$^),addmod $(objc)\n)$(foreach lib,$(filter %.a,$^),addlib $(lib)\n)save\nend\n" | $(AR) -M + for func in $$(nm $@ | awk '/ (w|W) / { print $$NF }'); do \ + if nm --no-weak --defined-only $@ | grep -Eq " $$func$$"; then \ + printf "\nERROR: Function '$$func' appears as both weak and strong symbol in libpayload.\n"; \ + printf " Weak symbol overrides don't work reliably from within the same library.\n\n"; \ + rm $@; \ + exit 1; \ + fi \ + done $(obj)/%.a: $$(%-objs) printf " AR $(subst $(CURDIR)/,,$(@))\n"