Hi Michael,

On 2018-11-14 7:38 a.m., Michael Biebl wrote:
If you want to see this fixed, it would be great if you can follow-up at
https://github.com/systemd/systemd/issues/10548#issuecomment-438619429

I don't feel comfortable creating such a pull request myself, as I
wouldn't know what to write in the commit message why the changes are
necessary (and apparently on very specific architectures).

It would thus be best if you can create that PR yourself or at least
send me a patch with a proper commit message and created via "git
format-patch" which I can forward.
I looked at the issue a bit more.  One reason this bug may be arch specific is some
architectures generate position independent code by default.

I agree this fix shouldn't be necessary.  The LTO plugin is supposed to automatically determine the options needed for the compilations that it does from the options used for the compiled
options included in the link.  See gcc -flinker-output option:

@item -flinker-output=@var{type}
@opindex -flinker-output
This option controls the code generation of the link time optimizer.  By
default the linker output is determined by the linker plugin automatically. For debugging the compiler and in the case of incremental linking to non-lto object
file is desired, it may be useful to control the type manually.

The LTO plugin merges the PIC and PIE options used for the compiled objects:

  /* Merge PIC options:
      -fPIC + -fpic = -fpic
      -fPIC + -fno-pic = -fno-pic
      -fpic/-fPIC + nothin = nothing.
     It is a common mistake to mix few -fPIC compiled objects into otherwise
     non-PIC code.  We do not want to build everything with PIC then.

     Similarly we merge PIE options, however in addition we keep
      -fPIC + -fPIE = -fPIE
      -fpic + -fPIE = -fpie
      -fPIC/-fpic + -fpie = -fpie

     It would be good to warn on mismatches, but it is bit hard to do as
     we do not know what nothing translates to.  */

As noted above, the most common mistake is to miss a -fPIC or -fPIE option in one of the objects. Adding -fPIE to the PIE link options causes the LTO plugin to use it for the compilations it does.  Given that it works, implies that all objects in the failing link are in fact PIE, but for some reason the option
determination has failed.

I also see in this build
https://buildd.debian.org/status/fetch.php?pkg=systemd&arch=hppa&ver=239-11&stamp=1540749653&raw=0
that the libudev_static.a archive seems to be empty:

[389/1547] rm -f src/udev/libudev_static.a && gcc-ar csrD src/udev/libudev_static.a

Possibly, this confuses the LTO plugin on hppa.  Why do we link against an empty archive?

On the other hand, libudev-basic.a has objects:
[391/1547] rm -f src/udev/libudev-basic.a && gcc-ar csrD src/udev/libudev-basic.a 'src/udev/src@udev@@udev-basic@sta/.._libudev_libudev.c.o' 'src/udev/src@udev@@udev-basic@sta/.._libudev_libudev-list.c.o' 'src/udev/src@udev@@udev-basic@sta/.._libudev_libudev-util.c.o' 'src/udev/src@udev@@udev-basic@sta/.._libudev_libudev-device.c.o' 'src/udev/src@udev@@udev-basic@sta/.._libudev_libudev-device-private.c.o' 'src/udev/src@udev@@udev-basic@sta/.._libudev_libudev-enumerate.c.o' 'src/udev/src@udev@@udev-basic@sta/.._libudev_libudev-monitor.c.o' 'src/udev/src@udev@@udev-basic@sta/.._libudev_libudev-queue.c.o' 'src/udev/src@udev@@udev-basic@sta/.._libudev_libudev-hwdb.c.o'

If it can be shown that all objects being linked into the failing links,

[422/1547] cc  -o src/udev/ata_id 'src/udev/src@udev@@ata_id@exe/ata_id_ata_id.c.o' -flto -Wl,--no-undefined -Wl,--as-needed -Wl,-z,relro -Wl,-z,now -pie -Wl,--gc-sections -g -O2 -fdebug-prefix-map=/<<PKGBUILDDIR>>=. -Wformat -Werror=format-security -Wl,--start-group src/udev/libudev_static.a src/shared/libsystemd-shared-239.a src/libsystemd/libsystemd_static.a src/basic/libbasic.a src/udev/libudev-basic.a -lrt /usr/lib/hppa-linux-gnu/libcap.so -lacl /usr/lib/hppa-linux-gnu/libcryptsetup.so -lgcrypt /usr/lib/hppa-linux-gnu/libip4tc.so /usr/lib/hppa-linux-gnu/libip6tc.so /usr/lib/hppa-linux-gnu/libselinux.so /usr/lib/hppa-linux-gnu/libidn.so /usr/lib/hppa-linux-gnu/liblzma.so /usr/lib/hppa-linux-gnu/liblz4.so /usr/lib/hppa-linux-gnu/libblkid.so -lrt /usr/lib/hppa-linux-gnu/libmount.so -Wl,--end-group -pthread '-Wl,-rpath,$ORIGIN/:$ORIGIN/../shared:$ORIGIN/../libsystemd:$ORIGIN/../basic' -Wl,-rpath-link,/<<PKGBUILDDIR>>/build-deb/src/udev:/<<PKGBUILDDIR>>/build-deb/src/shared:/<<PKGBUILDDIR>>/build-deb/src/libsystemd:/<<PKGBUILDDIR>>/build-deb/src/basic
FAILED: src/udev/ata_id
cc  -o src/udev/ata_id 'src/udev/src@udev@@ata_id@exe/ata_id_ata_id.c.o' -flto -Wl,--no-undefined -Wl,--as-needed -Wl,-z,relro -Wl,-z,now -pie -Wl,--gc-sections -g -O2 -fdebug-prefix-map=/<<PKGBUILDDIR>>=. -Wformat -Werror=format-security -Wl,--start-group src/udev/libudev_static.a src/shared/libsystemd-shared-239.a src/libsystemd/libsystemd_static.a src/basic/libbasic.a src/udev/libudev-basic.a -lrt /usr/lib/hppa-linux-gnu/libcap.so -lacl /usr/lib/hppa-linux-gnu/libcryptsetup.so -lgcrypt /usr/lib/hppa-linux-gnu/libip4tc.so /usr/lib/hppa-linux-gnu/libip6tc.so /usr/lib/hppa-linux-gnu/libselinux.so /usr/lib/hppa-linux-gnu/libidn.so /usr/lib/hppa-linux-gnu/liblzma.so /usr/lib/hppa-linux-gnu/liblz4.so /usr/lib/hppa-linux-gnu/libblkid.so -lrt /usr/lib/hppa-linux-gnu/libmount.so -Wl,--end-group -pthread '-Wl,-rpath,$ORIGIN/:$ORIGIN/../shared:$ORIGIN/../libsystemd:$ORIGIN/../basic' -Wl,-rpath-link,/<<PKGBUILDDIR>>/build-deb/src/udev:/<<PKGBUILDDIR>>/build-deb/src/shared:/<<PKGBUILDDIR>>/build-deb/src/libsystemd:/<<PKGBUILDDIR>>/build-deb/src/basic /usr/bin/ld: /tmp/ccdoRmc5.ltrans0.ltrans.o: relocation R_PARISC_DPREL21L can not be used when making a shared object; recompile with -fPIC /usr/bin/ld: BFD (GNU Binutils for Debian) 2.31.1 internal error, aborting at ../../bfd/elf32-hppa.c:3956 in elf32_hppa_relocate_section

/usr/bin/ld: Please report this bug.

collect2: error: ld returned 1 exit status
[423/1547] cc  -o src/udev/scsi_id 'src/udev/src@udev@@scsi_id@exe/scsi_id_scsi_id.c.o' 'src/udev/src@udev@@scsi_id@exe/scsi_id_scsi_serial.c.o' -flto -Wl,--no-undefined -Wl,--as-needed -Wl,-z,relro -Wl,-z,now -pie -Wl,--gc-sections -g -O2 -fdebug-prefix-map=/<<PKGBUILDDIR>>=. -Wformat -Werror=format-security -Wl,--start-group src/udev/libudev_static.a src/shared/libsystemd-shared-239.a src/libsystemd/libsystemd_static.a src/basic/libbasic.a src/udev/libudev-basic.a -lrt /usr/lib/hppa-linux-gnu/libcap.so -lacl /usr/lib/hppa-linux-gnu/libcryptsetup.so -lgcrypt /usr/lib/hppa-linux-gnu/libip4tc.so /usr/lib/hppa-linux-gnu/libip6tc.so /usr/lib/hppa-linux-gnu/libselinux.so /usr/lib/hppa-linux-gnu/libidn.so /usr/lib/hppa-linux-gnu/liblzma.so /usr/lib/hppa-linux-gnu/liblz4.so /usr/lib/hppa-linux-gnu/libblkid.so -lrt /usr/lib/hppa-linux-gnu/libmount.so -Wl,--end-group -pthread '-Wl,-rpath,$ORIGIN/:$ORIGIN/../shared:$ORIGIN/../libsystemd:$ORIGIN/../basic' -Wl,-rpath-link,/<<PKGBUILDDIR>>/build-deb/src/udev:/<<PKGBUILDDIR>>/build-deb/src/shared:/<<PKGBUILDDIR>>/build-deb/src/libsystemd:/<<PKGBUILDDIR>>/build-deb/src/basic
FAILED: src/udev/scsi_id
cc  -o src/udev/scsi_id 'src/udev/src@udev@@scsi_id@exe/scsi_id_scsi_id.c.o' 'src/udev/src@udev@@scsi_id@exe/scsi_id_scsi_serial.c.o' -flto -Wl,--no-undefined -Wl,--as-needed -Wl,-z,relro -Wl,-z,now -pie -Wl,--gc-sections -g -O2 -fdebug-prefix-map=/<<PKGBUILDDIR>>=. -Wformat -Werror=format-security -Wl,--start-group src/udev/libudev_static.a src/shared/libsystemd-shared-239.a src/libsystemd/libsystemd_static.a src/basic/libbasic.a src/udev/libudev-basic.a -lrt /usr/lib/hppa-linux-gnu/libcap.so -lacl /usr/lib/hppa-linux-gnu/libcryptsetup.so -lgcrypt /usr/lib/hppa-linux-gnu/libip4tc.so /usr/lib/hppa-linux-gnu/libip6tc.so /usr/lib/hppa-linux-gnu/libselinux.so /usr/lib/hppa-linux-gnu/libidn.so /usr/lib/hppa-linux-gnu/liblzma.so /usr/lib/hppa-linux-gnu/liblz4.so /usr/lib/hppa-linux-gnu/libblkid.so -lrt /usr/lib/hppa-linux-gnu/libmount.so -Wl,--end-group -pthread '-Wl,-rpath,$ORIGIN/:$ORIGIN/../shared:$ORIGIN/../libsystemd:$ORIGIN/../basic' -Wl,-rpath-link,/<<PKGBUILDDIR>>/build-deb/src/udev:/<<PKGBUILDDIR>>/build-deb/src/shared:/<<PKGBUILDDIR>>/build-deb/src/libsystemd:/<<PKGBUILDDIR>>/build-deb/src/basic /usr/bin/ld: /tmp/cc90p6im.ltrans0.ltrans.o: relocation R_PARISC_DPREL21L can not be used when making a shared object; recompile with -fPIC /usr/bin/ld: BFD (GNU Binutils for Debian) 2.31.1 internal error, aborting at ../../bfd/elf32-hppa.c:3956 in elf32_hppa_relocate_section

/usr/bin/ld: Please report this bug.

collect2: error: ld returned 1 exit status
[424/1547] cc  -o src/udev/cdrom_id 'src/udev/src@udev@@cdrom_id@exe/cdrom_id_cdrom_id.c.o' -flto -Wl,--no-undefined -Wl,--as-needed -Wl,-z,relro -Wl,-z,now -pie -Wl,--gc-sections -g -O2 -fdebug-prefix-map=/<<PKGBUILDDIR>>=. -Wformat -Werror=format-security -Wl,--start-group src/udev/libudev_static.a src/shared/libsystemd-shared-239.a src/libsystemd/libsystemd_static.a src/basic/libbasic.a src/udev/libudev-basic.a -lrt /usr/lib/hppa-linux-gnu/libcap.so -lacl /usr/lib/hppa-linux-gnu/libcryptsetup.so -lgcrypt /usr/lib/hppa-linux-gnu/libip4tc.so /usr/lib/hppa-linux-gnu/libip6tc.so /usr/lib/hppa-linux-gnu/libselinux.so /usr/lib/hppa-linux-gnu/libidn.so /usr/lib/hppa-linux-gnu/liblzma.so /usr/lib/hppa-linux-gnu/liblz4.so /usr/lib/hppa-linux-gnu/libblkid.so -lrt /usr/lib/hppa-linux-gnu/libmount.so -Wl,--end-group -pthread '-Wl,-rpath,$ORIGIN/:$ORIGIN/../shared:$ORIGIN/../libsystemd:$ORIGIN/../basic' -Wl,-rpath-link,/<<PKGBUILDDIR>>/build-deb/src/udev:/<<PKGBUILDDIR>>/build-deb/src/shared:/<<PKGBUILDDIR>>/build-deb/src/libsystemd:/<<PKGBUILDDIR>>/build-deb/src/basic
FAILED: src/udev/cdrom_id
cc  -o src/udev/cdrom_id 'src/udev/src@udev@@cdrom_id@exe/cdrom_id_cdrom_id.c.o' -flto -Wl,--no-undefined -Wl,--as-needed -Wl,-z,relro -Wl,-z,now -pie -Wl,--gc-sections -g -O2 -fdebug-prefix-map=/<<PKGBUILDDIR>>=. -Wformat -Werror=format-security -Wl,--start-group src/udev/libudev_static.a src/shared/libsystemd-shared-239.a src/libsystemd/libsystemd_static.a src/basic/libbasic.a src/udev/libudev-basic.a -lrt /usr/lib/hppa-linux-gnu/libcap.so -lacl /usr/lib/hppa-linux-gnu/libcryptsetup.so -lgcrypt /usr/lib/hppa-linux-gnu/libip4tc.so /usr/lib/hppa-linux-gnu/libip6tc.so /usr/lib/hppa-linux-gnu/libselinux.so /usr/lib/hppa-linux-gnu/libidn.so /usr/lib/hppa-linux-gnu/liblzma.so /usr/lib/hppa-linux-gnu/liblz4.so /usr/lib/hppa-linux-gnu/libblkid.so -lrt /usr/lib/hppa-linux-gnu/libmount.so -Wl,--end-group -pthread '-Wl,-rpath,$ORIGIN/:$ORIGIN/../shared:$ORIGIN/../libsystemd:$ORIGIN/../basic' -Wl,-rpath-link,/<<PKGBUILDDIR>>/build-deb/src/udev:/<<PKGBUILDDIR>>/build-deb/src/shared:/<<PKGBUILDDIR>>/build-deb/src/libsystemd:/<<PKGBUILDDIR>>/build-deb/src/basic /usr/bin/ld: /tmp/cc92XsZd.ltrans0.ltrans.o: relocation R_PARISC_DPREL21L can not be used when making a shared object; recompile with -fPIC /usr/bin/ld: BFD (GNU Binutils for Debian) 2.31.1 internal error, aborting at ../../bfd/elf32-hppa.c:3956 in elf32_hppa_relocate_section

/usr/bin/ld: Please report this bug.

collect2: error: ld returned 1 exit status

have the correct option information, then I would say this is a gcc bug (need to fix the linker message and abort).

Dave

--
John David Anglin  [email protected]

_______________________________________________
Pkg-systemd-maintainers mailing list
[email protected]
https://alioth-lists.debian.net/cgi-bin/mailman/listinfo/pkg-systemd-maintainers

Reply via email to