[PATCH 2/2] firmware: Change to use positive offset to access relocation entries

Anup Patel anup at brainfault.org
Sun Apr 16 20:49:13 PDT 2023


On Tue, Apr 4, 2023 at 10:17 AM Bin Meng <bmeng at tinylab.org> wrote:
>
> The codes currently skip the very first relocation entry, but later
> reference the elements in the relocation entry using minus offsets.
>
> Change to use positive offsets so that there is no need to skip the
> first relocation entry.
>
> Signed-off-by: Bin Meng <bmeng at tinylab.org>

Applied this patch to the riscv/opensbi repo.

Thanks,
Anup

> ---
>
>  firmware/fw_base.S | 15 +++++++--------
>  1 file changed, 7 insertions(+), 8 deletions(-)
>
> diff --git a/firmware/fw_base.S b/firmware/fw_base.S
> index e30aca6..bb0401b 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
> --
> 2.25.1
>



More information about the opensbi mailing list