[PATCH 0/3] Relocation-related fixes

Vivian Wang dramforever at live.com
Sun Sep 17 10:51:41 PDT 2023


I was looking into various implementations of "DIY" runtime relocations.
One thing led to another, and here are three patches.

This area does seem fairly obscure, so advice on proper/better ways to
do things are definitely needed. Thanks in advance for any help.

Patch 1 fixes a crash on RV32 that happens to 50% of built binaries
essentially randomly.

Patch 2 removes handling of R_RISCV_{32,64}. Why they have been added in
the first place is a complete mystery to me, since these are for dynamic
linking only, which is simply not a thing here. I've also never seen a
toolchain generate these for *static*-pie. And yes the generated binary
boots fine.

>From what I can tell, Linux, musl, glibc all only handle
R_RISCV_RELATIVE for static-pie. (Okay, also IRELATIVE, but just don't
use ifuncs.) The only other place I can find that does anything with
.dynsym is U-Boot's RISC-V relocation code [1], and the code is there
without explanation either.

Maybe some ancient toolchains generated R_RISCV_{32,64} for static
linking? I have no idea.

Since we don't need .dynsym, I went ahead and did patch 3. I tried
fiddling around with -fvisibility= but it seems that, given that OpenSBI
is built as a static library, --exclude-libs ALL looked liked the
simplest solution. Or should we just /DISCARD/ .dynsym etc. instead?

Cc'd Vincent Chen - Since you're the author of 0f20e8adcf42 "firmware:
Support position independent execution" I'm hope you can give some
insight. Thanks in advance.

[1]: https://github.com/u-boot/u-boot/commit/e8e39597a33cc53aacbaf4ef5cae60ed86d6a20a

Vivian Wang (3):
  firmware: Remove ALIGN in .rela.dyn in linker script
  firmware: Remove handling of R_RISCV_{32,64}
  Makefile: Add --exclude-libs ALL to avoid .dynsym

 Makefile                |  1 +
 firmware/fw_base.S      | 22 ----------------------
 firmware/fw_base.ldS    |  7 -------
 include/sbi/riscv_elf.h |  8 --------
 4 files changed, 1 insertion(+), 37 deletions(-)

-- 
2.41.0




More information about the opensbi mailing list