(In reply to Andrew Pinski from comment #7)
> (In reply to Matthias Klose from comment #6)
> > systemd on aarch64 configured with efi support fails with a similar
> > relocation error:
> >
> > ld -o src/boot/efi/systemd_boot.so -T /usr/lib/elf_aarch64_efi.lds -shared
> > -Bsymbolic -nostdlib -znocombreloc -L /usr/lib /usr/lib/crt0-efi-aarch64.o
> > --defsym=EFI_SUBSYSTEM=0xa src/boot/efi/disk.c.o src/boot/efi/graphics.c.o
> > src/boot/efi/measure.c.o src/boot/efi/pe.c.o src/boot/efi/util.c.o
> > src/boot/efi/boot.c.o src/boot/efi/console.c.o src/boot/efi/shim.c.o -lefi
> > -lgnuefi /usr/lib/gcc/aarch64-linux-gnu/7/libgcc.a
> > ld: /usr/lib/crt0-efi-aarch64.o: relocation R_AARCH64_ABS16 against
> > `EFI_SUBSYSTEM' can not be used when making a shared object
>
> This is a bug in either in gnu-efi or systemd. EFI_SUBSYSTEM is in the
> pe-coff header so we don't want any relocation there :). Basically
> EFI_SUBSYSTEM is not being defined. Note Uboot has a similar bug too.
The PE/COFF header is part of the static GNU=EFI library, and uses a static relocation to populate the efi subsystem field when incorporated into a EFI executable. The ELF spec allows this, so if there is a bug here, it is in ld.bfd not in GNU-EFI, systemd or u-boot.
(In reply to Andrew Pinski from comment #7) efi/systemd_ boot.so -T /usr/lib/ elf_aarch64_ efi.lds -shared crt0-efi- aarch64. o EFI_SUBSYSTEM= 0xa src/boot/ efi/disk. c.o src/boot/ efi/graphics. c.o efi/measure. c.o src/boot/efi/pe.c.o src/boot/ efi/util. c.o efi/boot. c.o src/boot/ efi/console. c.o src/boot/ efi/shim. c.o -lefi gcc/aarch64- linux-gnu/ 7/libgcc. a crt0-efi- aarch64. o: relocation R_AARCH64_ABS16 against
> (In reply to Matthias Klose from comment #6)
> > systemd on aarch64 configured with efi support fails with a similar
> > relocation error:
> >
> > ld -o src/boot/
> > -Bsymbolic -nostdlib -znocombreloc -L /usr/lib /usr/lib/
> > --defsym=
> > src/boot/
> > src/boot/
> > -lgnuefi /usr/lib/
> > ld: /usr/lib/
> > `EFI_SUBSYSTEM' can not be used when making a shared object
>
> This is a bug in either in gnu-efi or systemd. EFI_SUBSYSTEM is in the
> pe-coff header so we don't want any relocation there :). Basically
> EFI_SUBSYSTEM is not being defined. Note Uboot has a similar bug too.
The PE/COFF header is part of the static GNU=EFI library, and uses a static relocation to populate the efi subsystem field when incorporated into a EFI executable. The ELF spec allows this, so if there is a bug here, it is in ld.bfd not in GNU-EFI, systemd or u-boot.