Skip to content
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

Aiken binaries issue on Intel CPUs #9

Open
2072 opened this issue Sep 22, 2024 · 0 comments
Open

Aiken binaries issue on Intel CPUs #9

2072 opened this issue Sep 22, 2024 · 0 comments

Comments

@2072
Copy link

2072 commented Sep 22, 2024

Just noticed something very strange on all my Intel based machines when installing aiken through aikup (this a new problem that didn't happen a few weeks ago):

aiken new 2072/test
cd test
aiken buid

yields:
Illegal instruction (core dumped)

a gdb trace of the issue gives the following

Reading symbols from /root/.aiken/bin/aiken...
(No debugging symbols found in /root/.aiken/bin/aiken)
[New LWP 56999]
[New LWP 56998]
[New LWP 57002]
[New LWP 56996]
[New LWP 57000]
[New LWP 57003]
[New LWP 56995]
[New LWP 56997]
[New LWP 57001]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `aiken build'.
Program terminated with signal SIGILL, Illegal instruction.
#0  0x0000561e4ea4d06e in __mulx_mont_384 ()
[Current thread is 1 (Thread 0x7f21364b06c0 (LWP 56999))]
(gdb) bt
#0  0x0000561e4ea4d06e in __mulx_mont_384 ()
#1  0x0000561e4ea4cfeb in mulx_mont_384 ()
#2  0x0000561e4ea3e5e0 in POINTonE1_Uncompress_Z ()
#3  0x0000561e4deb5305 in aiken_lang::parser::literal::bytearray::parser::{{closure}} ()
#4  0x0000561e4ddf761e in <chumsky::debug::Silent as chumsky::debug::Debugger>::invoke ()
#5  0x0000561e4e0111ff in <chumsky::primitive::Choice<(H_,I_,J_,K_,L_,M_,N_,O_,P_,Q_,S_,T_,U_,V_,W_,X_,Y_,Z_),E> as chumsky::Parser<I,O>>::parse_inner_silent ()
#6  0x0000561e4e09e4da in <&T as chumsky::Parser<I,O>>::parse_inner_silent ()
#7  0x0000561e4dda0ab1 in <chumsky::debug::Silent as chumsky::debug::Debugger>::invoke ()
#8  0x0000561e4e08e299 in <&T as chumsky::Parser<I,O>>::parse_inner_silent ()
#9  0x0000561e4e0da3de in <chumsky::combinator::Foldr<A,F,O,U> as chumsky::Parser<I,U>>::parse_inner_silent ()
#10 0x0000561e4e099baa in <&T as chumsky::Parser<I,O>>::parse_inner_silent ()
#11 0x0000561e4e0d8a53 in <chumsky::combinator::Foldl<A,F,O,U> as chumsky::Parser<I,O>>::parse_inner_silent ()
#12 0x0000561e4e09c847 in <&T as chumsky::Parser<I,O>>::parse_inner_silent ()
#13 0x0000561e4e0d7d93 in <chumsky::combinator::Foldl<A,F,O,U> as chumsky::Parser<I,O>>::parse_inner_silent ()
#14 0x0000561e4e09c15a in <&T as chumsky::Parser<I,O>>::parse_inner_silent ()
#15 0x0000561e4e0d83f3 in <chumsky::combinator::Foldl<A,F,O,U> as chumsky::Parser<I,O>>::parse_inner_silent ()
#16 0x0000561e4dd72fbf in <chumsky::debug::Silent as chumsky::debug::Debugger>::invoke ()
#17 0x0000561e4e08f02e in <&T as chumsky::Parser<I,O>>::parse_inner_silent ()
#18 0x0000561e4ddde453 in <chumsky::debug::Silent as chumsky::debug::Debugger>::invoke ()
#19 0x0000561e4e0d7073 in <chumsky::combinator::Map<A,F,O> as chumsky::Parser<I,U>>::parse_inner_silent ()
#20 0x0000561e4dd72fbf in <chumsky::debug::Silent as chumsky::debug::Debugger>::invoke ()
#21 0x0000561e4e09dd7e in <&T as chumsky::Parser<I,O>>::parse_inner_silent ()
#22 0x0000561e4dd8bc63 in <chumsky::debug::Silent as chumsky::debug::Debugger>::invoke ()
#23 0x0000561e4e0d6d63 in <chumsky::combinator::Map<A,F,O> as chumsky::Parser<I,U>>::parse_inner_silent ()
#24 0x0000561e4e097874 in <&T as chumsky::Parser<I,O>>::parse_inner_silent ()
#25 0x0000561e4e0b51d0 in <chumsky::combinator::Foldl<A,F,O,U> as chumsky::Parser<I,O>>::parse_inner_silent ()
#26 0x0000561e4e0b317e in <chumsky::recursive::Recursive<I,O,E> as chumsky::Parser<I,O>>::parse_inner_silent ()
#27 0x0000561e4e095efa in <&T as chumsky::Parser<I,O>>::parse_inner_silent ()
#28 0x0000561e4e0b4073 in <chumsky::combinator::Foldl<A,F,O,U> as chumsky::Parser<I,O>>::parse_inner_silent ()
#29 0x0000561e4e0b317e in <chumsky::recursive::Recursive<I,O,E> as chumsky::Parser<I,O>>::parse_inner_silent ()
#30 0x0000561e4dd874fe in <chumsky::debug::Silent as chumsky::debug::Debugger>::invoke ()
#31 0x0000561e4e004dad in <chumsky::primitive::Choice<(U_,V_,W_,X_,Y_,Z_),E> as chumsky::Parser<I,O>>::parse_inner_silent ()
#32 0x0000561e4dd9924e in <chumsky::debug::Silent as chumsky::debug::Debugger>::invoke ()
#33 0x0000561e4e01dda8 in chumsky::parse_recovery_inner ()
#34 0x0000561e4e0b0e2b in chumsky::Parser::parse ()
#35 0x0000561e4e02c000 in aiken_lang::parser::module ()
#36 0x0000561e4dbb2b12 in core::ops::function::impls::<impl core::ops::function::FnMut<A> for &F>::call_mut ()
#37 0x0000561e4dbda8a4 in <rayon::iter::fold::FoldFolder<C,ID,F> as rayon::iter::plumbing::Folder<T>>::consume_iter ()
#38 0x0000561e4dbe7021 in rayon::iter::plumbing::bridge_producer_consumer::helper ()
#39 0x0000561e4dba5cc8 in rayon_core::join::join_context::{{closure}} ()
(gdb) disassemble __mulx_mont_384
Dump of assembler code for function __mulx_mont_384:
   0x000055ba6780b020 <+0>:     endbr64
   0x000055ba6780b024 <+4>:     mulx   %r15,%r14,%r10
   0x000055ba6780b029 <+9>:     mulx   %rax,%r15,%r11
   0x000055ba6780b02e <+14>:    add    %r14,%r9
   0x000055ba6780b031 <+17>:    mulx   %r12,%rax,%r12
   0x000055ba6780b036 <+22>:    adc    %r15,%r10
   0x000055ba6780b039 <+25>:    mulx   %rdi,%rdi,%r13
   0x000055ba6780b03e <+30>:    adc    %rax,%r11
   0x000055ba6780b041 <+33>:    mulx   %rbp,%rbp,%r14
   0x000055ba6780b046 <+38>:    mov    0x8(%rbx),%rdx
   0x000055ba6780b04a <+42>:    adc    %rdi,%r12
   0x000055ba6780b04d <+45>:    adc    %rbp,%r13
   0x000055ba6780b050 <+48>:    adc    $0x0,%r14
   0x000055ba6780b054 <+52>:    xor    %r15,%r15
   0x000055ba6780b057 <+55>:    mov    %r8,0x10(%rsp)
   0x000055ba6780b05c <+60>:    imul   0x8(%rsp),%r8
   0x000055ba6780b062 <+66>:    xor    %rax,%rax
   0x000055ba6780b065 <+69>:    mulx   0x80(%rsi),%rdi,%rbp
=> 0x000055ba6780b06e <+78>:    adox   %rdi,%r9
   0x000055ba6780b074 <+84>:    adcx   %rbp,%r10

one of the Intel CPU I tested on is an old intel CPUs (i7-4770). All my linux systems are Debian Bookworm.

Installing Aiken using cargo instead works.

edit: added disassembly of __mulx_mont_384, CPU model and Linux distribution.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant