My Haiku LoongArch (UEFI) port progress

I tried “–verbose” for gcc,

Configured with: /home/dev/haiku/buildtools/gcc/configure --prefix=/home/dev/haiku/generated.loongarch64/cross-tools-loongarch64 --target=loongarch64-unknown-haiku --disable-nls --disable-shared --with-system-zlib --enable-languages=c,c++ --enable-lto --enable-frame-pointer --enable-__cxa-atexit --enable-threads=posix --with-default-libstdcxx-abi=gcc4-compatible --with-sysroot=/home/dev/haiku/generated.loongarch64/cross-tools-loongarch64/sysroot --disable-maintainer-mode --disable-libgomp --disable-libatomic --with-arch=loongarch64 --disable-multilib
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 13.3.0 (GCC) 
COMPILER_PATH=/home/dev/haiku/generated.loongarch64/cross-tools-loongarch64/lib/gcc/loongarch64-unknown-haiku/13.3.0/:/home/dev/haiku/generated.loongarch64/cross-tools-loongarch64/lib/gcc/loongarch64-unknown-haiku/13.3.0/:/home/dev/haiku/generated.loongarch64/cross-tools-loongarch64/lib/gcc/loongarch64-unknown-haiku/:/home/dev/haiku/generated.loongarch64/cross-tools-loongarch64/lib64/gcc/loongarch64-unknown-haiku/13.3.0/:/home/dev/haiku/generated.loongarch64/cross-tools-loongarch64/lib64/gcc/loongarch64-unknown-haiku/:/home/dev/haiku/generated.loongarch64/cross-tools-loongarch64/lib64/gcc/loongarch64-unknown-haiku/13.3.0/../../../../loongarch64-unknown-haiku/bin/
BELIBRARIES=/home/dev/haiku/generated.loongarch64/cross-tools-loongarch64/lib64/gcc/loongarch64-unknown-haiku/13.3.0/:/home/dev/haiku/generated.loongarch64/cross-tools-loongarch64/lib64/gcc/loongarch64-unknown-haiku/13.3.0/../../../../loongarch64-unknown-haiku/lib/:/home/dev/haiku/generated.loongarch64/cross-tools-loongarch64/sysroot/boot/system/develop/lib/
COLLECT_GCC_OPTIONS='-O2' '-v' '-static-libgcc' '-o' 'isl_test_cpp' '-mabi=lp64d' '-march=loongarch64' '-mfpu=64' '-mcmodel=normal' '-mtune=la464' '-dumpdir' 'isl_test_cpp.'
 /home/dev/haiku/generated.loongarch64/cross-tools-loongarch64/lib/gcc/loongarch64-unknown-haiku/13.3.0/collect2 -plugin /home/dev/haiku/generated.loongarch64/cross-tools-loongarch64/lib/gcc/loongarch64-unknown-haiku/13.3.0/liblto_plugin.so -plugin-opt=/home/dev/haiku/generated.loongarch64/cross-tools-loongarch64/lib/gcc/loongarch64-unknown-haiku/13.3.0/lto-wrapper -plugin-opt=-fresolution=/tmp/ccljMgmi.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lroot -plugin-opt=-pass-through=-lgcc --sysroot=/home/dev/haiku/generated.loongarch64/cross-tools-loongarch64/sysroot --eh-frame-hdr -melf64loongarch -shared -no-undefined -X -o isl_test_cpp /home/dev/haiku/generated.loongarch64/cross-tools-loongarch64/lib64/gcc/loongarch64-unknown-haiku/13.3.0/crti.o /home/dev/haiku/generated.loongarch64/cross-tools-loongarch64/lib64/gcc/loongarch64-unknown-haiku/13.3.0/crtbeginS.o /home/dev/haiku/generated.loongarch64/cross-tools-loongarch64/sysroot/boot/system/develop/lib/start_dyn.o /home/dev/haiku/generated.loongarch64/cross-tools-loongarch64/sysroot/boot/system/develop/lib/init_term_dyn.o -L/home/dev/haiku/generated.loongarch64/cross-tools-loongarch64/lib64/gcc/loongarch64-unknown-haiku/13.3.0 -L/home/dev/haiku/generated.loongarch64/cross-tools-loongarch64/lib64/gcc/loongarch64-unknown-haiku/13.3.0/../../../../loongarch64-unknown-haiku/lib -L/home/dev/haiku/generated.loongarch64/cross-tools-loongarch64/sysroot/boot/system/develop/lib isl_test_cpp-isl_test_cpp.o ./.libs/libisl.a /home/dev/haiku/generated.loongarch64/objects/haiku/loongarch64/packaging/repositories/HaikuPortsCross-build/sys-devel/gcc_bootstrap/work-13.3.0_2025_01_13/sources/gcc_bootstrap-13.3.0_2025_01_13-obj/./gmp/.libs/libgmp.a -Bstatic -lstdc++ -Bdynamic -lgcc -lroot -lgcc /home/dev/haiku/generated.loongarch64/cross-tools-loongarch64/lib64/gcc/loongarch64-unknown-haiku/13.3.0/crtendS.o /home/dev/haiku/generated.loongarch64/cross-tools-loongarch64/lib64/gcc/loongarch64-unknown-haiku/13.3.0/crtn.o

gcc is trying to link objects in sysroot, but I can’t find them and this directory sysroot:

/home/dev/haiku/generated.loongarch64/cross-tools-loongarch64/sysroot/boot/system/develop/lib/start_dyn.o 
/home/dev/haiku/generated.loongarch64/cross-tools-loongarch64/sysroot/boot/system/develop/lib/init_term_dyn.o

That’s also supposed to be generated by our build system. What target are you using? They should be built automatically under @bootstrap-raw.

After binutils updated to 2.43.1, I got more details when compiling isl_test_cpp:

/home/dev/haiku/generated.loongarch64/cross-tools-loongarch64/lib64/gcc/loongarch64-unknown-haiku/13.3.0/../../../../loongarch64-unknown-haiku/bin/ld: /home/dev/haiku/generated.loongarch64/cross-tools-loongarch64/lib64/gcc/loongarch64-unknown-haiku/13.3.0/../../../../loongarch64-unknown-haiku/lib/libstdc++.a(eh_globals.o):(.text.__cxa_get_globals_fast+0): relocation R_LARCH_TLS_LE_HI20 against `_ZZN12_GLOBAL__N_110get_globalEvE6global` can not be used when making a shared object; recompile with -fPIC

this is caused by libstdc+±v3, may be referring to TLS support.

libstdc++.a(eh_globals.o):(.text.__cxa_get_globals_fast+0): relocation R_LARCH_TLS_LE_HI20 against `_ZZN12_GLOBAL__N_110get_globalEvE6global` can not be used when making a shared object; recompile with -fPIC

Note that haiku use ELF ABI is a bit different from Linux. Every executables must be compiled with -shared flag (and PIC for everything except 32 bit x86). Statically linked and PIE executables are not supported. You may need to adjust default options in Haiku GCC for LoongArch.

1 Like

After some fix with mno-relax and disable-tls. now I got gcc_bootstrap more progress, but some more errors faced:

n file included from ../haiku/headers/os/drivers/KernelExport.h:9,
                 from ../haiku/src/system/kernel/image.cpp:9:
In function 'int32 atomic_get_and_set(int32*, int32)',
    inlined from 'bool try_acquire_spinlock_inline(spinlock*)' at ../haiku/headers/private/kernel/smp.h:212:27,
    inlined from 'void acquire_spinlock_inline(spinlock*)' at ../haiku/headers/private/kernel/smp.h:219:33,
    inlined from 'void thread_suspend(bool)' at ../haiku/headers/private/kernel/thread.h:433:2,
    inlined from 'void notify_loading_app(status_t, bool)' at ../haiku/src/system/kernel/image.cpp:450:18:
../haiku/headers/os/support/SupportDefs.h:270:35: error: 'unsigned int __atomic_exchange_4(volatile void*, unsigned int, int)' writing 4 bytes into a region of size 0 overflows the destination [-Werror=stringop-overflow=]
  270 |         return __atomic_exchange_n(value, newValue, __ATOMIC_SEQ_CST);
      |                ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

1 Like

It is a warning, not an error and it can be disabled.