ronny-nilsson / rpiburn

Raspberry Pi heavy load power supply testing
GNU General Public License v2.0
10 stars 0 forks source link

Does not compile on pi64 (arm64) #1

Open helioshk opened 6 years ago

helioshk commented 6 years ago
cc -O2 -g -Wall -std=gnu99 -D_GNU_SOURCE -D_BSD_SOURCE -D_REENTRANT -pthread -fno-reorder-blocks -fno-reorder-blocks-and-partition -fno-toplevel-reorder -fno-crossjumping -falign-functions -o high-load-arm.o -c high-load-arm.S
high-load-arm.S: Assembler messages:
high-load-arm.S:13: Error: unknown pseudo-op: `.syntax'
high-load-arm.S:15: Error: unknown pseudo-op: `.arm'
high-load-arm.S:18: Error: junk at end of line, first unrecognized character is `@'
high-load-arm.S:19: Error: junk at end of line, first unrecognized character is `@'
high-load-arm.S:25: Error: unknown mnemonic `push' -- `push {r4,r5,fp,lr}@Prologue'
high-load-arm.S:27: Error: operand 1 must be an integer or stack pointer register -- `add fp,sp,#12'
high-load-arm.S:28: Error: unknown mnemonic `vpush' -- `vpush {q4-q5}'
high-load-arm.S:30: Error: junk at end of line, first unrecognized character is `@'
high-load-arm.S:31: Error: operand 1 must be an SVE vector register -- `adr r1,pLabels'
high-load-arm.S:32: Error: unknown mnemonic `pld' -- `pld [r1]'
high-load-arm.S:33: Error: operand 1 must be an integer or stack pointer register -- `add r1,r1,#1'
high-load-arm.S:34: Error: operand 1 must be an integer register -- `mov r2,#0'
high-load-arm.S:39: Error: operand 1 must be an integer register -- `ldr r5,pExit'
high-load-arm.S:40: Error: operand 1 must be an integer or stack pointer register -- `sub r5,r5,#4'
high-load-arm.S:41: Error: unknown mnemonic `pld' -- `pld [r5]'
high-load-arm.S:43: Error: junk at end of line, first unrecognized character is `@'
high-load-arm.S:44: Error: unknown mnemonic `vmov.u32' -- `vmov.u32 q1,#0'
high-load-arm.S:45: Error: unknown mnemonic `vmov.u32' -- `vmov.u32 q2,#0xffffffff'
high-load-arm.S:46: Error: unknown mnemonic `vmov.u32' -- `vmov.u32 q4,#0xf0f0f0f0'
high-load-arm.S:47: Error: unknown mnemonic `vmov.u32' -- `vmov.u32 q5,#0x0f0f0f0f'
high-load-arm.S:54: Error: operand 1 must be an integer register -- `ldr r3,[r5,#1]@Poll do_exit,time to exit loop?'
high-load-arm.S:55: Error: unknown mnemonic `vabd.u32' -- `vabd.u32 q0,q1,q2'
high-load-arm.S:56: Error: operand 1 must be an integer register -- `ldr r0,[r1,r2,lsl#2]!'
high-load-arm.S:57: Error: unknown mnemonic `vaba.u32' -- `vaba.u32 q3,q4,q5'
high-load-arm.S:58: Error: operand 1 must be an SVE predicate register -- `movs r2,r3'
high-load-arm.S:61: Error: unknown mnemonic `movne' -- `movne r0,#0@EXIT_SUCCESS'
high-load-arm.S:62: Error: unknown mnemonic `moveq' -- `moveq r0,#1@EXIT_FAILURE'
high-load-arm.S:63: Error: unknown mnemonic `vpop' -- `vpop {q4-q5}'
high-load-arm.S:67: Error: unknown mnemonic `pop' -- `pop {r4,r5,fp,pc}@Epilogue'
high-load-arm.S:72: Error: junk at end of line, first unrecognized character is `@'
high-load-arm.S:73: Error: junk at end of line, first unrecognized character is `@'
high-load-arm.S:79: Error: unknown mnemonic `push' -- `push {r4,r5,r6,r7,fp,lr}@Prologue'
high-load-arm.S:80: Error: operand 1 must be an integer or stack pointer register -- `add fp,sp,#12'
high-load-arm.S:82: Error: junk at end of line, first unrecognized character is `@'
high-load-arm.S:83: Error: operand 1 must be an SVE vector register -- `adr r1,pLabels'
high-load-arm.S:84: Error: unknown mnemonic `pld' -- `pld [r1]'
high-load-arm.S:89: Error: operand 1 must be an integer register -- `ldr r5,pExit'
high-load-arm.S:90: Error: operand 1 must be an integer or stack pointer register -- `sub r5,r5,#4'
high-load-arm.S:91: Error: unknown mnemonic `pld' -- `pld [r5]'
high-load-arm.S:98: Error: operand 1 must be an integer register -- `mov r3,#0'
high-load-arm.S:101: Error: operand 1 must be an integer register -- `ldr r0,[r1,#1]'
high-load-arm.S:102: Error: operand 1 must be an SVE predicate register -- `movs r2,r3'
high-load-arm.S:103: Error: operand 1 must be an integer register -- `ldr r3,[r5,#1]@Poll do_exit,time to exit loop?'
high-load-arm.S:104: Error: operand 1 must be an integer register -- `mov r4,r1'
high-load-arm.S:105: Error: operand 1 must be an integer register -- `ldr r6,[r1,#1]'
high-load-arm.S:106: Error: operand 1 must be an integer register -- `mov r2,r1'
high-load-arm.S:107: Error: operand 1 must be an integer register -- `ldr r7,[r5,#1]@Poll do_exit,time to exit loop?'
high-load-arm.S:110: Error: unknown mnemonic `movne' -- `movne r0,#0@EXIT_SUCCESS'
high-load-arm.S:111: Error: unknown mnemonic `moveq' -- `moveq r0,#1@EXIT_FAILURE'
high-load-arm.S:112: Error: unknown mnemonic `pop' -- `pop {r4,r5,r6,r7,fp,pc}@Epilogue'
high-load-arm.S:117: Error: junk at end of line, first unrecognized character is `@'
high-load-arm.S:118: Error: junk at end of line, first unrecognized character is `@'
high-load-arm.S:119: Error: junk at end of line, first unrecognized character is `@'
high-load-arm.S:127: Error: junk at end of line, first unrecognized character is `@'
Makefile:37: recipe for target 'high-load-arm.o' failed
make: *** [high-load-arm.o] Error 1

cc (Debian 6.3.0-18) 6.3.0 20170516

ronny-nilsson commented 6 years ago

I don't use Pi64 myself unfortunately and thus I haven't bothered to port rpiburn yet... It might work if you explicitly ask the compiler to use 32-bit mode though. Try adding these CFLAGS -march=armv7-a -mtune=cortex-a5

helioshk commented 6 years ago

It's a raspi 3 running pi64 (64 bit OS). I think compiler flags don't help because high-load-arm.S is ARM32-specific.

ronny-nilsson commented 6 years ago

If you force the compiler into 32-bit I think it will work. Even if rest of your system use 64-bit. Your PC works the same way. It can still run 32-bit program although the OS is 64-bit. However, you might need 32-bit librarys installed as well (but likely you have).

rwaldura commented 1 month ago

Didn't work for me, unfortunately. An actual cross-compiler might be needed?

$ make
cc -O2 -g -Wall -std=gnu99 -D_DEFAULT_SOURCE -D_GNU_SOURCE -D_BSD_SOURCE -D_REENTRANT -pthread -fno-reorder-blocks -fno-reorder-blocks-and-partition -fno-toplevel-reorder -fno-crossjumping -falign-functions -march=armv7-a -mtune=cortex-a53 -o main.o -c main.c
cc1: error: unknown value ‘armv7-a’ for ‘-march’
cc1: note: valid arguments are: armv8-a armv8.1-a armv8.2-a armv8.3-a armv8.4-a armv8.5-a armv8.6-a armv8.7-a armv8.8-a armv8-r armv9-a native; did you mean ‘armv8-a’?
make: *** [Makefile:35: main.o] Error 1

$ uname -a
Linux pi05 6.6.31+rpt-rpi-v8 #1 SMP PREEMPT Debian 1:6.6.31-1+rpt1 (2024-05-29) aarch64 GNU/Linux
ronny-nilsson commented 1 month ago

I would appear your Linux distro need a cross-compiler yes. Try this:

  1. Install the gcc-arm-linux-gnueabi and libc6-dev-armel-cross packages from your distro.
  2. Add CC=arm-linux-gnueabi-gcc to the Makefile.