loongarch64-linux-musl
yxd-ym opened this issue · 14 comments
system:
OS: loongarchlinux
GCC:
$ gcc --version
gcc (GCC) 13.2.1 20230906
Copyright (C) 2023 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
[15/20] Running zig1.wasm to produce /home/yxd/playspace/zig-bootstrap/out/build-zig-host/zig2.c
FAILED: zig2.c /home/yxd/playspace/zig-bootstrap/out/build-zig-host/zig2.c
cd /home/yxd/playspace/zig-bootstrap/zig && /home/yxd/playspace/zig-bootstrap/out/build-zig-host/zig1 /home/yxd/playspace/zig-bootstrap/zig/lib build-exe -ofmt=c -lc -OReleaseSmall --name zig2 -femit-bin="/home/yxd/playspace/zig-bootstrap/out/build-zig-host/zig2.c" -target loongarch64-linux --dep build_options --dep aro --mod root src/main.zig --mod build_options /home/yxd/playspace/zig-bootstrap/out/build-zig-host/config.zig --mod aro_options src/stubs/aro_options.zig --mod Builtins/Builtin.def src/stubs/aro_builtins.zig --mod Attribute/names.def src/stubs/aro_names.zig --mod Diagnostics/messages.def src/stubs/aro_messages.zig --dep build_options=aro_options --mod aro_backend deps/aro/backend.zig --dep Builtins/Builtin.def --dep Attribute/names.def --dep Diagnostics/messages.def --dep build_options=aro_options --dep backend=aro_backend --mod aro deps/aro/aro.zig
/lib/std/os/linux.zig:77:28: error: struct 'os.linux.arch_bits__struct_7806' has no member named 'ino_t'
/lib/std/os/linux.zig:46:13: note: struct declared here
/lib/std/os/linux.zig:113:33: error: struct 'os.linux.arch_bits__struct_7806' has no member named 'MAP'
/lib/std/os/linux.zig:46:13: note: struct declared here
/lib/std/os/linux.zig:145:33: error: struct 'os.linux.arch_bits__struct_7806' has no member named 'O'
/lib/std/os/linux.zig:46:13: note: struct declared here
/lib/std/os/linux.zig:83:28: error: struct 'os.linux.arch_bits__struct_7806' has no member named 'off_t'
/lib/std/os/linux.zig:46:13: note: struct declared here
/lib/std/os/linux.zig:48:34: error: struct 'os.linux.arch_bits__struct_7806' has no member named 'syscall0'
/lib/std/os/linux.zig:46:13: note: struct declared here
/lib/std/os/linux.zig:52:34: error: struct 'os.linux.arch_bits__struct_7806' has no member named 'syscall4'
/lib/std/os/linux.zig:46:13: note: struct declared here
/lib/std/os/linux.zig:51:34: error: struct 'os.linux.arch_bits__struct_7806' has no member named 'syscall3'
/lib/std/os/linux.zig:46:13: note: struct declared here
ninja: build stopped: subcommand failed.
musl upstream does not support this target yet https://wiki.musl-libc.org/supported-platforms
There is some patch in the mailing list and I guess the support is coming soon.
I'm using a patched version of musl to try this.
https://inbox.vuxu.org/musl/2a8d55b0-add3-4d90-1119-4e5c28b6626e@loongson.cn/
Anyway, maybe trying to make #166 work first is a good idea.
musl support is coming: https://www.openwall.com/lists/musl/2024/01/25/12
https://musl.libc.org/releases.html
musl 1.2.5 adds loongarch64 support.
current status is:
CMake Error at /nix/store/mk7637n6h4d437gl5cplxvd3k2l66awd-cmake-3.29.2/share/cmake-3.29/Modules/CMakeTestCCompiler.cmake:67 (message):
The C compiler
"/home/andy/dev/zig-bootstrap/out/host/bin/zig"
is not able to compile a simple test program.
It fails with the following output:
Change Dir: '/home/andy/dev/zig-bootstrap/out/build-zlib-loongarch64-linux-musl-baseline/CMakeFiles/CMakeScratch/TryCompile-msrcsI'
Run Build Command(s): /nix/store/p5y20shjad8an1jhcby82sz843lirvwi-ninja-1.11.1/bin/ninja -v cmTC_7f7a4
[1/2] /home/andy/dev/zig-bootstrap/out/host/bin/zig cc -fno-sanitize=all -s -target loongarch64-linux-musl -mcpu=baseline -MD -MT CMakeFiles/cmTC_7f7a4.dir/testCCompiler.c.o -MF CMakeFiles/cmTC_7f7a4.dir/testCCompiler.c.o.d -o CMakeFiles/cmTC_7f7a4.dir/testCCompiler.c.o -c /home/andy/dev/zig-bootstrap/out/build-zlib-loongarch64-linux-musl-baseline/CMakeFiles/CMakeScratch/TryCompile-msrcsI/testCCompiler.c
[2/2] : && /home/andy/dev/zig-bootstrap/out/host/bin/zig cc -fno-sanitize=all -s -target loongarch64-linux-musl -mcpu=baseline CMakeFiles/cmTC_7f7a4.dir/testCCompiler.c.o -o cmTC_7f7a4 && :
FAILED: cmTC_7f7a4
: && /home/andy/dev/zig-bootstrap/out/host/bin/zig cc -fno-sanitize=all -s -target loongarch64-linux-musl -mcpu=baseline CMakeFiles/cmTC_7f7a4.dir/testCCompiler.c.o -o cmTC_7f7a4 && :
LLVM ERROR: Cannot select: 0x7fae00a11e70: i64 = fp_to_fp16 0x7fae00a3ec00
0x7fae00a3ec00: f32,ch = CopyFromReg 0x7fae00328980, Register:f32 %11
0x7fae00c7cf00: f32 = Register %11
In function: __fixhfsi
ninja: build stopped: subcommand failed.
In other words, unable to build compiler_rt from source due to LLVM bug in lowering to fp16.
I'm trying to handle the code model issue for loongarch64 target. If the code model is not set properly, it will have R_LARCH_B26 overflow problem now.
I managed to bootstrap a loongarch64-linux-musl zig with some patch like this on zig:
diff --git a/lib/libc/glibc/sysdeps/loongarch/start.S b/lib/libc/glibc/sysdeps/loongarch/start.S
index de7f9645cf..976dd92178 100644
--- a/lib/libc/glibc/sysdeps/loongarch/start.S
+++ b/lib/libc/glibc/sysdeps/loongarch/start.S
@@ -56,7 +56,7 @@ ENTRY (ENTRY_POINT)
/* Terminate call stack by noting ra is undefined. Use a dummy
.cfi_label to force starting the FDE. */
- .cfi_label .Ldummy
+ /* .cfi_label .Ldummy */
cfi_undefined (1)
or a5, a0, zero /* rtld_fini */
diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig
index 233cf7e3eb..80e37c1ad3 100644
--- a/src/codegen/llvm.zig
+++ b/src/codegen/llvm.zig
@@ -11799,6 +11799,7 @@ fn backendSupportsF16(target: std.Target) bool {
.mips64,
.mips64el,
.s390x,
+ .loongarch64,
=> false,
.aarch64,
.aarch64_be,
However, when trying to use this zig to build a simple hello world C file
#include <stdio.h>
int main() {
printf("Hello, World!\n");
return 0;
}
with
zig cc hello.c
I got the following error. But this doesn't happen on x86_64 zig.
#0 0x000000000a435b18 in ZigLLVMTargetMachineEmitToFile (targ_machine_ref=0x7fffe7ec9f90,
module_ref=0x7fffe6ffff90, error_message=0x7fffeef32050,
options=<error reading variable: Cannot access memory at address 0x0>)
at /Users/yxd/playspace/zig/src/zig_llvm.cpp:218
#1 0x0000000009860f30 in codegen.llvm.Object.emit (self=<optimized out>, options=...)
at /Users/yxd/playspace/zig/src/codegen/llvm.zig:1317
#2 0x000000000985f210 in Compilation.emitLlvmObject (comp=0x7ffff7fe6c10, arena=...,
default_emit=..., bin_emit_loc=..., llvm_object=0x7fffedf0c1d0) at Compilation.zig:2756
#3 0x0000000009938304 in link.File.emitLlvmObject (arena=..., llvm_object=0x0,
prog_node=...) at link.zig:1032
#4 link.Elf.flushModule (self=0x7fffedf28e70, arena=..., tid=main, prog_node=...)
at /Users/yxd/playspace/zig/src/link/Elf.zig:992
#5 0x000000000985ccc8 in link.File.flushModule (base=0x7fffedf292d0, tid=main)
at link.zig:635
#6 link.File.linkAsArchive (base=0x7fffedf292d0, tid=main) at link.zig:762
#7 link.File.flush (base=<optimized out>, arena=..., tid=main, prog_node=...)
at link.zig:619
#8 0x000000000985b4cc in Compilation.flush (comp=0x7ffff7fe6c10, arena=..., tid=main,
prog_node=...) at Compilation.zig:2446
#9 0x000000000980acd8 in Compilation.update (comp=0x7ffff7fe6c10, main_progress_node=...)
at Compilation.zig:2396
#10 0x0000000009ffc598 in Compilation.updateSubCompilation (parent_comp=0x7fffeff43770,
sub_comp=0x7ffff7fe6c10, misc_task=compiler_rt) at Compilation.zig:6274
#11 0x000000000a009054 in Compilation.buildOutputFromZig (comp=0x7fffeff43770,
output_mode=<optimized out>, out=0x7fffeff43cf8, misc_task_tag=compiler_rt,
prog_node=...) at Compilation.zig:6413
#12 0x0000000009fceb84 in Compilation.buildRt (comp=0x7fffeff43770, misc_task=compiler_rt,
output_mode=Exe, out=0x0,
prog_node=<error reading variable: Cannot access memory at address 0x0>)
at Compilation.zig:4612
#13 0x0000000009fcea54 in Thread.WaitGroup.spawnManager__anon_193170.Manager.run (
wg_inner=0x7ffffffe66d8, args_inner=...)
at /Users/yxd/playspace/zig-bootstrap/out/host/lib/zig/std/Thread/WaitGroup.zig:62
#14 Thread.callFn__anon_390026 (args=...)
at /Users/yxd/playspace/zig-bootstrap/out/host/lib/zig/std/Thread.zig:409
#15 Thread.PosixThreadImpl.spawn__anon_319169.Instance.entryFn (raw_arg=0x7ffff7fbb800)
at /Users/yxd/playspace/zig-bootstrap/out/host/lib/zig/std/Thread.zig:678
#16 0x000000000a4d3050 in start (p=0x7fffeef378f0)
at /Users/yxd/playspace/zig-bootstrap/out/host/lib/zig/libc/musl/src/thread/pthread_create.c:207
#17 0x00000000095775b4 in __clone ()
at /Users/yxd/playspace/zig-bootstrap/out/host/lib/zig/libc/musl/src/thread/loongarch64/clone.s:27
Looking into this.