mirror of
https://github.com/apache/nuttx.git
synced 2026-08-08 05:57:16 +00:00
As pointed out in #11322 there is a hardware design issue in RISC-V that affects RV64 relocations. The problem is with how address bits are loaded into registers via lui / auipc and sign extension. If the hi20 relocation value happens to have its 32-bit sign bit set, i.e. value is 0x80000000 (but not negative! i.e. negative in 64-bit format) the relocation will fail, as the address is erroneously sign extended: 0x00000000_80000000 becomes 0xffffffff_80000000 which is not correct. Also, make sure the correct opcode is used with PCREL_HI20, it expects AUIPC (not LUI). The C compiler will never emit such code but when hand- writing assembly code this can happen. |
||
|---|---|---|
| .. | ||
| common | ||
| gnu | ||
| rv32 | ||
| rv64 | ||
| arch_elf.c | ||
| CMakeLists.txt | ||
| Kconfig | ||
| Make.defs | ||