Bug#909396: systemd: FTBFS on hppa and x32 - relocation can not be used when making a shared object
John David Anglin
dave.anglin at bell.net
Wed Nov 14 19:19:01 GMT 2018
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 at udev@@udev-basic at sta/.._libudev_libudev.c.o'
'src/udev/src at udev@@udev-basic at sta/.._libudev_libudev-list.c.o'
'src/udev/src at udev@@udev-basic at sta/.._libudev_libudev-util.c.o'
'src/udev/src at udev@@udev-basic at sta/.._libudev_libudev-device.c.o'
'src/udev/src at udev@@udev-basic at sta/.._libudev_libudev-device-private.c.o'
'src/udev/src at udev@@udev-basic at sta/.._libudev_libudev-enumerate.c.o'
'src/udev/src at udev@@udev-basic at sta/.._libudev_libudev-monitor.c.o'
'src/udev/src at udev@@udev-basic at sta/.._libudev_libudev-queue.c.o'
'src/udev/src at udev@@udev-basic at 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 at udev@@ata_id at 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 at udev@@ata_id at 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 at udev@@scsi_id at exe/scsi_id_scsi_id.c.o'
'src/udev/src at udev@@scsi_id at 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 at udev@@scsi_id at exe/scsi_id_scsi_id.c.o'
'src/udev/src at udev@@scsi_id at 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 at udev@@cdrom_id at 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 at udev@@cdrom_id at 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 dave.anglin at bell.net
More information about the Pkg-systemd-maintainers
mailing list