-
Notifications
You must be signed in to change notification settings - Fork 12.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Rust ppc64 requires AltiVec, which is not available on PowerPC e5500 #59040
Comments
STVX is an AltiVec instruction for vector store, which should have broad support. What is your target CPU model that you ran this on? |
powerpc t1042 |
OK, assuming you mean this QorIQ T1042, then its e5500 is indeed lacking:
Rust uses the default "ppc64" CPU in LLVM, which is defined with AltiVec. There is also a specific "e5500" CPU, which you could choose with |
Maybe we should consider changing ppc64 baseline? Debian ppc64 supports e5500, for example. |
I've created a template Rust project for cross compiling for E5500 processor using xargo. Hopefully xargo will be integrated in cargo in the future. |
rustc -Vv
rustc 1.35.0-nightly (88f755f 2019-03-07)
binary: rustc
commit-hash: 88f755f
commit-date: 2019-03-07
host: x86_64-unknown-linux-gnu
release: 1.35.0-nightly
LLVM version: 8.0
strace log:
munmap(0x3fffa2913000, 14223) = 0
set_tid_address(0x3fffa290c0d0) = 3111
set_robust_list(0x3fffa290c0e0, 24) = 0
rt_sigaction(SIGRTMIN, {0x3fffa288f1c0, [], SA_SIGINFO}, NULL, 8) = 0
rt_sigaction(SIGRT_1, {0x3fffa288f1d8, [], SA_RESTART|SA_SIGINFO}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0
ugetrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=RLIM64_INFINITY}) = 0
--- SIGILL {si_signo=SIGILL, si_code=ILL_ILLOPC, si_addr=0x37149e34} ---
+++ killed by SIGILL (core dumped) +++
Illegal instruction (core dumped)
(gdb) b reset_sigpipe
Function "reset_sigpipe" not defined.
Make breakpoint pending on future shared library load? (y or [n]) y
Breakpoint 1 (reset_sigpipe) pending.
(gdb) r
Starting program: /root/xx
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".
Program received signal SIGILL, Illegal instruction.
0x0000000020017e34 in reset_sigpipe () at src/libstd/sys/unix/mod.rs:77
77 src/libstd/sys/unix/mod.rs: No such file or directory.
(gdb) r
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /root/xx
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".
Breakpoint 1, lang_start_internal () at src/libstd/rt.rs:30
30 src/libstd/rt.rs: No such file or directory.
(gdb) s
init () at src/libstd/rt.rs:30
30 in src/libstd/rt.rs
(gdb) disassemble
Dump of assembler code for function lang_start_internal:
0x0000000020017dec <+0>: mflr r0
0x0000000020017df0 <+4>: std r0,16(r1)
0x0000000020017df4 <+8>: stdu r1,-512(r1)
0x0000000020017df8 <+12>: li r7,416
0x0000000020017dfc <+16>: std r3,120(r1)
=> 0x0000000020017e00 <+20>: li r3,13
0x0000000020017e04 <+24>: std r4,128(r1)
0x0000000020017e08 <+28>: li r4,1
0x0000000020017e0c <+32>: std r23,440(r1)
0x0000000020017e10 <+36>: std r24,448(r1)
0x0000000020017e14 <+40>: std r25,456(r1)
0x0000000020017e18 <+44>: std r26,464(r1)
0x0000000020017e1c <+48>: std r27,472(r1)
0x0000000020017e20 <+52>: std r28,480(r1)
0x0000000020017e24 <+56>: std r29,488(r1)
0x0000000020017e28 <+60>: mr r29,r5
0x0000000020017e2c <+64>: std r30,496(r1)
0x0000000020017e30 <+68>: mr r30,r6
0x0000000020017e34 <+72>: stvx v31,r1,r7
0x0000000020017e38 <+76>: bl 0x20008fa0 <0000097b.plt_call.signal@@GLIBC_2.3>
0x0000000020017e3c <+80>: ld r2,40(r1)
---Type to continue, or q to quit---q
Quit
(gdb) c
Continuing.
Program received signal SIGILL, Illegal instruction.
0x0000000020017e34 in reset_sigpipe () at src/libstd/sys/unix/mod.rs:77
77 src/libstd/sys/unix/mod.rs: No such file or directory.
readelf -V xx
Version symbols section '.gnu.version' contains 89 entries:
Addr: 00000000000010f8 Offset: 0x0010f8 Link: 5 (.dynsym)
000: 0 (local) 0 (local) 0 (local) d (GLIBC_2.22)
004: 2 (GLIBC_2.3) 2 (GLIBC_2.3) 2 (GLIBC_2.3) 2 (GLIBC_2.3)
008: 3 (GCC_3.3) 4 (GLIBC_2.3) 4 (GLIBC_2.3) 3 (GCC_3.3)
00c: 2 (GLIBC_2.3) 0 (local) 4 (GLIBC_2.3) 4 (GLIBC_2.3)
010: 2 (GLIBC_2.3) 4 (GLIBC_2.3) 2 (GLIBC_2.3) 2 (GLIBC_2.3)
014: 5 (GLIBC_2.18) 6 (GLIBC_2.3.4) 7 (GCC_3.0) 7 (GCC_3.0)
018: 7 (GCC_3.0) 8 (GLIBC_2.3.2) 2 (GLIBC_2.3) 4 (GLIBC_2.3)
01c: 9 (GLIBC_2.3) 2 (GLIBC_2.3) a (GCC_4.2.0) 7 (GCC_3.0)
020: 8 (GLIBC_2.3.2) 2 (GLIBC_2.3) 2 (GLIBC_2.3) 4 (GLIBC_2.3)
024: 2 (GLIBC_2.3) 4 (GLIBC_2.3) 4 (GLIBC_2.3) 0 (local)
028: 4 (GLIBC_2.3) 2 (GLIBC_2.3) 4 (GLIBC_2.3) 4 (GLIBC_2.3)
02c: 8 (GLIBC_2.3.2) 2 (GLIBC_2.3) 4 (GLIBC_2.3) 2 (GLIBC_2.3)
030: 2 (GLIBC_2.3) 4 (GLIBC_2.3) b (GLIBC_2.4) 4 (GLIBC_2.3)
034: 4 (GLIBC_2.3) 2 (GLIBC_2.3) 4 (GLIBC_2.3) 2 (GLIBC_2.3)
038: c (GLIBC_2.3.3) 4 (GLIBC_2.3) 4 (GLIBC_2.3) 2 (GLIBC_2.3)
03c: 4 (GLIBC_2.3) 4 (GLIBC_2.3) 2 (GLIBC_2.3) 4 (GLIBC_2.3)
040: 2 (GLIBC_2.3) 7 (GCC_3.0) 7 (GCC_3.0) 4 (GLIBC_2.3)
044: 4 (GLIBC_2.3) 2 (GLIBC_2.3) 8 (GLIBC_2.3.2) 2 (GLIBC_2.3)
048: 2 (GLIBC_2.3) 0 (local) 2 (GLIBC_2.3) 0 (local)
04c: 7 (GCC_3.0) 2 (GLIBC_2.3) 2 (GLIBC_2.3) 7 (GCC_3.0)
050: 2 (GLIBC_2.3) 4 (GLIBC_2.3) 2 (GLIBC_2.3) 4 (GLIBC_2.3)
054: 4 (GLIBC_2.3) 7 (GCC_3.0) 1 (global) 1 (global)
058: 1 (global)
Version needs section '.gnu.version_r' contains 5 entries:
Addr: 0x00000000000011b0 Offset: 0x0011b0 Link: 6 (.dynstr)
000000: Version: 1 File: ld64.so.1 Cnt: 1
0x0010: Name: GLIBC_2.22 Flags: none Version: 13
0x0020: Version: 1 File: libdl.so.2 Cnt: 1
0x0030: Name: GLIBC_2.3 Flags: none Version: 9
0x0040: Version: 1 File: libpthread.so.0 Cnt: 3
0x0050: Name: GLIBC_2.3.3 Flags: none Version: 12
0x0060: Name: GLIBC_2.3.2 Flags: none Version: 8
0x0070: Name: GLIBC_2.3 Flags: none Version: 4
0x0080: Version: 1 File: libgcc_s.so.1 Cnt: 3
0x0090: Name: GCC_4.2.0 Flags: none Version: 10
0x00a0: Name: GCC_3.0 Flags: none Version: 7
0x00b0: Name: GCC_3.3 Flags: none Version: 3
0x00c0: Version: 1 File: libc.so.6 Cnt: 4
0x00d0: Name: GLIBC_2.4 Flags: none Version: 11
0x00e0: Name: GLIBC_2.3.4 Flags: none Version: 6
0x00f0: Name: GLIBC_2.18 Flags: none Version: 5
0x0100: Name: GLIBC_2.3 Flags: none Version: 2
Version needs section '.gnu.version_r' contains 5 entries:
Addr: 0x00000000000011b0 Offset: 0x0011b0 Link: 6 (.dynstr)
000000: Version: 1 File: ld64.so.1 Cnt: 1
0x0010: Name: GLIBC_2.22 Flags: none Version: 13
0x0020: Version: 1 File: libdl.so.2 Cnt: 1
0x0030: Name: GLIBC_2.3 Flags: none Version: 9
0x0040: Version: 1 File: libpthread.so.0 Cnt: 3
0x0050: Name: GLIBC_2.3.3 Flags: none Version: 12
0x0060: Name: GLIBC_2.3.2 Flags: none Version: 8
0x0070: Name: GLIBC_2.3 Flags: none Version: 4
0x0080: Version: 1 File: libgcc_s.so.1 Cnt: 3
0x0090: Name: GCC_4.2.0 Flags: none Version: 10
0x00a0: Name: GCC_3.0 Flags: none Version: 7
0x00b0: Name: GCC_3.3 Flags: none Version: 3
0x00c0: Version: 1 File: libc.so.6 Cnt: 4
0x00d0: Name: GLIBC_2.4 Flags: none Version: 11
0x00e0: Name: GLIBC_2.3.4 Flags: none Version: 6
0x00f0: Name: GLIBC_2.18 Flags: none Version: 5
0x0100: Name: GLIBC_2.3 Flags: none Version: 2
The text was updated successfully, but these errors were encountered: