From 52e2cac8e07a10f3b99c8561a4aa1af651c8a2a7 Mon Sep 17 00:00:00 2001 From: Peter Kjellerstedt Date: Fri, 10 Oct 2025 21:01:11 +0200 Subject: [PATCH] net-snmp: Backport a patch to make sure $(LDFLAGS) is before any libs After commit 1997d3d6c43348c663f3295dac3a906ad38549a4 (net-snmp: Do not pass LDFLAGS to compiler), some linker flags, like "-Wl,--as-needed", appear too late on the linker command line. Backport a patch that corrects the order of the arguments given to the linker. Unfortunately, the patch is not enough. libtool reorders the arguments given to libtool --mode=link so that any lib dependencies appear before other linker arguments. Therefore it is needed to inject -Wl,--as-needed on the linker command line that libtool produces. Signed-off-by: Peter Kjellerstedt Signed-off-by: Khem Raj --- .../0001-Fix-LDFLAGS-vs-LIBS-ordering.patch | 252 ++++++++++++++++++ .../net-snmp/net-snmp_5.9.4.bb | 7 +- 2 files changed, 258 insertions(+), 1 deletion(-) create mode 100644 meta-networking/recipes-protocols/net-snmp/net-snmp/0001-Fix-LDFLAGS-vs-LIBS-ordering.patch diff --git a/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-Fix-LDFLAGS-vs-LIBS-ordering.patch b/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-Fix-LDFLAGS-vs-LIBS-ordering.patch new file mode 100644 index 0000000000..51a63538e4 --- /dev/null +++ b/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-Fix-LDFLAGS-vs-LIBS-ordering.patch @@ -0,0 +1,252 @@ +From 10883d754750865e42327826ee90d7eda3741dda Mon Sep 17 00:00:00 2001 +From: Sam James +Date: Fri, 2 Dec 2022 02:26:29 +0000 +Subject: [PATCH] Fix LDFLAGS vs LIBS ordering + +LDFLAGS must come before both LIBS & any listed objects in order +for certain valid LDFLAGS, like '-Wl,--as-needed' to work correctly +(otherwise it'll either take no effect or discard libraries when +they're needed). + +Gentoo has been carrying this patch for a while. + +Signed-off-by: Sam James +Upstream-Status: Backport [https://github.com/net-snmp/net-snmp/commit/72b47b9b41d2640ed4810297f2e26f5eb9d2fa31] +Signed-off-by: Peter Kjellerstedt +--- + Makefile.top | 4 ++-- + agent/Makefile.in | 16 ++++++------- + agent/helpers/Makefile.in | 2 +- + apps/Makefile.in | 46 ++++++++++++++++++------------------ + apps/snmpnetstat/Makefile.in | 2 +- + snmplib/Makefile.in | 4 ++-- + testing/Makefile.in | 8 +++---- + 7 files changed, 41 insertions(+), 41 deletions(-) + +diff --git a/Makefile.top b/Makefile.top +index 53e0392..5de5648 100644 +--- a/Makefile.top ++++ b/Makefile.top +@@ -86,11 +86,11 @@ LIBCURRENT = 42 + LIBAGE = 2 + LIBREVISION = 1 + +-LIB_LD_CMD = $(LIBTOOL) --mode=link $(LINKCC) $(CFLAGS) -rpath $(libdir) -version-info $(LIBCURRENT):$(LIBREVISION):$(LIBAGE) @LD_NO_UNDEFINED@ -o ++LIB_LD_CMD = $(LIBTOOL) --mode=link $(LINKCC) $(CFLAGS) $(LDFLAGS) -rpath $(libdir) -version-info $(LIBCURRENT):$(LIBREVISION):$(LIBAGE) @LD_NO_UNDEFINED@ -o + LIB_EXTENSION = la + LIB_VERSION = + LIB_LDCONFIG_CMD = echo "do not ldconfig\n" +-LINK = $(LIBTOOL) --mode=link $(LINKCC) ++LINK = $(LIBTOOL) --mode=link $(LINKCC) $(LDFLAGS) + # RANLIB = @RANLIB@ + RANLIB = : + +diff --git a/agent/Makefile.in b/agent/Makefile.in +index 44f8818..6008eb8 100644 +--- a/agent/Makefile.in ++++ b/agent/Makefile.in +@@ -288,26 +288,26 @@ all: agentlib subdirs miblib $(INSTALLBINPROGS) $(INSTALLSBINPROGS) + # build stuff targets + # + getkstat: getkstat.o +- $(CC) $(CFLAGS) -o $@ $? $(LIBS) ++ $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $? $(LIBS) + + getkstat.o: mibgroup/kernel_sunos5.c +- $(CC) $(CFLAGS) -o $@ -D_GETKSTAT_TEST -DDODEBUG -c $? ++ $(CC) $(CFLAGS) -o $@ -D_GETKSTAT_TEST -DDODEBUG -c $? + + getmibstat: getmibstat.o +- $(CC) $(CFLAGS) -o $@ $? $(LIBS) ++ $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $? $(LIBS) + + getmibstat.o: mibgroup/kernel_sunos5.c +- $(CC) $(CFLAGS) -o $@ -D_GETMIBSTAT_TEST -DDODEBUG -c $? ++ $(CC) $(CFLAGS) -o $@ -D_GETMIBSTAT_TEST -DDODEBUG -c $? + +-snmpd$(EXEEXT): ${LAGENTOBJS} $(USELIBS) $(AGENTLIB) $(HELPERLIB) $(MIBLIB) $(LIBTARG) +- $(LINK) $(CFLAGS) -o $@ ${LAGENTOBJS} ${LDFLAGS} ${OUR_AGENT_LIBS} ++snmpd$(EXEEXT): ${LAGENTOBJS} $(USELIBS) $(AGENTLIB) $(HELPERLIB) $(MIBLIB) $(LIBTARG) ++ $(LINK) $(CFLAGS) $(LDFLAGS) -o $@ ${LAGENTOBJS} ${OUR_AGENT_LIBS} + + libnetsnmpagent.$(LIB_EXTENSION)$(LIB_VERSION): ${LLIBAGENTOBJS} $(USELIBS) +- $(LIB_LD_CMD) $(AGENTLIB) ${LLIBAGENTOBJS} $(USELIBS) ${LAGENTLIBS} $(LDFLAGS) $(PERLLDOPTS_FOR_LIBS) @AGENTLIBS@ ++ $(LIB_LD_CMD) $(AGENTLIB) $(LDFLAGS) ${LLIBAGENTOBJS} $(USELIBS) ${LAGENTLIBS} $(PERLLDOPTS_FOR_LIBS) @AGENTLIBS@ + $(RANLIB) $(AGENTLIB) + + libnetsnmpmibs.$(LIB_EXTENSION)$(LIB_VERSION): ${LMIBOBJS} $(AGENTLIB) $(USELIBS) subdirs +- $(LIB_LD_CMD) $(MIBLIB) ${LMIBOBJS} $(AGENTLIB) $(USELIBS) $(LDFLAGS) ${LMIBLIBS} $(PERLLDOPTS_FOR_LIBS) @AGENTLIBS@ ++ $(LIB_LD_CMD) $(MIBLIB) $(LDFLAGS) ${LMIBOBJS} $(AGENTLIB) $(USELIBS) ${LMIBLIBS} $(PERLLDOPTS_FOR_LIBS) @AGENTLIBS@ + $(RANLIB) $(MIBLIB) + + agentlib: $(AGENTLIB) +diff --git a/agent/helpers/Makefile.in b/agent/helpers/Makefile.in +index 51f409d..05a9adc 100644 +--- a/agent/helpers/Makefile.in ++++ b/agent/helpers/Makefile.in +@@ -32,5 +32,5 @@ LOBJS = dummy.lo + all: standardall + + libnetsnmphelpers.$(LIB_EXTENSION)$(LIB_VERSION): $(LOBJS) +- $(LIB_LD_CMD) $@ $(LOBJS) $(LDFLAGS) ++ $(LIB_LD_CMD) $@ $(LDFLAGS) $(LOBJS) + $(RANLIB) $@ +diff --git a/apps/Makefile.in b/apps/Makefile.in +index 57b8524..b5b26f9 100644 +--- a/apps/Makefile.in ++++ b/apps/Makefile.in +@@ -161,37 +161,37 @@ OTHERUNINSTALL=snmpinformuninstall snmptrapdperluninstall \ + # build rules + # + snmpwalk$(EXEEXT): snmpwalk.$(OSUFFIX) $(USELIBS) +- $(LINK) ${CFLAGS} -o $@ snmpwalk.$(OSUFFIX) ${LDFLAGS} ${LIBS} ++ $(LINK) ${CFLAGS} ${LDFLAGS} -o $@ snmpwalk.$(OSUFFIX) ${LIBS} + + snmpbulkwalk$(EXEEXT): snmpbulkwalk.$(OSUFFIX) $(USELIBS) +- $(LINK) ${CFLAGS} -o $@ snmpbulkwalk.$(OSUFFIX) ${LDFLAGS} ${LIBS} ++ $(LINK) ${CFLAGS} ${LDFLAGS} -o $@ snmpbulkwalk.$(OSUFFIX) ${LIBS} + + snmpbulkget$(EXEEXT): snmpbulkget.$(OSUFFIX) $(USELIBS) +- $(LINK) ${CFLAGS} -o $@ snmpbulkget.$(OSUFFIX) ${LDFLAGS} ${LIBS} ++ $(LINK) ${CFLAGS} ${LDFLAGS} -o $@ snmpbulkget.$(OSUFFIX) ${LIBS} + + snmptranslate$(EXEEXT): snmptranslate.$(OSUFFIX) $(USELIBS) +- $(LINK) ${CFLAGS} -o $@ snmptranslate.$(OSUFFIX) ${LDFLAGS} ${LIBS} ++ $(LINK) ${CFLAGS} ${LDFLAGS} -o $@ snmptranslate.$(OSUFFIX) ${LIBS} + + snmpstatus$(EXEEXT): snmpstatus.$(OSUFFIX) $(USELIBS) +- $(LINK) ${CFLAGS} -o $@ snmpstatus.$(OSUFFIX) ${LDFLAGS} ${LIBS} ++ $(LINK) ${CFLAGS} ${LDFLAGS} -o $@ snmpstatus.$(OSUFFIX) ${LIBS} + + snmpget$(EXEEXT): snmpget.$(OSUFFIX) $(USELIBS) +- $(LINK) ${CFLAGS} -o $@ snmpget.$(OSUFFIX) ${LDFLAGS} ${LIBS} ++ $(LINK) ${CFLAGS} ${LDFLAGS} -o $@ snmpget.$(OSUFFIX) ${LIBS} + + snmpdelta$(EXEEXT): snmpdelta.$(OSUFFIX) $(USELIBS) +- $(LINK) ${CFLAGS} -o $@ snmpdelta.$(OSUFFIX) ${LDFLAGS} ${LIBS} ++ $(LINK) ${CFLAGS} ${LDFLAGS} -o $@ snmpdelta.$(OSUFFIX) ${LIBS} + + snmptable$(EXEEXT): snmptable.$(OSUFFIX) $(USELIBS) +- $(LINK) ${CFLAGS} -o $@ snmptable.$(OSUFFIX) ${LDFLAGS} ${LIBS} ++ $(LINK) ${CFLAGS} ${LDFLAGS} -o $@ snmptable.$(OSUFFIX) ${LIBS} + + snmptest$(EXEEXT): snmptest.$(OSUFFIX) $(USELIBS) +- $(LINK) ${CFLAGS} -o $@ snmptest.$(OSUFFIX) ${LDFLAGS} ${LIBS} ++ $(LINK) ${CFLAGS} ${LDFLAGS} -o $@ snmptest.$(OSUFFIX) ${LIBS} + + snmptrapd$(EXEEXT): $(TRAPD_OBJECTS) $(USETRAPLIBS) $(INSTALLLIBS) +- $(LINK) ${CFLAGS} -o $@ $(TRAPD_OBJECTS) $(INSTALLLIBS) ${LDFLAGS} ${TRAPLIBS} ++ $(LINK) ${CFLAGS} ${LDFLAGS} -o $@ $(TRAPD_OBJECTS) $(INSTALLLIBS) ${TRAPLIBS} + + snmptrap$(EXEEXT): snmptrap.$(OSUFFIX) $(USELIBS) +- $(LINK) ${CFLAGS} -o $@ snmptrap.$(OSUFFIX) ${LDFLAGS} ${LIBS} ++ $(LINK) ${CFLAGS} ${LDFLAGS} -o $@ snmptrap.$(OSUFFIX) ${LIBS} + + snmpinform$(EXEEXT): snmptrap$(EXEEXT) + rm -f snmpinform +@@ -202,40 +202,40 @@ snmptop$(EXEEXT): snmpps$(EXEEXT) + $(LN_S) snmpps$(EXEEXT) snmptop$(EXEEXT) + + snmpset$(EXEEXT): snmpset.$(OSUFFIX) $(USELIBS) +- $(LINK) ${CFLAGS} -o $@ snmpset.$(OSUFFIX) ${LDFLAGS} ${LIBS} ++ $(LINK) ${CFLAGS} ${LDFLAGS} -o $@ snmpset.$(OSUFFIX) ${LIBS} + + snmpusm$(EXEEXT): snmpusm.$(OSUFFIX) $(USELIBS) +- $(LINK) ${CFLAGS} -o $@ snmpusm.$(OSUFFIX) ${LDFLAGS} ${LIBS} ++ $(LINK) ${CFLAGS} ${LDFLAGS} -o $@ snmpusm.$(OSUFFIX) ${LIBS} + + snmpvacm$(EXEEXT): snmpvacm.$(OSUFFIX) $(USELIBS) +- $(LINK) ${CFLAGS} -o $@ snmpvacm.$(OSUFFIX) ${LDFLAGS} ${LIBS} ++ $(LINK) ${CFLAGS} ${LDFLAGS} -o $@ snmpvacm.$(OSUFFIX) ${LIBS} + + snmptls$(EXEEXT): snmptls.$(OSUFFIX) $(USELIBS) +- $(LINK) ${CFLAGS} -o $@ snmptls.$(OSUFFIX) ${LDFLAGS} ${LIBS} ++ $(LINK) ${CFLAGS} ${LDFLAGS} -o $@ snmptls.$(OSUFFIX) ${LIBS} + + agentxtrap$(EXEEXT): agentxtrap.$(OSUFFIX) $(USEAGENTLIBS) +- $(LINK) ${CFLAGS} -o $@ agentxtrap.$(OSUFFIX) ${LDFLAGS} $(USEAGENTLIBS) $(PERLLDOPTS_FOR_APPS) ${LIBS} ++ $(LINK) ${CFLAGS} ${LDFLAGS} -o $@ agentxtrap.$(OSUFFIX) $(USEAGENTLIBS) $(PERLLDOPTS_FOR_APPS) ${LIBS} + + snmpgetnext$(EXEEXT): snmpgetnext.$(OSUFFIX) $(USELIBS) +- $(LINK) ${CFLAGS} -o $@ snmpgetnext.$(OSUFFIX) ${LDFLAGS} ${LIBS} ++ $(LINK) ${CFLAGS} ${LDFLAGS} -o $@ snmpgetnext.$(OSUFFIX) ${LIBS} + + encode_keychange$(EXEEXT): encode_keychange.$(OSUFFIX) $(USELIBS) +- $(LINK) ${CFLAGS} -o $@ encode_keychange.$(OSUFFIX) ${LDFLAGS} ${LIBS} ++ $(LINK) ${CFLAGS} ${LDFLAGS} -o $@ encode_keychange.$(OSUFFIX) ${LIBS} + + snmpdf$(EXEEXT): snmpdf.$(OSUFFIX) $(USELIBS) +- $(LINK) ${CFLAGS} -o $@ snmpdf.$(OSUFFIX) ${LDFLAGS} ${LIBS} ++ $(LINK) ${CFLAGS} ${LDFLAGS} -o $@ snmpdf.$(OSUFFIX) ${LIBS} + + snmpps$(EXEEXT): snmpps.$(OSUFFIX) $(USELIBS) +- $(LINK) ${CFLAGS} -o $@ snmpps.$(OSUFFIX) ${LDFLAGS} @LIBCURSES@ ${LIBS} ++ $(LINK) ${CFLAGS} ${LDFLAGS} -o $@ snmpps.$(OSUFFIX) @LIBCURSES@ ${LIBS} + + snmpping$(EXEEXT): snmpping.$(OSUFFIX) $(USELIBS) +- $(LINK) ${CFLAGS} -o $@ snmpping.$(OSUFFIX) ${LDFLAGS} ${LIBS} -lm ++ $(LINK) ${CFLAGS} ${LDFLAGS} -o $@ snmpping.$(OSUFFIX) ${LIBS} -lm + + snmppcap$(EXEEXT): snmppcap.$(OSUFFIX) $(USEAGENTLIBS) +- $(LINK) ${CFLAGS} -o $@ snmppcap.$(OSUFFIX) ${LDFLAGS} ${USEAGENTLIBS} ${LIBS} -lpcap ++ $(LINK) ${CFLAGS} ${LDFLAGS} -o $@ snmppcap.$(OSUFFIX) ${USEAGENTLIBS} ${LIBS} -lpcap + + libnetsnmptrapd.$(LIB_EXTENSION)$(LIB_VERSION): $(LLIBTRAPD_OBJS) +- $(LIB_LD_CMD) $@ ${LLIBTRAPD_OBJS} $(MIBLIB) $(MYSQL_LIBS) $(USELIBS) $(PERLLDOPTS_FOR_LIBS) $(LDFLAGS) ++ $(LIB_LD_CMD) $@ $(LDFLAGS) ${LLIBTRAPD_OBJS} $(MIBLIB) $(MYSQL_LIBS) $(USELIBS) $(PERLLDOPTS_FOR_LIBS) + $(RANLIB) $@ + + snmpinforminstall: +diff --git a/apps/snmpnetstat/Makefile.in b/apps/snmpnetstat/Makefile.in +index dfb566d..8a8cb21 100644 +--- a/apps/snmpnetstat/Makefile.in ++++ b/apps/snmpnetstat/Makefile.in +@@ -34,4 +34,4 @@ LIBS= ../../snmplib/libnetsnmp.$(LIB_EXTENSION)$(LIB_VERSION) $(VAL_LIBS) @LIBS + all: standardall + + snmpnetstat$(EXEEXT): ${LOBJS} ${USELIBS} +- ${LINK} ${CFLAGS} -o $@ ${LOBJS} ${LOCAL_LIBS} ${LDFLAGS} ${LIBS} ++ ${LINK} ${CFLAGS} ${LDFLAGS} -o $@ ${LOBJS} ${LOCAL_LIBS} ${LIBS} +diff --git a/snmplib/Makefile.in b/snmplib/Makefile.in +index ecbfc4d..1501636 100644 +--- a/snmplib/Makefile.in ++++ b/snmplib/Makefile.in +@@ -230,11 +230,11 @@ all: standardall + + # how to build the libraries. + libnetsnmp.$(LIB_EXTENSION)$(LIB_VERSION): $(TOBJS) +- $(LIB_LD_CMD) $@ $(TOBJS) $(LDFLAGS) @LNETSNMPLIBS@ ++ $(LIB_LD_CMD) $@ $(LDFLAGS) $(TOBJS) @LNETSNMPLIBS@ + $(RANLIB) $@ + + libsnmp.$(LIB_EXTENSION)$(LIB_VERSION): $(TOBJS) +- $(LIB_LD_CMD) $@ $(TOBJS) $(LDFLAGS) @LNETSNMPLIBS@ ++ $(LIB_LD_CMD) $@ $(LDFLAGS) $(TOBJS) @LNETSNMPLIBS@ + $(RANLIB) $@ + + # +diff --git a/testing/Makefile.in b/testing/Makefile.in +index 79d069d..a6d920e 100644 +--- a/testing/Makefile.in ++++ b/testing/Makefile.in +@@ -61,16 +61,16 @@ test-mibs: + cd $(srcdir)/rfc1213 ; ./run + + etest: etimetest.o $(PARSEOBJS) $(USELIBS) +- ${CC} -o $@ etimetest.o $(PARSEOBJS) ${LDFLAGS} ${LIBS} ++ ${CC} ${LDFLAGS} -o $@ etimetest.o $(PARSEOBJS) ${LIBS} + + ktest: keymanagetest.o $(PARSEOBJS) $(USELIBS) +- ${CC} -o $@ keymanagetest.o $(PARSEOBJS) ${LDFLAGS} ${LIBS} ++ ${CC} ${LDFLAGS} -o $@ keymanagetest.o $(PARSEOBJS) ${LIBS} + + misctest: misctest.o $(PARSEOBJS) $(USELIBS) +- ${CC} -o $@ misctest.o $(PARSEOBJS) ${LDFLAGS} ${LIBS} ++ ${CC} ${LDFLAGS} -o $@ misctest.o $(PARSEOBJS) ${LIBS} + + stest: scapitest.o $(PARSEOBJS) $(USELIBS) +- ${CC} -o $@ scapitest.o $(PARSEOBJS) ${LDFLAGS} ${LIBS} ++ ${CC} ${LDFLAGS} -o $@ scapitest.o $(PARSEOBJS) ${LIBS} + + clean: testclean + rm -f *.o core *.core $(TARG) diff --git a/meta-networking/recipes-protocols/net-snmp/net-snmp_5.9.4.bb b/meta-networking/recipes-protocols/net-snmp/net-snmp_5.9.4.bb index 7c849cf5e7..f37bda921a 100644 --- a/meta-networking/recipes-protocols/net-snmp/net-snmp_5.9.4.bb +++ b/meta-networking/recipes-protocols/net-snmp/net-snmp_5.9.4.bb @@ -30,7 +30,8 @@ SRC_URI = "${SOURCEFORGE_MIRROR}/net-snmp/net-snmp-${PV}.tar.gz \ file://0001-Android-Fix-the-build.patch \ file://netsnmp-swinst-crash.patch \ file://net-snmp-5.9.4-kernel-6.7.patch \ - " + file://0001-Fix-LDFLAGS-vs-LIBS-ordering.patch \ + " SRC_URI[sha256sum] = "8b4de01391e74e3c7014beb43961a2d6d6fa03acc34280b9585f4930745b0544" UPSTREAM_CHECK_URI = "https://sourceforge.net/projects/net-snmp/files/net-snmp/" @@ -117,6 +118,10 @@ do_configure:append() { -e "s@^NSC_LIBDIR=-L.*@NSC_LIBDIR=-L${STAGING_DIR_TARGET}\$\{libdir\}@g" \ -e "s@^NSC_LDFLAGS=\"-L.* @NSC_LDFLAGS=\"-L${STAGING_DIR_TARGET}\$\{libdir\} @g" \ -i ${B}/net-snmp-config + + # Make libtool inject -Wl,--as-needed so that it is specified before any lib + # dependencies. This is needed due to libtools' reordering of the arguments. + [ -z "${ASNEEDED}" ] || sed -e "s@CC -shared@\0 ${ASNEEDED}@" -i ${B}/libtool } do_install:append() {