diff options
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/fw_base.S | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/firmware/fw_base.S b/firmware/fw_base.S index 2d6be70..e37df09 100644 --- a/firmware/fw_base.S +++ b/firmware/fw_base.S @@ -79,13 +79,12 @@ _try_lottery: lla t0, __rel_dyn_start lla t1, __rel_dyn_end beq t0, t1, _relocate_done - j 5f 2: - REG_L t5, -(REGBYTES*2)(t0) /* t5 <-- relocation info:type */ + REG_L t5, REGBYTES(t0) /* t5 <-- relocation info:type */ li t3, R_RISCV_RELATIVE /* reloc type R_RISCV_RELATIVE */ bne t5, t3, 3f - REG_L t3, -(REGBYTES*3)(t0) - REG_L t5, -(REGBYTES)(t0) /* t5 <-- addend */ + REG_L t3, 0(t0) + REG_L t5, (REGBYTES * 2)(t0) /* t5 <-- addend */ add t5, t5, t2 add t3, t3, t2 REG_S t5, 0(t3) /* store runtime address to the GOT entry */ @@ -101,11 +100,11 @@ _try_lottery: bne t5, t3, 5f /* address R_RISCV_64 or R_RISCV_32 cases*/ - REG_L t3, -(REGBYTES*3)(t0) + REG_L t3, 0(t0) li t5, SYM_SIZE mul t6, t6, t5 add s5, t4, t6 - REG_L t6, -(REGBYTES)(t0) /* t0 <-- addend */ + REG_L t6, (REGBYTES * 2)(t0) /* t0 <-- addend */ REG_L t5, REGBYTES(s5) add t5, t5, t6 add t5, t5, t2 /* t5 <-- location to fix up in RAM */ @@ -113,8 +112,8 @@ _try_lottery: REG_S t5, 0(t3) /* store runtime address to the variable */ 5: - addi t0, t0, (REGBYTES*3) - ble t0, t1, 2b + addi t0, t0, (REGBYTES * 3) + blt t0, t1, 2b j _relocate_done _wait_relocate_copy_done: j _wait_for_boot_hart |