At Wed, 12 Jul 2017 13:20:06 -0700, "Greg A. Woods" <woods%planix.ca@localhost> wrote: Subject: disabling the LTO without command-line flags? > > So, I need to disable the link-time optimizer in LD (and ideally disable > it in GCC too, to avoid unusable bloat in the generated object files). > > I also need to do this without use of any command-line flags anywhere. So, I took the obvious path and wrote a wrapper script for 'cc' et al: #!/bin/sh exec /usr/bin/$(basename ${0})-ORIG -fno-lto -fno-use-linker-plugin ${1+"${@}"} (it's needed for cc, gcc, c++, and g++) (the basename tom-foolery seems to be needed with pkgsrc's own wrapper) The following patch fixes the problem I noted before, i.e. it prevents 'ld' itself from barfing on the "-fno-lto" option which GCC oh-so-helpfully passes on to it, thus making the wrapper an effective solution. Index: external/gpl3/binutils/dist/ld/lexsup.c =================================================================== RCS file: /cvs/master/m-NetBSD/main/src/external/gpl3/binutils/dist/ld/lexsup.c,v retrieving revision 1.5 diff -u -r1.5 lexsup.c --- external/gpl3/binutils/dist/ld/lexsup.c 29 Jan 2016 14:42:47 -0000 1.5 +++ external/gpl3/binutils/dist/ld/lexsup.c 12 Jul 2017 20:31:46 -0000 @@ -172,6 +172,9 @@ { {"flto", optional_argument, NULL, OPTION_IGNORE}, '\0', NULL, N_("Ignored for GCC LTO option compatibility"), ONE_DASH }, + { {"fno-lto", optional_argument, NULL, OPTION_IGNORE}, + '\0', NULL, N_("Ignored for GCC LTO option compatibility"), + ONE_DASH }, { {"flto-partition=", required_argument, NULL, OPTION_IGNORE}, '\0', NULL, N_("Ignored for GCC LTO option compatibility"), ONE_DASH }, So far I have been able to re-run "nbmake native-binutils" with additions to turn of LTO and I think my changes have had effect. (ldgram.y and ldlex.l were rebuilt with yacc & lex, but so far that seems to be OK) However I've been unsuccessful so far at re-configuring GCC itself. Its configure script seems to ignore "--disable-lto", at least in the way that "make native-gcc" hands it to it. Here's more or less where I'm at: Index: tools/Makefile.gnuhost =================================================================== RCS file: /cvs/master/m-NetBSD/main/src/tools/Makefile.gnuhost,v retrieving revision 1.44 diff -u -r1.44 Makefile.gnuhost --- tools/Makefile.gnuhost 16 Jan 2016 18:38:53 -0000 1.44 +++ tools/Makefile.gnuhost 8 Aug 2017 04:39:29 -0000 @@ -49,6 +49,14 @@ .MAKEOVERRIDES+= _GNU_CFGSRC .endif +.if defined(HOST_LDFLAGS) && defined(HOST_LDSTATIC) +. if empty(HOST_LDFLAGS:M*${HOST_LDSTATIC}*) +HOST_LDFLAGS+= ${HOST_LDSTATIC} +. endif +.elif !defined(HOST_LDFLAGS) && defined(HOST_LDSTATIC) +HOST_LDFLAGS= ${HOST_LDSTATIC} +.endif + CONFIGURE_ENV+= \ AR=${HOST_AR:Q} \ AWK=${TOOL_AWK:Q} \ @@ -60,6 +68,7 @@ CXXFLAGS=${HOST_CXXFLAGS:Q} \ INSTALL=${HOST_INSTALL_FILE:Q} \ LDFLAGS=${HOST_LDFLAGS:Q} \ + LDSTATIC=${HOST_LDSTATIC:Q} \ LEX=${LEX:Q} \ M4=${TOOL_M4:Q} \ MAKE=${MAKE_PROGRAM:Q} \ @@ -71,7 +80,22 @@ CONFIGURE_ARGS+=--prefix=${TOOLDIR} .if ${MKPIC} == "no" -CONFIGURE_ARGS+=--disable-shared +CONFIGURE_ARGS+= --disable-shared +.endif + +.if defined(HOST_LDSTATIC) && !empty(HOST_LDSTATIC) +CONFIGURE_ARGS+= --enable-static +.endif + +MAKE_ENV+= CFLAGS=${HOST_CFLAGS:Q} +MAKE_ENV+= CPPFLAGS=${HOST_CPPFLAGS:Q} +MAKE_ENV+= LDFLAGS=${HOST_LDFLAGS:Q} +MAKE_ENV+= LDSTATIC=${HOST_LDLDSTATIC:Q} + +.if defined(HOST_LDSTATIC) && !empty(HOST_LDSTATIC) && defined(USE_LIBTOOL) +# work around libtool brain-damage +# xxx this doesn't always work very well.... (see also src/tools/binutils/Makefile which uses "--static", two hyphens) +MAKE_ARGS+= LDFLAGS="${HOST_LDSTATIC} -all-static" .endif .if ${MAKE_PROGRAM} == ${MAKE} Index: tools/binutils/Makefile =================================================================== RCS file: /cvs/master/m-NetBSD/main/src/tools/binutils/Makefile,v retrieving revision 1.25 diff -u -r1.25 Makefile --- tools/binutils/Makefile 26 Jan 2016 17:47:57 -0000 1.25 +++ tools/binutils/Makefile 8 Aug 2017 04:39:48 -0000 @@ -11,7 +11,15 @@ --with-bugurl="http://www.NetBSD.org/support/send-pr.html" \ --with-lib-path="=/usr/lib" --with-sysroot -CONFIGURE_ARGS= --target=${MACHINE_GNU_PLATFORM} --disable-nls \ +# xxx hmmmm..... this would be correct except it doesn't work for sub-dir configure +#USE_LIBTOOL = yes + +.if defined(HOST_LDSTATIC) && !empty(HOST_LDSTATIC) +# obviously the LTO plugin can't be loaded if the 'ld' binary is static-linked! +CONFIGURE_ARGS+= --disable-lto +.endif + +CONFIGURE_ARGS+= --target=${MACHINE_GNU_PLATFORM} --disable-nls \ --program-transform-name="s,^,${MACHINE_GNU_PLATFORM}-," \ --disable-werror \ ${BRANDING} @@ -34,6 +42,11 @@ .include "${.CURDIR}/../Makefile.gnuhost" +.if defined(HOST_LDSTATIC) && !empty(HOST_LDSTATIC) +# xxx try to fool libtool, but note that -all-static won't work here! +MAKE_ARGS+= LDFLAGS="${HOST_LDSTATIC} --static" +.endif + CCADDFLAGS= -I${DESTDIR}/usr/include -L${DESTDIR}/lib -L${DESTDIR}/usr/lib -B${DESTDIR}/usr/lib/ # Force avoiding possibly non-executable install-sh. @@ -42,11 +55,16 @@ NEWCONFIGDIR?= ${.CURDIR}/../.. MKNATIVE?= ${.CURDIR}/mknative-binutils +.if defined(LDSTATIC) && !empty(LDSTATIC) +NATIVE_CONFIGURE_ARGS+= --disable-lto +.endif + native-binutils: .native/.configure_done @echo 'Extracting GNU binutils configury for a native toolchain.' MAKE=${MAKE:Q} ${HOST_SH} ${MKNATIVE} binutils \ ${.OBJDIR}/.native ${NEWCONFIGDIR} ${MACHINE_GNU_PLATFORM} +# XXX hmmm.... not passing *FLAGS, LDFLAGS in particular, is worrying .native/.configure_done: ${_GNU_CFGSRC} ${.CURDIR}/Makefile mkdir .native 2>/dev/null || true PATH=${TOOLDIR}/bin:$$PATH; export PATH; \ @@ -65,6 +83,7 @@ --build=`${GNUHOSTDIST}/config.guess` \ --host=${MACHINE_GNU_PLATFORM} \ --target=${MACHINE_GNU_PLATFORM} \ + ${NATIVE_CONFIGURE_ARGS} \ ${BRANDING} \ ) PATH=${TOOLDIR}/bin:$$PATH; export PATH; \ Index: tools/gcc/Makefile =================================================================== RCS file: /cvs/master/m-NetBSD/main/src/tools/gcc/Makefile,v retrieving revision 1.80 diff -u -r1.80 Makefile --- tools/gcc/Makefile 26 Mar 2016 09:02:56 -0000 1.80 +++ tools/gcc/Makefile 8 Aug 2017 22:33:13 -0000 @@ -13,7 +13,7 @@ .endif # Defaults -CC_FOR_BUILD= ${HOST_CXX:Q} +CC_FOR_BUILD= ${HOST_CC:Q} MKNATIVE?= ${.CURDIR}/mknative-gcc .if ${MACHINE_ARCH} == "x86_64" || ${MACHINE_ARCH} == "sparc64" @@ -45,10 +45,6 @@ COMMON_CONFIGURE_ARGS+= --with-tune=${GCC_CONFIG_TUNE.${MACHINE_ARCH}} .endif -.if ${HAVE_GCC} == 48 -COMMON_CONFIGURE_ARGS+= --enable-lto -.endif - .if ${HAVE_GCC} == 53 # Turn on colour output only if GCC_COLORS env is set COMMON_CONFIGURE_ARGS+= --with-diagnostics-color=auto-if-env @@ -66,6 +62,14 @@ --program-transform-name="s,^,${MACHINE_GNU_PLATFORM}-," \ --enable-languages="${GCC_LANGUAGES}" +.if ${HAVE_GCC} == 48 +.if !defined(HOST_LDSTATIC) || empty(HOST_LDSTATIC)) +CONFIGURE_ARGS+= --enable-lto +.else +CONFIGURE_ARGS+= --disable-lto +.endif +.endif + GCC_CPPFLAGS= -DNETBSD_TOOLS -DTARGET_SYSTEM_ROOT=0 \ -DTARGET_SYSTEM_ROOT_RELOCATABLE @@ -163,6 +168,14 @@ GMP_MACHINE_ARCH?= ${MACHINE_ARCH:S/earmv4/arm/:C/armv[5-7]/arm/} +.if ${HAVE_GCC} == 48 +.if !defined(LDSTATIC) || empty(LDSTATIC) +NATIVE_CONFIGURE_ARGS+= --enable-lto +.else +NATIVE_CONFIGURE_ARGS+= --disable-lto +.endif +.endif + NATIVE_CONFIGURE_ARGS+= \ --with-mpc-lib=${MPCOBJ} \ --with-mpfr-lib=${MPFROBJ} \ -- Greg A. Woods <gwoods%acm.org@localhost> +1 250 762-7675 RoboHack <woods%robohack.ca@localhost> Planix, Inc. <woods%planix.com@localhost> Avoncote Farms <woods%avoncote.ca@localhost>
Attachment:
pgpzvs1YJpwIB.pgp
Description: PGP signature