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

powerpc-unknown-linux-gnuspe illegal instruction #96394

Closed
skydig opened this issue Apr 25, 2022 · 18 comments
Closed

powerpc-unknown-linux-gnuspe illegal instruction #96394

skydig opened this issue Apr 25, 2022 · 18 comments
Labels
C-bug Category: This is a bug. O-PowerPC Target: PowerPC processors

Comments

@skydig
Copy link

skydig commented Apr 25, 2022

@alexcrichton
I use following command to build std for powerpc gnuspe,

cargo build -Z build-std --target=powerpc-unknown-linux-gnuspe

and run under target, crash is as following,

Program received signal SIGILL, Illegal instruction.
0x204f2610 in core::sync::atomic::atomic_compare_exchange::hdd78233f59efc1d2 ()
at /usr/share/rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/sync/atomic.rs:2643
2643 /usr/share/rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/sync/atomic.rs: No such file or directory.
in /usr/share/rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/sync/atomic.rs
(gdb) quit

please help

thanks

@skydig skydig added the C-bug Category: This is a bug. label Apr 25, 2022
@bjorn3
Copy link
Member

bjorn3 commented Apr 27, 2022

What cpu are you trying to run it on? I suspect your cpu doesn't support an atomic instruction LLVM emits.

@bjorn3 bjorn3 added the O-PowerPC Target: PowerPC processors label Apr 27, 2022
@skydig
Copy link
Author

skydig commented Apr 28, 2022

@bjorn3 its P1010
how to disable atomic support?

@bjorn3
Copy link
Member

bjorn3 commented Apr 28, 2022

It seems to be running an e500 cpu core produced by nxp which according to the reference manual supports atonic instructions. Could you use the disassemble command in gdb to show the exact crashing instruction? As for disabling atomic usage you need to change the target spec or provide a custom one in json format. Also note that any library that depends on atomics will not compile in that case. We don't emulate them using a lock if they are unavailable.

@skydig
Copy link
Author

skydig commented Apr 29, 2022

@bjorn3
thanks, i paste assemble code,
this line
=> 0x2060d610 <+892>: lwsync
make system crash

Program received signal SIGILL, Illegal instruction.
0x2060d610 in core::sync::atomic::atomic_compare_exchange::hdd78233f59efc1d2 ()
at /usr/share/rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/sync/atomic.rs:2643
2643 in /usr/share/rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/sync/atomic.rs
(gdb) disassemble
Dump of assembler code for function _ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E:
0x2060d294 <+0>: mflr r0
0x2060d298 <+4>: stw r0,4(r1)
0x2060d29c <+8>: stwu r1,-208(r1)
0x2060d2a0 <+12>: stw r30,200(r1)
0x2060d2a4 <+16>: stw r5,64(r1)
0x2060d2a8 <+20>: stw r4,68(r1)
0x2060d2ac <+24>: stw r3,72(r1)
0x2060d2b0 <+28>: bl 0x2060d2b4 <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+32>
0x2060d2b4 <+32>: mflr r30
0x2060d2b8 <+36>: lwz r8,-36(r30)
0x2060d2bc <+40>: add r30,r8,r30
0x2060d2c0 <+44>: stw r3,176(r1)
0x2060d2c4 <+48>: stw r4,180(r1)
0x2060d2c8 <+52>: stw r5,184(r1)
0x2060d2cc <+56>: stb r6,190(r1)
0x2060d2d0 <+60>: stb r7,191(r1)
0x2060d2d4 <+64>: stb r6,96(r1)
0x2060d2d8 <+68>: stb r7,97(r1)
0x2060d2dc <+72>: lbz r3,96(r1)
0x2060d2e0 <+76>: stw r3,76(r1)
---Type to continue, or q to quit---
0x2060d2e4 <+80>: lwz r3,76(r1)
0x2060d2e8 <+84>: rlwinm r3,r3,2,0,29
0x2060d2ec <+88>: lwz r4,-32600(r30)
0x2060d2f0 <+92>: lwzx r3,r3,r4
0x2060d2f4 <+96>: add r3,r3,r4
0x2060d2f8 <+100>: mtctr r3
0x2060d2fc <+104>: bctr
0x2060d300 <+108>: lbz r3,97(r1)
0x2060d304 <+112>: cmplwi r3,0
0x2060d308 <+116>: beq 0x2060d6d8 <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+1092>
0x2060d30c <+120>: b 0x2060d39c <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+264>
0x2060d310 <+124>: lbz r3,97(r1)
0x2060d314 <+128>: cmplwi r3,0
0x2060d318 <+132>: beq 0x2060d67c <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+1000>
0x2060d31c <+136>: b 0x2060d39c <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+264>
0x2060d320 <+140>: lbz r3,97(r1)
0x2060d324 <+144>: stw r3,60(r1)
0x2060d328 <+148>: cmplwi r3,0
0x2060d32c <+152>: beq 0x2060d5c4 <_ZN4core4sync6atomic23atomic_compare---Type to continue, or q to quit---
_exchange17hdd78233f59efc1d2E+816>
0x2060d330 <+156>: b 0x2060d334 <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+160>
0x2060d334 <+160>: lwz r3,60(r1)
0x2060d338 <+164>: cmplwi r3,2
0x2060d33c <+168>: beq 0x2060d620 <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+908>
0x2060d340 <+172>: b 0x2060d39c <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+264>
0x2060d344 <+176>: lbz r3,97(r1)
0x2060d348 <+180>: stw r3,56(r1)
0x2060d34c <+184>: cmplwi r3,0
0x2060d350 <+188>: beq 0x2060d504 <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+624>
0x2060d354 <+192>: b 0x2060d358 <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+196>
0x2060d358 <+196>: lwz r3,56(r1)
0x2060d35c <+200>: cmplwi r3,2
0x2060d360 <+204>: beq 0x2060d564 <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+720>
0x2060d364 <+208>: b 0x2060d39c <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+264>
0x2060d368 <+212>: lbz r3,97(r1)
---Type to continue, or q to quit---
0x2060d36c <+216>: stw r3,52(r1)
0x2060d370 <+220>: cmplwi r3,0
0x2060d374 <+224>: beq 0x2060d3c0 <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+300>
0x2060d378 <+228>: b 0x2060d37c <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+232>
0x2060d37c <+232>: lwz r3,52(r1)
0x2060d380 <+236>: cmplwi r3,2
0x2060d384 <+240>: beq 0x2060d420 <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+396>
0x2060d388 <+244>: b 0x2060d38c <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+248>
0x2060d38c <+248>: lwz r3,52(r1)
0x2060d390 <+252>: cmplwi r3,4
0x2060d394 <+256>: beq 0x2060d480 <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+492>
0x2060d398 <+260>: b 0x2060d39c <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+264>
0x2060d39c <+264>: lbz r3,97(r1)
0x2060d3a0 <+268>: stw r3,48(r1)
0x2060d3a4 <+272>: cmplwi r3,1
0x2060d3a8 <+276>: beq 0x2060d74c <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+1208>
---Type to continue, or q to quit---
0x2060d3ac <+280>: b 0x2060d3b0 <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+284>
0x2060d3b0 <+284>: lwz r3,48(r1)
0x2060d3b4 <+288>: cmplwi r3,3
0x2060d3b8 <+292>: beq 0x2060d768 <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+1236>
0x2060d3bc <+296>: b 0x2060d730 <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+1180>
0x2060d3c0 <+300>: sync
0x2060d3c4 <+304>: lwz r3,68(r1)
0x2060d3c8 <+308>: lwz r4,72(r1)
0x2060d3cc <+312>: lwarx r4,0,r4
0x2060d3d0 <+316>: stw r4,44(r1)
0x2060d3d4 <+320>: cmpw r3,r4
0x2060d3d8 <+324>: bne 0x2060d3f0 <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+348>
0x2060d3dc <+328>: lwz r3,64(r1)
0x2060d3e0 <+332>: lwz r4,72(r1)
0x2060d3e4 <+336>: stwcx. r3,0,r4
0x2060d3e8 <+340>: bne 0x2060d3c4 <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+304>
0x2060d3ec <+344>: b 0x2060d3fc <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+360>
---Type to continue, or q to quit---
0x2060d3f0 <+348>: lwz r3,44(r1)
0x2060d3f4 <+352>: lwz r4,72(r1)
0x2060d3f8 <+356>: stwcx. r3,0,r4
0x2060d3fc <+360>: lwz r4,44(r1)
0x2060d400 <+364>: lwz r3,68(r1)
0x2060d404 <+368>: xor r3,r4,r3
0x2060d408 <+372>: cntlzw r3,r3
0x2060d40c <+376>: rlwinm r3,r3,27,5,31
0x2060d410 <+380>: lwsync
0x2060d414 <+384>: stw r4,88(r1)
0x2060d418 <+388>: stb r3,92(r1)
0x2060d41c <+392>: b 0x2060d4e0 <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+588>
0x2060d420 <+396>: sync
0x2060d424 <+400>: lwz r3,68(r1)
0x2060d428 <+404>: lwz r4,72(r1)
0x2060d42c <+408>: lwarx r4,0,r4
0x2060d430 <+412>: stw r4,40(r1)
0x2060d434 <+416>: cmpw r3,r4
0x2060d438 <+420>: bne 0x2060d450 <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+444>
0x2060d43c <+424>: lwz r3,64(r1)
0x2060d440 <+428>: lwz r4,72(r1)
---Type to continue, or q to quit---
0x2060d444 <+432>: stwcx. r3,0,r4
0x2060d448 <+436>: bne 0x2060d424 <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+400>
0x2060d44c <+440>: b 0x2060d45c <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+456>
0x2060d450 <+444>: lwz r3,40(r1)
0x2060d454 <+448>: lwz r4,72(r1)
0x2060d458 <+452>: stwcx. r3,0,r4
0x2060d45c <+456>: lwz r4,40(r1)
0x2060d460 <+460>: lwz r3,68(r1)
0x2060d464 <+464>: xor r3,r4,r3
0x2060d468 <+468>: cntlzw r3,r3
0x2060d46c <+472>: rlwinm r3,r3,27,5,31
0x2060d470 <+476>: lwsync
0x2060d474 <+480>: stw r4,88(r1)
0x2060d478 <+484>: stb r3,92(r1)
0x2060d47c <+488>: b 0x2060d4e0 <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+588>
0x2060d480 <+492>: sync
0x2060d484 <+496>: lwz r3,68(r1)
0x2060d488 <+500>: lwz r4,72(r1)
0x2060d48c <+504>: lwarx r4,0,r4
0x2060d490 <+508>: stw r4,36(r1)
---Type to continue, or q to quit---
0x2060d494 <+512>: cmpw r3,r4
0x2060d498 <+516>: bne 0x2060d4b0 <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+540>
0x2060d49c <+520>: lwz r3,64(r1)
0x2060d4a0 <+524>: lwz r4,72(r1)
0x2060d4a4 <+528>: stwcx. r3,0,r4
0x2060d4a8 <+532>: bne 0x2060d484 <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+496>
0x2060d4ac <+536>: b 0x2060d4bc <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+552>
0x2060d4b0 <+540>: lwz r3,36(r1)
0x2060d4b4 <+544>: lwz r4,72(r1)
0x2060d4b8 <+548>: stwcx. r3,0,r4
0x2060d4bc <+552>: lwz r4,36(r1)
0x2060d4c0 <+556>: lwz r3,68(r1)
0x2060d4c4 <+560>: xor r3,r4,r3
0x2060d4c8 <+564>: cntlzw r3,r3
0x2060d4cc <+568>: rlwinm r3,r3,27,5,31
0x2060d4d0 <+572>: lwsync
0x2060d4d4 <+576>: stw r4,88(r1)
0x2060d4d8 <+580>: stb r3,92(r1)
0x2060d4dc <+584>: b 0x2060d4e0 <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+588>
---Type to continue, or q to quit---
0x2060d4e0 <+588>: lwz r3,88(r1)
0x2060d4e4 <+592>: stw r3,32(r1)
0x2060d4e8 <+596>: stw r3,192(r1)
0x2060d4ec <+600>: lbz r4,92(r1)
0x2060d4f0 <+604>: clrlwi r3,r4,31
0x2060d4f4 <+608>: stb r4,199(r1)
0x2060d4f8 <+612>: cmplwi r3,0
0x2060d4fc <+616>: bne 0x2060d7c8 <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+1332>
0x2060d500 <+620>: b 0x2060d7b4 <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+1312>
0x2060d504 <+624>: lwsync
0x2060d508 <+628>: lwz r3,68(r1)
0x2060d50c <+632>: lwz r4,72(r1)
0x2060d510 <+636>: lwarx r4,0,r4
0x2060d514 <+640>: stw r4,28(r1)
0x2060d518 <+644>: cmpw r3,r4
0x2060d51c <+648>: bne 0x2060d534 <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+672>
0x2060d520 <+652>: lwz r3,64(r1)
0x2060d524 <+656>: lwz r4,72(r1)
0x2060d528 <+660>: stwcx. r3,0,r4
0x2060d52c <+664>: bne 0x2060d508 <_ZN4core4sync6atomic23atomic_compare---Type to continue, or q to quit---
_exchange17hdd78233f59efc1d2E+628>
0x2060d530 <+668>: b 0x2060d540 <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+684>
0x2060d534 <+672>: lwz r3,28(r1)
0x2060d538 <+676>: lwz r4,72(r1)
0x2060d53c <+680>: stwcx. r3,0,r4
0x2060d540 <+684>: lwz r4,28(r1)
0x2060d544 <+688>: lwz r3,68(r1)
0x2060d548 <+692>: xor r3,r4,r3
0x2060d54c <+696>: cntlzw r3,r3
0x2060d550 <+700>: rlwinm r3,r3,27,5,31
0x2060d554 <+704>: lwsync
0x2060d558 <+708>: stw r4,88(r1)
0x2060d55c <+712>: stb r3,92(r1)
0x2060d560 <+716>: b 0x2060d4e0 <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+588>
0x2060d564 <+720>: lwsync
0x2060d568 <+724>: lwz r3,68(r1)
0x2060d56c <+728>: lwz r4,72(r1)
0x2060d570 <+732>: lwarx r4,0,r4
0x2060d574 <+736>: stw r4,24(r1)
0x2060d578 <+740>: cmpw r3,r4
0x2060d57c <+744>: bne 0x2060d594 <_ZN4core4sync6atomic23atomic_compare---Type to continue, or q to quit---
_exchange17hdd78233f59efc1d2E+768>
0x2060d580 <+748>: lwz r3,64(r1)
0x2060d584 <+752>: lwz r4,72(r1)
0x2060d588 <+756>: stwcx. r3,0,r4
0x2060d58c <+760>: bne 0x2060d568 <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+724>
0x2060d590 <+764>: b 0x2060d5a0 <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+780>
0x2060d594 <+768>: lwz r3,24(r1)
0x2060d598 <+772>: lwz r4,72(r1)
0x2060d59c <+776>: stwcx. r3,0,r4
0x2060d5a0 <+780>: lwz r4,24(r1)
0x2060d5a4 <+784>: lwz r3,68(r1)
0x2060d5a8 <+788>: xor r3,r4,r3
0x2060d5ac <+792>: cntlzw r3,r3
0x2060d5b0 <+796>: rlwinm r3,r3,27,5,31
0x2060d5b4 <+800>: lwsync
0x2060d5b8 <+804>: stw r4,88(r1)
0x2060d5bc <+808>: stb r3,92(r1)
0x2060d5c0 <+812>: b 0x2060d4e0 <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+588>
0x2060d5c4 <+816>: lwz r3,68(r1)
0x2060d5c8 <+820>: lwz r4,72(r1)
---Type to continue, or q to quit---
0x2060d5cc <+824>: lwarx r4,0,r4
0x2060d5d0 <+828>: stw r4,20(r1)
0x2060d5d4 <+832>: cmpw r3,r4
0x2060d5d8 <+836>: bne 0x2060d5f0 <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+860>
0x2060d5dc <+840>: lwz r3,64(r1)
0x2060d5e0 <+844>: lwz r4,72(r1)
0x2060d5e4 <+848>: stwcx. r3,0,r4
0x2060d5e8 <+852>: bne 0x2060d5c4 <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+816>
0x2060d5ec <+856>: b 0x2060d5fc <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+872>
0x2060d5f0 <+860>: lwz r3,20(r1)
0x2060d5f4 <+864>: lwz r4,72(r1)
0x2060d5f8 <+868>: stwcx. r3,0,r4
0x2060d5fc <+872>: lwz r4,20(r1)
0x2060d600 <+876>: lwz r3,68(r1)
0x2060d604 <+880>: xor r3,r4,r3
0x2060d608 <+884>: cntlzw r3,r3
0x2060d60c <+888>: rlwinm r3,r3,27,5,31
=> 0x2060d610 <+892>: lwsync
0x2060d614 <+896>: stw r4,88(r1)
0x2060d618 <+900>: stb r3,92(r1)
---Type to continue, or q to quit---
0x2060d61c <+904>: b 0x2060d4e0 <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+588>
0x2060d620 <+908>: lwz r3,68(r1)
0x2060d624 <+912>: lwz r4,72(r1)
0x2060d628 <+916>: lwarx r4,0,r4
0x2060d62c <+920>: stw r4,16(r1)
0x2060d630 <+924>: cmpw r3,r4
0x2060d634 <+928>: bne 0x2060d64c <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+952>
0x2060d638 <+932>: lwz r3,64(r1)
0x2060d63c <+936>: lwz r4,72(r1)
0x2060d640 <+940>: stwcx. r3,0,r4
0x2060d644 <+944>: bne 0x2060d620 <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+908>
0x2060d648 <+948>: b 0x2060d658 <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+964>
0x2060d64c <+952>: lwz r3,16(r1)
0x2060d650 <+956>: lwz r4,72(r1)
0x2060d654 <+960>: stwcx. r3,0,r4
0x2060d658 <+964>: lwz r4,16(r1)
0x2060d65c <+968>: lwz r3,68(r1)
0x2060d660 <+972>: xor r3,r4,r3
0x2060d664 <+976>: cntlzw r3,r3
---Type to continue, or q to quit---
0x2060d668 <+980>: rlwinm r3,r3,27,5,31
0x2060d66c <+984>: lwsync
0x2060d670 <+988>: stw r4,88(r1)
0x2060d674 <+992>: stb r3,92(r1)
0x2060d678 <+996>: b 0x2060d4e0 <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+588>
0x2060d67c <+1000>: lwsync
0x2060d680 <+1004>: lwz r3,68(r1)
0x2060d684 <+1008>: lwz r4,72(r1)
0x2060d688 <+1012>: lwarx r4,0,r4
0x2060d68c <+1016>: stw r4,12(r1)
0x2060d690 <+1020>: cmpw r3,r4
0x2060d694 <+1024>: bne 0x2060d6ac <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+1048>
0x2060d698 <+1028>: lwz r3,64(r1)
0x2060d69c <+1032>: lwz r4,72(r1)
0x2060d6a0 <+1036>: stwcx. r3,0,r4
0x2060d6a4 <+1040>: bne 0x2060d680 <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+1004>
0x2060d6a8 <+1044>: b 0x2060d6b8 <_ZN4core4sync6atomic23atomic_compare_exchange17hdd78233f59efc1d2E+1060>
0x2060d6ac <+1048>: lwz r3,12(r1)
0x2060d6b0 <+1052>: lwz r4,72(r1)

@bjorn3
Copy link
Member

bjorn3 commented Apr 29, 2022

Looks like the e500 cpu doesn't support lwsync and needs the sync instruction instead. Does it work if you use RUSTFLAGS="-Ctarget-cpu=e500? According to https://reviews.llvm.org/D76614 that should cause LLVM to use sync instead of lwsync.

@mortenlj
Copy link

mortenlj commented Apr 29, 2022

I have a similar problem (or maybe the same?), but the disassembly seems to differ (I haven't used gdb much, so I'm not entirely sure I understand how to read it). I'm on a Synology DS213+ NAS with a FREESCALE QorIQ P1022 CPU (ppc e500 variant iirc).

gdb output
Starting program: /volume1/incomming/mqtt2file
warning: Unable to find libthread_db matching inferior's thread library, thread debugging will not be available.

Program received signal SIGILL, Illegal instruction.
0x206fa57c in core::sync::atomic::atomic_compare_exchange (dst=0x208b9484 <std::thread::ThreadId::new::GUARD>, old=0,
    new=1, success=core::sync::atomic::Ordering::Acquire, failure=core::sync::atomic::Ordering::Relaxed)
    at /home/mortenlj/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/sync/atomic.rs:2643
2643	/home/mortenlj/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/sync/atomic.rs: No such file or directory.
(gdb) disassemble
Dump of assembler code for function core::sync::atomic::atomic_compare_exchange:
   0x206fa200 <+0>:	mflr    r0
   0x206fa204 <+4>:	stw     r0,4(r1)
   0x206fa208 <+8>:	stwu    r1,-208(r1)
   0x206fa20c <+12>:	stw     r30,200(r1)
   0x206fa210 <+16>:	stw     r5,64(r1)
   0x206fa214 <+20>:	stw     r4,68(r1)
   0x206fa218 <+24>:	stw     r3,72(r1)
   0x206fa21c <+28>:	bl      0x206fa220 <core::sync::atomic::atomic_compare_exchange+32>
   0x206fa220 <+32>:	mflr    r30
   0x206fa224 <+36>:	lwz     r8,-36(r30)
   0x206fa228 <+40>:	add     r30,r8,r30
   0x206fa22c <+44>:	stw     r3,176(r1)
   0x206fa230 <+48>:	stw     r4,180(r1)
   0x206fa234 <+52>:	stw     r5,184(r1)
   0x206fa238 <+56>:	stb     r6,190(r1)
   0x206fa23c <+60>:	stb     r7,191(r1)
   0x206fa240 <+64>:	stb     r6,96(r1)
   0x206fa244 <+68>:	stb     r7,97(r1)
   0x206fa248 <+72>:	lbz     r3,96(r1)
   0x206fa24c <+76>:	stw     r3,76(r1)
   0x206fa250 <+80>:	lwz     r3,76(r1)
   0x206fa254 <+84>:	rlwinm  r3,r3,2,0,29
   0x206fa258 <+88>:	lwz     r4,-32596(r30)
   0x206fa25c <+92>:	lwzx    r3,r3,r4
   0x206fa260 <+96>:	add     r3,r3,r4
   0x206fa264 <+100>:	mtctr   r3
   0x206fa268 <+104>:	bctr
   0x206fa26c <+108>:	lbz     r3,97(r1)
   0x206fa270 <+112>:	cmplwi  r3,0
   0x206fa274 <+116>:	beq-    0x206fa644 <core::sync::atomic::atomic_compare_exchange+1092>
   0x206fa278 <+120>:	b       0x206fa308 <core::sync::atomic::atomic_compare_exchange+264>
   0x206fa27c <+124>:	lbz     r3,97(r1)
   0x206fa280 <+128>:	cmplwi  r3,0
   0x206fa284 <+132>:	beq-    0x206fa5e8 <core::sync::atomic::atomic_compare_exchange+1000>
   0x206fa288 <+136>:	b       0x206fa308 <core::sync::atomic::atomic_compare_exchange+264>
   0x206fa28c <+140>:	lbz     r3,97(r1)
   0x206fa290 <+144>:	stw     r3,60(r1)
   0x206fa294 <+148>:	cmplwi  r3,0
   0x206fa298 <+152>:	beq-    0x206fa530 <core::sync::atomic::atomic_compare_exchange+816>
   0x206fa29c <+156>:	b       0x206fa2a0 <core::sync::atomic::atomic_compare_exchange+160>
   0x206fa2a0 <+160>:	lwz     r3,60(r1)
   0x206fa2a4 <+164>:	cmplwi  r3,2
   0x206fa2a8 <+168>:	beq-    0x206fa58c <core::sync::atomic::atomic_compare_exchange+908>
   0x206fa2ac <+172>:	b       0x206fa308 <core::sync::atomic::atomic_compare_exchange+264>
   0x206fa2b0 <+176>:	lbz     r3,97(r1)
   0x206fa2b4 <+180>:	stw     r3,56(r1)
   0x206fa2b8 <+184>:	cmplwi  r3,0
   0x206fa2bc <+188>:	beq-    0x206fa470 <core::sync::atomic::atomic_compare_exchange+624>
   0x206fa2c0 <+192>:	b       0x206fa2c4 <core::sync::atomic::atomic_compare_exchange+196>
   0x206fa2c4 <+196>:	lwz     r3,56(r1)
---Type <return> to continue, or q <return> to quit---
   0x206fa2c8 <+200>:	cmplwi  r3,2
   0x206fa2cc <+204>:	beq-    0x206fa4d0 <core::sync::atomic::atomic_compare_exchange+720>
   0x206fa2d0 <+208>:	b       0x206fa308 <core::sync::atomic::atomic_compare_exchange+264>
   0x206fa2d4 <+212>:	lbz     r3,97(r1)
   0x206fa2d8 <+216>:	stw     r3,52(r1)
   0x206fa2dc <+220>:	cmplwi  r3,0
   0x206fa2e0 <+224>:	beq-    0x206fa32c <core::sync::atomic::atomic_compare_exchange+300>
   0x206fa2e4 <+228>:	b       0x206fa2e8 <core::sync::atomic::atomic_compare_exchange+232>
   0x206fa2e8 <+232>:	lwz     r3,52(r1)
   0x206fa2ec <+236>:	cmplwi  r3,2
   0x206fa2f0 <+240>:	beq-    0x206fa38c <core::sync::atomic::atomic_compare_exchange+396>
   0x206fa2f4 <+244>:	b       0x206fa2f8 <core::sync::atomic::atomic_compare_exchange+248>
   0x206fa2f8 <+248>:	lwz     r3,52(r1)
   0x206fa2fc <+252>:	cmplwi  r3,4
   0x206fa300 <+256>:	beq-    0x206fa3ec <core::sync::atomic::atomic_compare_exchange+492>
   0x206fa304 <+260>:	b       0x206fa308 <core::sync::atomic::atomic_compare_exchange+264>
   0x206fa308 <+264>:	lbz     r3,97(r1)
   0x206fa30c <+268>:	stw     r3,48(r1)
   0x206fa310 <+272>:	cmplwi  r3,1
   0x206fa314 <+276>:	beq-    0x206fa6b8 <core::sync::atomic::atomic_compare_exchange+1208>
   0x206fa318 <+280>:	b       0x206fa31c <core::sync::atomic::atomic_compare_exchange+284>
   0x206fa31c <+284>:	lwz     r3,48(r1)
   0x206fa320 <+288>:	cmplwi  r3,3
   0x206fa324 <+292>:	beq-    0x206fa6d4 <core::sync::atomic::atomic_compare_exchange+1236>
   0x206fa328 <+296>:	b       0x206fa69c <core::sync::atomic::atomic_compare_exchange+1180>
   0x206fa32c <+300>:	msync
   0x206fa330 <+304>:	lwz     r3,68(r1)
   0x206fa334 <+308>:	lwz     r4,72(r1)
   0x206fa338 <+312>:	lwarx   r4,0,r4
   0x206fa33c <+316>:	stw     r4,44(r1)
   0x206fa340 <+320>:	cmpw    r3,r4
   0x206fa344 <+324>:	bne-    0x206fa35c <core::sync::atomic::atomic_compare_exchange+348>
   0x206fa348 <+328>:	lwz     r3,64(r1)
   0x206fa34c <+332>:	lwz     r4,72(r1)
   0x206fa350 <+336>:	stwcx.  r3,0,r4
   0x206fa354 <+340>:	bne+    0x206fa330 <core::sync::atomic::atomic_compare_exchange+304>
   0x206fa358 <+344>:	b       0x206fa368 <core::sync::atomic::atomic_compare_exchange+360>
   0x206fa35c <+348>:	lwz     r3,44(r1)
   0x206fa360 <+352>:	lwz     r4,72(r1)
   0x206fa364 <+356>:	stwcx.  r3,0,r4
   0x206fa368 <+360>:	lwz     r4,44(r1)
   0x206fa36c <+364>:	lwz     r3,68(r1)
   0x206fa370 <+368>:	xor     r3,r4,r3
   0x206fa374 <+372>:	cntlzw  r3,r3
   0x206fa378 <+376>:	rlwinm  r3,r3,27,5,31
   0x206fa37c <+380>:	.long 0x7c2004ac
   0x206fa380 <+384>:	stw     r4,88(r1)
   0x206fa384 <+388>:	stb     r3,92(r1)
   0x206fa388 <+392>:	b       0x206fa44c <core::sync::atomic::atomic_compare_exchange+588>
   0x206fa38c <+396>:	msync
   0x206fa390 <+400>:	lwz     r3,68(r1)
---Type <return> to continue, or q <return> to quit---
   0x206fa394 <+404>:	lwz     r4,72(r1)
   0x206fa398 <+408>:	lwarx   r4,0,r4
   0x206fa39c <+412>:	stw     r4,40(r1)
   0x206fa3a0 <+416>:	cmpw    r3,r4
   0x206fa3a4 <+420>:	bne-    0x206fa3bc <core::sync::atomic::atomic_compare_exchange+444>
   0x206fa3a8 <+424>:	lwz     r3,64(r1)
   0x206fa3ac <+428>:	lwz     r4,72(r1)
   0x206fa3b0 <+432>:	stwcx.  r3,0,r4
   0x206fa3b4 <+436>:	bne+    0x206fa390 <core::sync::atomic::atomic_compare_exchange+400>
   0x206fa3b8 <+440>:	b       0x206fa3c8 <core::sync::atomic::atomic_compare_exchange+456>
   0x206fa3bc <+444>:	lwz     r3,40(r1)
   0x206fa3c0 <+448>:	lwz     r4,72(r1)
   0x206fa3c4 <+452>:	stwcx.  r3,0,r4
   0x206fa3c8 <+456>:	lwz     r4,40(r1)
   0x206fa3cc <+460>:	lwz     r3,68(r1)
   0x206fa3d0 <+464>:	xor     r3,r4,r3
   0x206fa3d4 <+468>:	cntlzw  r3,r3
   0x206fa3d8 <+472>:	rlwinm  r3,r3,27,5,31
   0x206fa3dc <+476>:	.long 0x7c2004ac
   0x206fa3e0 <+480>:	stw     r4,88(r1)
   0x206fa3e4 <+484>:	stb     r3,92(r1)
   0x206fa3e8 <+488>:	b       0x206fa44c <core::sync::atomic::atomic_compare_exchange+588>
   0x206fa3ec <+492>:	msync
   0x206fa3f0 <+496>:	lwz     r3,68(r1)
   0x206fa3f4 <+500>:	lwz     r4,72(r1)
   0x206fa3f8 <+504>:	lwarx   r4,0,r4
   0x206fa3fc <+508>:	stw     r4,36(r1)
   0x206fa400 <+512>:	cmpw    r3,r4
   0x206fa404 <+516>:	bne-    0x206fa41c <core::sync::atomic::atomic_compare_exchange+540>
   0x206fa408 <+520>:	lwz     r3,64(r1)
   0x206fa40c <+524>:	lwz     r4,72(r1)
   0x206fa410 <+528>:	stwcx.  r3,0,r4
   0x206fa414 <+532>:	bne+    0x206fa3f0 <core::sync::atomic::atomic_compare_exchange+496>
   0x206fa418 <+536>:	b       0x206fa428 <core::sync::atomic::atomic_compare_exchange+552>
   0x206fa41c <+540>:	lwz     r3,36(r1)
   0x206fa420 <+544>:	lwz     r4,72(r1)
   0x206fa424 <+548>:	stwcx.  r3,0,r4
   0x206fa428 <+552>:	lwz     r4,36(r1)
   0x206fa42c <+556>:	lwz     r3,68(r1)
   0x206fa430 <+560>:	xor     r3,r4,r3
   0x206fa434 <+564>:	cntlzw  r3,r3
   0x206fa438 <+568>:	rlwinm  r3,r3,27,5,31
   0x206fa43c <+572>:	.long 0x7c2004ac
   0x206fa440 <+576>:	stw     r4,88(r1)
   0x206fa444 <+580>:	stb     r3,92(r1)
   0x206fa448 <+584>:	b       0x206fa44c <core::sync::atomic::atomic_compare_exchange+588>
   0x206fa44c <+588>:	lwz     r3,88(r1)
   0x206fa450 <+592>:	stw     r3,32(r1)
   0x206fa454 <+596>:	stw     r3,192(r1)
   0x206fa458 <+600>:	lbz     r4,92(r1)
   0x206fa45c <+604>:	clrlwi  r3,r4,31
---Type <return> to continue, or q <return> to quit---
   0x206fa460 <+608>:	stb     r4,199(r1)
   0x206fa464 <+612>:	cmplwi  r3,0
   0x206fa468 <+616>:	bne-    0x206fa734 <core::sync::atomic::atomic_compare_exchange+1332>
   0x206fa46c <+620>:	b       0x206fa720 <core::sync::atomic::atomic_compare_exchange+1312>
   0x206fa470 <+624>:	.long 0x7c2004ac
   0x206fa474 <+628>:	lwz     r3,68(r1)
   0x206fa478 <+632>:	lwz     r4,72(r1)
   0x206fa47c <+636>:	lwarx   r4,0,r4
   0x206fa480 <+640>:	stw     r4,28(r1)
   0x206fa484 <+644>:	cmpw    r3,r4
   0x206fa488 <+648>:	bne-    0x206fa4a0 <core::sync::atomic::atomic_compare_exchange+672>
   0x206fa48c <+652>:	lwz     r3,64(r1)
   0x206fa490 <+656>:	lwz     r4,72(r1)
   0x206fa494 <+660>:	stwcx.  r3,0,r4
   0x206fa498 <+664>:	bne+    0x206fa474 <core::sync::atomic::atomic_compare_exchange+628>
   0x206fa49c <+668>:	b       0x206fa4ac <core::sync::atomic::atomic_compare_exchange+684>
   0x206fa4a0 <+672>:	lwz     r3,28(r1)
   0x206fa4a4 <+676>:	lwz     r4,72(r1)
   0x206fa4a8 <+680>:	stwcx.  r3,0,r4
   0x206fa4ac <+684>:	lwz     r4,28(r1)
   0x206fa4b0 <+688>:	lwz     r3,68(r1)
   0x206fa4b4 <+692>:	xor     r3,r4,r3
   0x206fa4b8 <+696>:	cntlzw  r3,r3
   0x206fa4bc <+700>:	rlwinm  r3,r3,27,5,31
   0x206fa4c0 <+704>:	.long 0x7c2004ac
   0x206fa4c4 <+708>:	stw     r4,88(r1)
   0x206fa4c8 <+712>:	stb     r3,92(r1)
   0x206fa4cc <+716>:	b       0x206fa44c <core::sync::atomic::atomic_compare_exchange+588>
   0x206fa4d0 <+720>:	.long 0x7c2004ac
   0x206fa4d4 <+724>:	lwz     r3,68(r1)
   0x206fa4d8 <+728>:	lwz     r4,72(r1)
   0x206fa4dc <+732>:	lwarx   r4,0,r4
   0x206fa4e0 <+736>:	stw     r4,24(r1)
   0x206fa4e4 <+740>:	cmpw    r3,r4
   0x206fa4e8 <+744>:	bne-    0x206fa500 <core::sync::atomic::atomic_compare_exchange+768>
   0x206fa4ec <+748>:	lwz     r3,64(r1)
   0x206fa4f0 <+752>:	lwz     r4,72(r1)
   0x206fa4f4 <+756>:	stwcx.  r3,0,r4
   0x206fa4f8 <+760>:	bne+    0x206fa4d4 <core::sync::atomic::atomic_compare_exchange+724>
   0x206fa4fc <+764>:	b       0x206fa50c <core::sync::atomic::atomic_compare_exchange+780>
   0x206fa500 <+768>:	lwz     r3,24(r1)
   0x206fa504 <+772>:	lwz     r4,72(r1)
   0x206fa508 <+776>:	stwcx.  r3,0,r4
   0x206fa50c <+780>:	lwz     r4,24(r1)
   0x206fa510 <+784>:	lwz     r3,68(r1)
   0x206fa514 <+788>:	xor     r3,r4,r3
   0x206fa518 <+792>:	cntlzw  r3,r3
   0x206fa51c <+796>:	rlwinm  r3,r3,27,5,31
   0x206fa520 <+800>:	.long 0x7c2004ac
   0x206fa524 <+804>:	stw     r4,88(r1)
   0x206fa528 <+808>:	stb     r3,92(r1)
---Type <return> to continue, or q <return> to quit---
   0x206fa52c <+812>:	b       0x206fa44c <core::sync::atomic::atomic_compare_exchange+588>
   0x206fa530 <+816>:	lwz     r3,68(r1)
   0x206fa534 <+820>:	lwz     r4,72(r1)
   0x206fa538 <+824>:	lwarx   r4,0,r4
   0x206fa53c <+828>:	stw     r4,20(r1)
   0x206fa540 <+832>:	cmpw    r3,r4
   0x206fa544 <+836>:	bne-    0x206fa55c <core::sync::atomic::atomic_compare_exchange+860>
   0x206fa548 <+840>:	lwz     r3,64(r1)
   0x206fa54c <+844>:	lwz     r4,72(r1)
   0x206fa550 <+848>:	stwcx.  r3,0,r4
   0x206fa554 <+852>:	bne+    0x206fa530 <core::sync::atomic::atomic_compare_exchange+816>
   0x206fa558 <+856>:	b       0x206fa568 <core::sync::atomic::atomic_compare_exchange+872>
   0x206fa55c <+860>:	lwz     r3,20(r1)
   0x206fa560 <+864>:	lwz     r4,72(r1)
   0x206fa564 <+868>:	stwcx.  r3,0,r4
   0x206fa568 <+872>:	lwz     r4,20(r1)
   0x206fa56c <+876>:	lwz     r3,68(r1)
   0x206fa570 <+880>:	xor     r3,r4,r3
   0x206fa574 <+884>:	cntlzw  r3,r3
   0x206fa578 <+888>:	rlwinm  r3,r3,27,5,31
=> 0x206fa57c <+892>:	.long 0x7c2004ac
   0x206fa580 <+896>:	stw     r4,88(r1)
   0x206fa584 <+900>:	stb     r3,92(r1)
   0x206fa588 <+904>:	b       0x206fa44c <core::sync::atomic::atomic_compare_exchange+588>
   0x206fa58c <+908>:	lwz     r3,68(r1)
   0x206fa590 <+912>:	lwz     r4,72(r1)
   0x206fa594 <+916>:	lwarx   r4,0,r4
   0x206fa598 <+920>:	stw     r4,16(r1)
   0x206fa59c <+924>:	cmpw    r3,r4
   0x206fa5a0 <+928>:	bne-    0x206fa5b8 <core::sync::atomic::atomic_compare_exchange+952>
   0x206fa5a4 <+932>:	lwz     r3,64(r1)
   0x206fa5a8 <+936>:	lwz     r4,72(r1)
   0x206fa5ac <+940>:	stwcx.  r3,0,r4
   0x206fa5b0 <+944>:	bne+    0x206fa58c <core::sync::atomic::atomic_compare_exchange+908>
   0x206fa5b4 <+948>:	b       0x206fa5c4 <core::sync::atomic::atomic_compare_exchange+964>
   0x206fa5b8 <+952>:	lwz     r3,16(r1)
   0x206fa5bc <+956>:	lwz     r4,72(r1)
   0x206fa5c0 <+960>:	stwcx.  r3,0,r4
   0x206fa5c4 <+964>:	lwz     r4,16(r1)
   0x206fa5c8 <+968>:	lwz     r3,68(r1)
   0x206fa5cc <+972>:	xor     r3,r4,r3
   0x206fa5d0 <+976>:	cntlzw  r3,r3
   0x206fa5d4 <+980>:	rlwinm  r3,r3,27,5,31
   0x206fa5d8 <+984>:	.long 0x7c2004ac
   0x206fa5dc <+988>:	stw     r4,88(r1)
   0x206fa5e0 <+992>:	stb     r3,92(r1)
   0x206fa5e4 <+996>:	b       0x206fa44c <core::sync::atomic::atomic_compare_exchange+588>
   0x206fa5e8 <+1000>:	.long 0x7c2004ac
   0x206fa5ec <+1004>:	lwz     r3,68(r1)
   0x206fa5f0 <+1008>:	lwz     r4,72(r1)
   0x206fa5f4 <+1012>:	lwarx   r4,0,r4
---Type <return> to continue, or q <return> to quit---
   0x206fa5f8 <+1016>:	stw     r4,12(r1)
   0x206fa5fc <+1020>:	cmpw    r3,r4
   0x206fa600 <+1024>:	bne-    0x206fa618 <core::sync::atomic::atomic_compare_exchange+1048>
   0x206fa604 <+1028>:	lwz     r3,64(r1)
   0x206fa608 <+1032>:	lwz     r4,72(r1)
   0x206fa60c <+1036>:	stwcx.  r3,0,r4
   0x206fa610 <+1040>:	bne+    0x206fa5ec <core::sync::atomic::atomic_compare_exchange+1004>
   0x206fa614 <+1044>:	b       0x206fa624 <core::sync::atomic::atomic_compare_exchange+1060>
   0x206fa618 <+1048>:	lwz     r3,12(r1)
   0x206fa61c <+1052>:	lwz     r4,72(r1)
   0x206fa620 <+1056>:	stwcx.  r3,0,r4
   0x206fa624 <+1060>:	lwz     r4,12(r1)
   0x206fa628 <+1064>:	lwz     r3,68(r1)
   0x206fa62c <+1068>:	xor     r3,r4,r3
   0x206fa630 <+1072>:	cntlzw  r3,r3
   0x206fa634 <+1076>:	rlwinm  r3,r3,27,5,31
   0x206fa638 <+1080>:	stw     r4,88(r1)
   0x206fa63c <+1084>:	stb     r3,92(r1)
   0x206fa640 <+1088>:	b       0x206fa44c <core::sync::atomic::atomic_compare_exchange+588>
   0x206fa644 <+1092>:	lwz     r3,68(r1)
   0x206fa648 <+1096>:	lwz     r4,72(r1)
   0x206fa64c <+1100>:	lwarx   r4,0,r4
   0x206fa650 <+1104>:	stw     r4,8(r1)
   0x206fa654 <+1108>:	cmpw    r3,r4
   0x206fa658 <+1112>:	bne-    0x206fa670 <core::sync::atomic::atomic_compare_exchange+1136>
   0x206fa65c <+1116>:	lwz     r3,64(r1)
   0x206fa660 <+1120>:	lwz     r4,72(r1)
   0x206fa664 <+1124>:	stwcx.  r3,0,r4
   0x206fa668 <+1128>:	bne+    0x206fa644 <core::sync::atomic::atomic_compare_exchange+1092>
   0x206fa66c <+1132>:	b       0x206fa67c <core::sync::atomic::atomic_compare_exchange+1148>
   0x206fa670 <+1136>:	lwz     r3,8(r1)
   0x206fa674 <+1140>:	lwz     r4,72(r1)
   0x206fa678 <+1144>:	stwcx.  r3,0,r4
   0x206fa67c <+1148>:	lwz     r4,8(r1)
   0x206fa680 <+1152>:	lwz     r3,68(r1)
   0x206fa684 <+1156>:	xor     r3,r4,r3
   0x206fa688 <+1160>:	cntlzw  r3,r3
   0x206fa68c <+1164>:	rlwinm  r3,r3,27,5,31
   0x206fa690 <+1168>:	stw     r4,88(r1)
   0x206fa694 <+1172>:	stb     r3,92(r1)
   0x206fa698 <+1176>:	b       0x206fa44c <core::sync::atomic::atomic_compare_exchange+588>
   0x206fa69c <+1180>:	lwz     r4,-32628(r30)
   0x206fa6a0 <+1184>:	lwz     r6,-32704(r30)
   0x206fa6a4 <+1188>:	addi    r3,r1,152
   0x206fa6a8 <+1192>:	li      r5,1
   0x206fa6ac <+1196>:	li      r7,0
   0x206fa6b0 <+1200>:	bl      0x20710f08 <core::fmt::Arguments::new_v1>
   0x206fa6b4 <+1204>:	b       0x206fa6f0 <core::sync::atomic::atomic_compare_exchange+1264>
   0x206fa6b8 <+1208>:	lwz     r4,-32624(r30)
   0x206fa6bc <+1212>:	lwz     r6,-32704(r30)
   0x206fa6c0 <+1216>:	addi    r3,r1,128
---Type <return> to continue, or q <return> to quit---
   0x206fa6c4 <+1220>:	li      r5,1
   0x206fa6c8 <+1224>:	li      r7,0
   0x206fa6cc <+1228>:	bl      0x20710f08 <core::fmt::Arguments::new_v1>
   0x206fa6d0 <+1232>:	b       0x206fa710 <core::sync::atomic::atomic_compare_exchange+1296>
   0x206fa6d4 <+1236>:	lwz     r4,-32620(r30)
   0x206fa6d8 <+1240>:	lwz     r6,-32704(r30)
   0x206fa6dc <+1244>:	addi    r3,r1,104
   0x206fa6e0 <+1248>:	li      r5,1
   0x206fa6e4 <+1252>:	li      r7,0
   0x206fa6e8 <+1256>:	bl      0x20710f08 <core::fmt::Arguments::new_v1>
   0x206fa6ec <+1260>:	b       0x206fa700 <core::sync::atomic::atomic_compare_exchange+1280>
   0x206fa6f0 <+1264>:	lwz     r4,-32616(r30)
   0x206fa6f4 <+1268>:	addi    r3,r1,152
   0x206fa6f8 <+1272>:	bl      0x207e9064 <core::panicking::panic_fmt>
   0x206fa6fc <+1276>:	trap
   0x206fa700 <+1280>:	lwz     r4,-32612(r30)
   0x206fa704 <+1284>:	addi    r3,r1,104
   0x206fa708 <+1288>:	bl      0x207e9064 <core::panicking::panic_fmt>
   0x206fa70c <+1292>:	trap
   0x206fa710 <+1296>:	lwz     r4,-32608(r30)
   0x206fa714 <+1300>:	addi    r3,r1,128
   0x206fa718 <+1304>:	bl      0x207e9064 <core::panicking::panic_fmt>
   0x206fa71c <+1308>:	trap
   0x206fa720 <+1312>:	lwz     r3,32(r1)
   0x206fa724 <+1316>:	stw     r3,84(r1)
   0x206fa728 <+1320>:	li      r3,1
   0x206fa72c <+1324>:	stw     r3,80(r1)
   0x206fa730 <+1328>:	b       0x206fa748 <core::sync::atomic::atomic_compare_exchange+1352>
   0x206fa734 <+1332>:	lwz     r3,32(r1)
   0x206fa738 <+1336>:	stw     r3,84(r1)
   0x206fa73c <+1340>:	li      r3,0
   0x206fa740 <+1344>:	stw     r3,80(r1)
   0x206fa744 <+1348>:	b       0x206fa748 <core::sync::atomic::atomic_compare_exchange+1352>
   0x206fa748 <+1352>:	lwz     r3,80(r1)
   0x206fa74c <+1356>:	lwz     r4,84(r1)
   0x206fa750 <+1360>:	lwz     r0,212(r1)
   0x206fa754 <+1364>:	lwz     r30,200(r1)
   0x206fa758 <+1368>:	addi    r1,r1,208
   0x206fa75c <+1372>:	mtlr    r0
   0x206fa760 <+1376>:	blr
End of assembler dump.

@bjorn3
Copy link
Member

bjorn3 commented Apr 29, 2022

It is possible the gdb version you are using doesn't know how to disassemble lwsync. I don't know exactly what the encoded version of it is though.

@mortenlj
Copy link

It is possible the gdb version you are using doesn't know how to disassemble lwsync. I don't know exactly what the encoded version of it is though.

Seems likely. I have GNU gdb (GDB) 8.0.1, which is the latest version available in the package manager (using optware-ng), but apparently quite old.

@skydig
Copy link
Author

skydig commented Apr 29, 2022

@bjorn3
thanks
using RUSTFLAGS="-Ctarget-cpu=e500" , generated bin file has no lwsync instruction now( I use objdump to check), but with sync instruction.
when I have chance to run generated bin under target, I will tell you the result

@mortenlj
Copy link

I tried building with RUSTFLAGS="-Ctarget-cpu=e500", and my example now works. 🎉

@skydig
Copy link
Author

skydig commented Apr 29, 2022

@bjorn3
thanks
using RUSTFLAGS="-Ctarget-cpu=e500" , generated bin file has no lwsync instruction now( I use objdump to check), but with sync instruction.
when I have chance to run generated bin under target, I will tell you the result

@skydig
Copy link
Author

skydig commented Apr 29, 2022

@mortenlj congratulations

@skydig
Copy link
Author

skydig commented May 6, 2022

@bjorn3 I tested under target, "-Ctarget-cpu=e500" works.
this issue can be closed.

@th0ma7
Copy link

th0ma7 commented Nov 12, 2023

@bjorn3 I tested under target, "-Ctarget-cpu=e500" works. this issue can be closed.

@mortenlj I'm on a Synology DS213+ NAS with a FREESCALE QorIQ P1022 CPU (ppc e500 variant iirc).

Having the exact same problem, qoriq support on Synology NAS. Did you have to build tier 3 powerpc-unknown-linux-gnuspe target support first? Or did it worked out using tier 2 powerpc-unknown-linux-gnu with -Ctarget-cpu=e500 build flag?

@mortenlj
Copy link

Having the exact same problem, qoriq support on Synology NAS. Did you have to build tier 3 powerpc-unknown-linux-gnuspe target support first? Or did it worked out using tier 2 powerpc-unknown-linux-gnu with -Ctarget-cpu=e500 build flag?

I build the tier 3 support first, using the synology toolchain (downloadable from some synology support site)

You can see the buildscript here (using Earthly):
https://github.com/mortenlj/mqtt2file/blob/main/Earthfile

@th0ma7
Copy link

th0ma7 commented Nov 12, 2023

@mortenlj thnx for the hint!

I build the tier 3 support first, using the synology toolchain (downloadable from some synology support site)

I'm a SynoCommunity maintainer and we're using spksrc framework to build Synology compatible packages. In turns it does use the various synology toolchain matching arch & version.

You can see the buildscript here (using Earthly): https://github.com/mortenlj/mqtt2file/blob/main/Earthfile

First time I hear about it and will certainly have a look. But I wonder, do you hapen to have traces or logs of what it actually does behind the scene that I could manually reproduce to integrate into the framework. Later on I could potentially look into migrating things to earthly... I mean, I was able to build stage1, stage2 working out also but it fails at building the toolchain later on.

@mortenlj
Copy link

But I wonder, do you hapen to have traces or logs of what it actually does behind the scene that I could manually reproduce to integrate into the framework.

Earthly is mostly just Docker on steroids, there is nothing magical happening behind the scenes. If you follow the imports at the top, you get the definitions of the various DO commands and BUILD targets, where you can see that it is just a bunch of env-variables and RUN commands.

@th0ma7
Copy link

th0ma7 commented Jan 14, 2024

Hi all, I know this thread is closed and I did opened-up a distinct one but I can't get to build a working powerpc gnuspe toolchain. It does build succesfully but the resulting library includes lwsync entries in it (i.e. build/host/stage1/lib/rustlib/powerpc-unknown-linux-gnuspe/lib/libstd-3dce48a1eefa0292.so)

My configuration is as follow:

profile = "compiler"

[build]
target = ["x86_64-unknown-linux-gnu", "powerpc-unknown-linux-gnuspe"]
build-stage = 1
doc-stage = 2
docs = false
docs-minification = false
compiler-docs = false

[rust]
channel = "stable"
lto = "off"

[llvm]
download-ci-llvm = "if-unchanged"

[install]

[dist]

[target.x86_64-unknown-linux-gnu]

[target.powerpc-unknown-linux-gnuspe]
cc = "/home/spksrc/qoriq-debug-update/spksrc/toolchain/syno-qoriq-6.2.4/work/powerpc-e500v2-linux-gnuspe/bin/powerpc-e500v2-linux-g
nuspe-gcc"
cxx = "/home/spksrc/qoriq-debug-update/spksrc/toolchain/syno-qoriq-6.2.4/work/powerpc-e500v2-linux-gnuspe/bin/powerpc-e500v2-linux-
gnuspe-g++"
ar = "/home/spksrc/qoriq-debug-update/spksrc/toolchain/syno-qoriq-6.2.4/work/powerpc-e500v2-linux-gnuspe/bin/powerpc-e500v2-linux-g
nuspe-ar"
ranlib = "/home/spksrc/qoriq-debug-update/spksrc/toolchain/syno-qoriq-6.2.4/work/powerpc-e500v2-linux-gnuspe/bin/powerpc-e500v2-lin
ux-gnuspe-ranlib"
linker = "/home/spksrc/qoriq-debug-update/spksrc/toolchain/syno-qoriq-6.2.4/work/powerpc-e500v2-linux-gnuspe/bin/powerpc-e500v2-lin
ux-gnuspe-gcc"

And the build call is this:

(cd /home/spksrc/qoriq-debug-update/spksrc/toolchain/syno-qoriq-6.2.4/work/rust && \
   CFLAGS_powerpc_unknown_linux_gnuspe="-mcpu=8548 -mhard-float -mfloat-gprs=double" && \
   CXXFLAGS_powerpc_unknown_linux_gnuspe="-mcpu=8548 -mhard-float -mfloat-gprs=double" && \
   LDFLAGS_powerpc_unknown_linux_gnuspe="--sysroot=/home/spksrc/qoriq-debug-update/spksrc/toolchain/syno-qoriq-6.2.4/work/powerpc-e500v2-linux-gnuspe/powerpc-e500v2-linux-gnuspe/sysroot" && \
   RUSTFLAGS="-Ctarget-cpu=e500" && \
   RUST_BACKTRACE=full && \
   ./x build --config /home/spksrc/qoriq-debug-update/spksrc/toolchain/syno-qoriq-6.2.4/work/qoriq.toml)

Help would be really much appreciated.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
C-bug Category: This is a bug. O-PowerPC Target: PowerPC processors
Projects
None yet
Development

No branches or pull requests

4 participants