https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102426

            Bug ID: 102426
           Summary: [12 regression] Fix for PR 49664 breaks Solaris
                    bootstrap with gld
           Product: gcc
           Version: 12.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: lto
          Assignee: unassigned at gcc dot gnu.org
          Reporter: ro at gcc dot gnu.org
                CC: marxin at gcc dot gnu.org, pinskia at gcc dot gnu.org
  Target Milestone: ---
              Host: *-*-solaris2.11

By rev 48b3caffcacc99adf72ba1be189a7d9ebc4190be, master bootstrap is broken on 
Solaris when configured to use GNU ld:

The failure occurs trying to link lto-plugin.so:

libtool: link:
           /var/gcc/regression/master/11.4-gcc-gas-gld/build/./prev-gcc/xgcc
-B/var/gcc/regression/master/11.4-gcc-gas-gld/build/./prev-gcc/
-B/vol/gcc/i386-pc-solaris2.11/bin/ -B/vol/gcc/i386-pc-solaris2.11/bin/
-B/vol/gcc/i386-pc-solaris2.11/lib/ -isystem
/vol/gcc/i386-pc-solaris2.11/include -isystem
/vol/gcc/i386-pc-solaris2.11/sys-include   -fno-checking -shared -Wl,-z
-Wl,text -Wl,-M -Wl,.libs/liblto_plugin.so.exp -Wl,-h -Wl,liblto_plugin.so -o
.libs/liblto_plugin.so  .libs/lto-plugin.o    -static-libgcc -static-libstdc++
-static-libgcc ../libiberty/pic/libiberty.a
/vol/gcc/bin/gld-2.37:.libs/liblto_plugin.so.exp: file format not recognized;
treating as linker script
/vol/gcc/bin/gld-2.37:.libs/liblto_plugin.so.exp:1: syntax error
collect2: error: ld returned 1 exit status
make[4]: *** [Makefile:466: liblto_plugin.la] Error 1

liblto_plugin.so.exp contains

{ global:
onload;
local: *; };

AFAICT, the issue is caused by libtool assuming that gcc on Solaris always
uses the native linker, which is wrong: I regularly test both ld and gld
configurations and this is also documented in install.texi.

The invocation above stems from libtool.m4 after l.5035:

    solaris*)
      _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
      if test "$GCC" = yes; then
        wlarc='${wl}'
        _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h
${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
        _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat
$export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >>
$lib.exp~
          $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h
${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'

The question is how to deal with this: libtool is unmaintained for 2 1/2 years
now.

Reply via email to