From: Sascha Hauer <s.hauer@pengutronix.de>
To: BAREBOX <barebox@lists.infradead.org>
Cc: "Claude Sonnet 4.5" <noreply@anthropic.com>
Subject: [PATCH 00/19] PBL: Add PBL ELF loading support with dynamic relocations
Date: Mon, 05 Jan 2026 12:26:41 +0100 [thread overview]
Message-ID: <20260105-pbl-load-elf-v1-0-e97853f98232@pengutronix.de> (raw)
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.
This series also marks my start into AI assisted programming as you can
see in the Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
and 🤖 Generated with [Claude Code](https://claude.com/claude-code)
tags. Without it I wouldn't have started this series during my xmas
break, but with it it was actually quite fun to do; it felt like having
a programming team which I just had to delegate new tasks to while
having fun with my family myself ;)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
Sascha Hauer (19):
elf: Use memcmp to make suitable for PBL
elf: build for PBL as well
elf: add dynamic relocation support
ARM: implement elf_apply_relocations() for ELF relocation support
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: add ELF segment-based memory protection with MMU
Makefile | 16 +-
arch/arm/Kconfig | 2 +
arch/arm/cpu/exceptions_32.S | 54 +++---
arch/arm/cpu/interrupts_32.c | 41 +++-
arch/arm/cpu/mmu-common.c | 66 +------
arch/arm/cpu/mmu-common.h | 3 +-
arch/arm/cpu/mmu_32.c | 19 +-
arch/arm/cpu/mmu_64.c | 10 +-
arch/arm/cpu/no-mmu.c | 11 +-
arch/arm/cpu/start.c | 4 -
arch/arm/cpu/uncompress.c | 46 ++++-
arch/arm/include/asm/barebox-arm.h | 4 +-
arch/arm/include/asm/barebox.lds.h | 14 +-
arch/arm/include/asm/elf.h | 11 ++
arch/arm/include/asm/sections.h | 1 +
arch/arm/lib/pbl.lds.S | 8 +-
arch/arm/lib32/Makefile | 1 +
arch/arm/lib32/barebox.lds.S | 39 ++--
arch/arm/lib32/elf_reloc.c | 105 ++++++++++
arch/arm/lib64/Makefile | 1 +
arch/arm/lib64/barebox.lds.S | 31 ++-
arch/arm/lib64/elf_reloc.c | 105 ++++++++++
arch/riscv/Kconfig | 18 ++
arch/riscv/Kconfig.socs | 1 -
arch/riscv/boot/start.c | 4 -
arch/riscv/boot/uncompress.c | 41 +++-
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/Makefile | 1 +
arch/riscv/lib/barebox.lds.S | 38 ++--
arch/riscv/lib/elf_reloc.c | 212 ++++++++++++++++++++
common/Makefile | 2 +-
common/elf.c | 367 +++++++++++++++++++++++++++++++++--
images/Makefile | 18 +-
images/piggy.S | 4 +
include/elf.h | 62 ++++++
include/mmu.h | 12 +-
include/pbl/mmu.h | 29 +++
lib/Makefile | 1 +
lib/elf_reloc.c | 15 ++
pbl/Kconfig | 8 +
pbl/Makefile | 1 +
pbl/mmu.c | 111 +++++++++++
scripts/prelink-riscv.inc | 9 +-
47 files changed, 1922 insertions(+), 202 deletions(-)
---
base-commit: e2d7e032281158b54541392b4d8108de204137a1
change-id: 20251227-pbl-load-elf-cb4cb0ceb7d8
Best regards,
--
Sascha Hauer <s.hauer@pengutronix.de>
next reply other threads:[~2026-01-05 11:27 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-05 11:26 Sascha Hauer [this message]
2026-01-05 11:26 ` [PATCH 01/19] elf: Use memcmp to make suitable for PBL Sascha Hauer
2026-01-05 11:46 ` Ahmad Fatoum
2026-01-05 11:26 ` [PATCH 02/19] elf: build for PBL as well Sascha Hauer
2026-01-05 11:26 ` [PATCH 03/19] elf: add dynamic relocation support Sascha Hauer
2026-01-05 14:05 ` Ahmad Fatoum
2026-01-05 11:26 ` [PATCH 04/19] ARM: implement elf_apply_relocations() for ELF " Sascha Hauer
2026-01-05 11:58 ` Ahmad Fatoum
2026-01-05 19:53 ` Sascha Hauer
2026-01-05 11:26 ` [PATCH 05/19] riscv: " Sascha Hauer
2026-01-05 11:26 ` [PATCH 06/19] elf: implement elf_load_inplace() Sascha Hauer
2026-01-05 13:37 ` Ahmad Fatoum
2026-01-05 22:42 ` Sascha Hauer
2026-01-06 8:18 ` Ahmad Fatoum
2026-01-05 11:26 ` [PATCH 07/19] elf: create elf_open_binary_into() Sascha Hauer
2026-01-05 11:26 ` [PATCH 08/19] Makefile: add barebox.elf build target Sascha Hauer
2026-01-05 12:22 ` Ahmad Fatoum
2026-01-05 15:43 ` Sascha Hauer
2026-01-05 17:11 ` Ahmad Fatoum
2026-01-05 11:26 ` [PATCH 09/19] PBL: allow to link ELF image into PBL Sascha Hauer
2026-01-05 12:11 ` Ahmad Fatoum
2026-01-05 11:26 ` [PATCH 10/19] mmu: add MAP_CACHED_RO mapping type Sascha Hauer
2026-01-05 12:14 ` Ahmad Fatoum
2026-01-05 11:26 ` [PATCH 11/19] mmu: introduce pbl_remap_range() Sascha Hauer
2026-01-05 12:15 ` Ahmad Fatoum
2026-01-06 8:50 ` Ahmad Fatoum
2026-01-06 9:25 ` Sascha Hauer
2026-01-05 11:26 ` [PATCH 12/19] ARM: use relative jumps in exception table Sascha Hauer
2026-01-05 11:44 ` Ahmad Fatoum
2026-01-05 12:29 ` Sascha Hauer
2026-01-05 12:31 ` Ahmad Fatoum
2026-01-05 11:26 ` [PATCH 13/19] ARM: exceptions: make in-binary exception table const Sascha Hauer
2026-01-05 11:26 ` [PATCH 14/19] ARM: linker script: create separate PT_LOAD segments for text, rodata, and data Sascha Hauer
2026-01-05 13:11 ` Ahmad Fatoum
2026-01-05 23:01 ` Sascha Hauer
2026-01-06 7:59 ` Ahmad Fatoum
2026-01-05 11:26 ` [PATCH 15/19] ARM: link ELF image into PBL Sascha Hauer
2026-01-05 12:27 ` Ahmad Fatoum
2026-01-05 11:26 ` [PATCH 16/19] ARM: PBL: setup MMU with proper permissions from ELF segments Sascha Hauer
2026-01-05 12:58 ` Ahmad Fatoum
2026-01-05 11:26 ` [PATCH 17/19] riscv: link ELF image into PBL Sascha Hauer
2026-01-05 13:12 ` Ahmad Fatoum
2026-01-05 11:26 ` [PATCH 18/19] riscv: linker script: create separate PT_LOAD segments for text, rodata, and data Sascha Hauer
2026-01-05 13:40 ` Ahmad Fatoum
2026-01-05 11:27 ` [PATCH 19/19] riscv: add ELF segment-based memory protection with MMU Sascha Hauer
2026-01-05 13:58 ` Ahmad Fatoum
2026-01-05 14:08 ` [PATCH 00/19] PBL: Add PBL ELF loading support with dynamic relocations Ahmad Fatoum
2026-01-05 16:47 ` Sascha Hauer
2026-01-06 8:35 ` Ahmad Fatoum
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260105-pbl-load-elf-v1-0-e97853f98232@pengutronix.de \
--to=s.hauer@pengutronix.de \
--cc=barebox@lists.infradead.org \
--cc=noreply@anthropic.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox