[PATCH v2 00/21] PBL: Add PBL ELF loading support with dynamic relocations
Sascha Hauer
s.hauer at pengutronix.de
Tue Jan 6 04:53:03 PST 2026
Until now we linked the raw barebox proper binary into the PBL which
comes with a number of disadvantages. We rely on self-modifying code
to in barebox proper (relocate_to_current_adr()) and have no initialized
bss segment (setup_c()). Also we can only mark the .text and .rodata as
readonly during runtime of barebox proper.
This series overcomes this by linking a ELF image into the PBL. This
image is properly layed out, linked and initialized in the PBL. With
this barebox proper has a proper C environment and text/rodata
protection from the start.
As a bonus this series also adds initial MMU support for RISCV, also
based on loading the ELF image and configuring the MMU from the PBL.
I lost track about the review feedback for v1, partly because I asked
Claude to integrate the review feedback for me, which it did, but not
completely. Nevertheless I think this series has enough changes for now
so that it deserves a second look.
What I didn't care about yet is that we found out that neither ARM nor
RiscV use any absolute relocations, so we might be able to remove
support for them, make sure these are not emitted during compile time,
or properly test/fix them when we discover that they are indeed needed.
Co-Authored-By: Claude Sonnet 4.5 <noreply at anthropic.com>
Signed-off-by: Sascha Hauer <s.hauer at pengutronix.de>
---
Changes in v2:
- rebased on Ahmads patches and with it reused existing relocate_image()
- hopefully integrated all feedback for v1
- Link to v1: https://lore.barebox.org/20260105-pbl-load-elf-v1-0-e97853f98232@pengutronix.de
---
Sascha Hauer (21):
elf: only accept images matching the native ELF_CLASS
elf: build for PBL as well
elf: add dynamic relocation support
ARM: implement elf_apply_relocations() for ELF relocation support
riscv: define generic relocate_image
riscv: implement elf_apply_relocations() for ELF relocation support
elf: implement elf_load_inplace()
elf: create elf_open_binary_into()
Makefile: add barebox.elf build target
PBL: allow to link ELF image into PBL
mmu: add MAP_CACHED_RO mapping type
mmu: introduce pbl_remap_range()
ARM: use relative jumps in exception table
ARM: exceptions: make in-binary exception table const
ARM: linker script: create separate PT_LOAD segments for text, rodata, and data
ARM: link ELF image into PBL
ARM: PBL: setup MMU with proper permissions from ELF segments
riscv: link ELF image into PBL
riscv: linker script: create separate PT_LOAD segments for text, rodata, and data
riscv: Allwinner D1: Drop M-Mode
riscv: add ELF segment-based memory protection with MMU
Makefile | 17 +-
arch/arm/Kconfig | 2 +
arch/arm/cpu/exceptions_32.S | 54 ++---
arch/arm/cpu/interrupts_32.c | 45 +++-
arch/arm/cpu/mmu-common.c | 14 +-
arch/arm/cpu/mmu-common.h | 3 +-
arch/arm/cpu/mmu_32.c | 14 +-
arch/arm/cpu/mmu_64.c | 10 +-
arch/arm/cpu/no-mmu.c | 11 +-
arch/arm/cpu/start.c | 11 +-
arch/arm/cpu/uncompress.c | 40 +++-
arch/arm/include/asm/barebox-arm.h | 4 +-
arch/arm/include/asm/barebox.lds.h | 2 +-
arch/arm/include/asm/elf.h | 7 +
arch/arm/include/asm/sections.h | 1 +
arch/arm/lib/pbl.lds.S | 6 +-
arch/arm/lib32/barebox.lds.S | 38 ++-
arch/arm/lib32/reloc.c | 23 ++
arch/arm/lib64/barebox.lds.S | 29 ++-
arch/arm/lib64/reloc.c | 25 +-
arch/riscv/Kconfig | 18 ++
arch/riscv/Kconfig.socs | 1 -
arch/riscv/boot/start.c | 6 -
arch/riscv/boot/uncompress.c | 43 +++-
arch/riscv/cpu/Makefile | 1 +
arch/riscv/cpu/mmu.c | 386 +++++++++++++++++++++++++++++++
arch/riscv/cpu/mmu.h | 144 ++++++++++++
arch/riscv/include/asm/asm.h | 3 +-
arch/riscv/include/asm/mmu.h | 44 ++++
arch/riscv/lib/barebox.lds.S | 38 +--
arch/riscv/lib/reloc.c | 82 +++++--
common/Makefile | 2 +-
common/elf.c | 461 ++++++++++++++++++++++++++++++++++++-
images/Makefile | 2 +-
include/elf.h | 73 ++++++
include/mmu.h | 14 +-
include/pbl/mmu.h | 29 +++
lib/Makefile | 1 +
lib/elf_reloc.c | 15 ++
pbl/Kconfig | 9 +
pbl/Makefile | 1 +
pbl/mmu.c | 111 +++++++++
scripts/prelink-riscv.inc | 9 +-
43 files changed, 1685 insertions(+), 164 deletions(-)
---
base-commit: fd86e9d4215bc4cd6a84af2a8de22f1bb9738faf
change-id: 20251227-pbl-load-elf-cb4cb0ceb7d8
Best regards,
--
Sascha Hauer <s.hauer at pengutronix.de>
More information about the barebox
mailing list