[PATCH v3 08/23] elf: implement elf_load_inplace()
Ahmad Fatoum
a.fatoum at pengutronix.de
Mon Jan 12 05:04:45 PST 2026
Hi,
On 1/8/26 4:50 PM, Sascha Hauer wrote:
> + /*
> + * Calculate relocation offset for the in-place binary.
> + * For ET_DYN, we need to find the first PT_LOAD segment
> + * and use it as the relocation base.
> + */
> + if (elf->type == ET_DYN) {
> + u64 text_vaddr = 0;
> + u64 text_offset = 0;
> + bool found_text = false;
> +
> + /* Find first PT_LOAD segment */
> + phdr = buf + elf_hdr_e_phoff(elf, buf);
> + for (i = 0; i < elf_hdr_e_phnum(elf, buf); i++) {
> + if (elf_phdr_p_type(elf, phdr) == PT_LOAD) {
> + text_vaddr = elf_phdr_p_vaddr(elf, phdr);
> + text_offset = elf_phdr_p_offset(elf, phdr);
> + found_text = true;
> + break;
> + }
> + phdr += elf_size_of_phdr(elf);
> + }
> +
> + if (!found_text) {
> + pr_err("No PT_LOAD segment found\n");
A bit confusing to call it found_text and check if it's PT_LOAD.
As mentioned before, I am unsure if text indeed is always the
first segment in iteration order.
Would it not be more correct to factor out the initial loop in
elf_compute_load_offset to a helper function and use that here
to determine the lowest loadable segment and use that instead of
the first? Should reduce the diff too.
Cheers,
Ahmad
--
Pengutronix e.K. | |
Steuerwalder Str. 21 | http://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
More information about the barebox
mailing list