Skip to content

Build failure on loongarch64 #158

@cheese

Description

@cheese

fwupd-efi failed to build on loongarch64 for Freedesktop-SDK.

Versions of components:
fwupd-efi 1.7
gnu-efi 4.0.2
binutils 2.45

ninja: Entering directory `_builddir'
[1/7] /usr/bin/cc -c ../efi/fwup-debug.c -o efi/fwup-debug.o -Og -g3 --param=ssp-buffer-size=4 -fexceptions -Wall -Wextra -Wvla -std=gnu11 -fpic -funsigned-char -fshort-wchar -ffreestanding -fno-strict-aliasing -fno-stack-protector -fno-stack-check -fno-merge-all-constants -Wsign-compare -Wno-missing-field-initializers -Wno-address-of-packed-member -grecord-gcc-switches '-DDEBUGDIR="/usr/lib/loongarch64-linux-gnu/debug"' -I. -isystem /usr/include/efi -isystem /usr/include/efi/loongarch64 -fno-merge-constants -DGNU_EFI_3_0_COMPAT
[2/7] /usr/bin/cc -c ../efi/fwup-efi.c -o efi/fwup-efi.o -Og -g3 --param=ssp-buffer-size=4 -fexceptions -Wall -Wextra -Wvla -std=gnu11 -fpic -funsigned-char -fshort-wchar -ffreestanding -fno-strict-aliasing -fno-stack-protector -fno-stack-check -fno-merge-all-constants -Wsign-compare -Wno-missing-field-initializers -Wno-address-of-packed-member -grecord-gcc-switches '-DDEBUGDIR="/usr/lib/loongarch64-linux-gnu/debug"' -I. -isystem /usr/include/efi -isystem /usr/include/efi/loongarch64 -fno-merge-constants -DGNU_EFI_3_0_COMPAT
[3/7] /usr/bin/cc -c ../efi/fwup-common.c -o efi/fwup-common.o -Og -g3 --param=ssp-buffer-size=4 -fexceptions -Wall -Wextra -Wvla -std=gnu11 -fpic -funsigned-char -fshort-wchar -ffreestanding -fno-strict-aliasing -fno-stack-protector -fno-stack-check -fno-merge-all-constants -Wsign-compare -Wno-missing-field-initializers -Wno-address-of-packed-member -grecord-gcc-switches '-DDEBUGDIR="/usr/lib/loongarch64-linux-gnu/debug"' -I. -isystem /usr/include/efi -isystem /usr/include/efi/loongarch64 -fno-merge-constants -DGNU_EFI_3_0_COMPAT
[4/7] /usr/bin/python3 ../efi/generate_sbat.py efi/fwup-sbat.o --cc cc --cflags '-Og -g3 --param=ssp-buffer-size=4 -fexceptions -Wall -Wextra -Wvla -std=gnu11 -fpic -funsigned-char -fshort-wchar -ffreestanding -fno-strict-aliasing -fno-stack-protector -fno-stack-check -fno-merge-all-constants -Wsign-compare -Wno-missing-field-initializers -Wno-address-of-packed-member -grecord-gcc-switches -DDEBUGDIR="/usr/lib/loongarch64-linux-gnu/debug" -I. -isystem /usr/include/efi -isystem /usr/include/efi/loongarch64 -fno-merge-constants -DGNU_EFI_3_0_COMPAT' --objcopy /usr/bin/objcopy --project-name fwupd-efi --project-version 1.7 --sbat-version 1 --sbat-generation 1 --sbat-distro-id freedesktop-sdk --sbat-distro-generation 0 --sbat-distro-summary 'Freedesktop SDK' --sbat-distro-pkgname '' --sbat-distro-version '' --sbat-distro-url https://freedesktop-sdk.io/
[5/7] /usr/bin/cc -c ../efi/fwupdate.c -o efi/fwupdate.o -Og -g3 --param=ssp-buffer-size=4 -fexceptions -Wall -Wextra -Wvla -std=gnu11 -fpic -funsigned-char -fshort-wchar -ffreestanding -fno-strict-aliasing -fno-stack-protector -fno-stack-check -fno-merge-all-constants -Wsign-compare -Wno-missing-field-initializers -Wno-address-of-packed-member -grecord-gcc-switches '-DDEBUGDIR="/usr/lib/loongarch64-linux-gnu/debug"' -I. -isystem /usr/include/efi -isystem /usr/include/efi/loongarch64 -fno-merge-constants -DGNU_EFI_3_0_COMPAT
[6/7] /usr/bin/cc -nostdlib -o efi/fwup.so -Wl,-T -Wl,/buildstream-build/efi/lds/elf_loongarch64_efi.lds -Wl,-shared -Wl,-Bsymbolic -Wl,-nostdlib -Wl,-znocombreloc -Wl,-znorelro -Wl,-L -Wl,/usr/lib/loongarch64-linux-gnu -Wl,-L -Wl,/usr/lib/loongarch64-linux-gnu -Wl,/usr/lib/loongarch64-linux-gnu/crt0-efi-loongarch64.o efi/fwupdate.o efi/fwup-debug.o efi/fwup-efi.o efi/fwup-common.o efi/fwup-sbat.o -lefi -lgnuefi /usr/lib/gcc/loongarch64-unknown-linux-gnu/15.2.0/libgcc.a
FAILED: [code=1] efi/fwup.so 
/usr/bin/cc -nostdlib -o efi/fwup.so -Wl,-T -Wl,/buildstream-build/efi/lds/elf_loongarch64_efi.lds -Wl,-shared -Wl,-Bsymbolic -Wl,-nostdlib -Wl,-znocombreloc -Wl,-znorelro -Wl,-L -Wl,/usr/lib/loongarch64-linux-gnu -Wl,-L -Wl,/usr/lib/loongarch64-linux-gnu -Wl,/usr/lib/loongarch64-linux-gnu/crt0-efi-loongarch64.o efi/fwupdate.o efi/fwup-debug.o efi/fwup-efi.o efi/fwup-common.o efi/fwup-sbat.o -lefi -lgnuefi /usr/lib/gcc/loongarch64-unknown-linux-gnu/15.2.0/libgcc.a
/usr/lib/gcc/loongarch64-unknown-linux-gnu/15.2.0/../../../../loongarch64-unknown-linux-gnu/bin/ld: /usr/lib/loongarch64-linux-gnu/crt0-efi-loongarch64.o:(.text+0x1014): relocation R_LARCH_PCALA_HI20 against `ImageBase` can not be used when making a shared object; recompile with -fPIC and check the symbol visibility
collect2: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.
Command 'ninja -v -j ${JOBS} -C _builddir' failed with exitcode 1

full build log: fwupd-efi-1.7.log

I am not familiar with assembly stuff, but this modification make the linking work.

diff --git a/efi/lds/elf_loongarch64_efi.lds b/efi/lds/elf_loongarch64_efi.lds
index c7a77a3..0cf1233 100644
--- a/efi/lds/elf_loongarch64_efi.lds
+++ b/efi/lds/elf_loongarch64_efi.lds
@@ -3,6 +3,8 @@ OUTPUT_ARCH(loongarch)
 ENTRY(_start)
 SECTIONS
 {
+  . = 0;
+  ImageBase = .;
   .text 0 : {
     *(.text.head)
     . = ALIGN(4096);

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions