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