/src/barebox/include/lib/elf.h
Line | Count | Source |
1 | | /* SPDX-License-Identifier: GPL-2.0-only */ |
2 | | /* ELF utility functions that require no allocations */ |
3 | | #ifndef _LIB_ELF_H |
4 | | #define _LIB_ELF_H |
5 | | |
6 | | #include <linux/types.h> |
7 | | #include <linux/list.h> |
8 | | |
9 | | struct elf_image { |
10 | | u8 class; |
11 | | u16 type; /* ET_EXEC or ET_DYN */ |
12 | | u64 entry; |
13 | | void *hdr_buf; |
14 | | void *load_address; /* User-specified load address (NULL = use p_paddr) */ |
15 | | unsigned long reloc_offset; /* Offset between p_vaddr and actual load address */ |
16 | | |
17 | | /* Only used in barebox proper */ |
18 | | struct list_head list; |
19 | | void *low_addr; |
20 | | void *high_addr; |
21 | | const char *filename; |
22 | | }; |
23 | | |
24 | | static inline void elf_init_struct(struct elf_image *elf) |
25 | 0 | { |
26 | 0 | INIT_LIST_HEAD(&elf->list); |
27 | 0 | elf->low_addr = (void *) (unsigned long) -1; |
28 | 0 | elf->high_addr = 0; |
29 | 0 | elf->filename = NULL; |
30 | 0 | } Unexecuted instantiation: memory.c:elf_init_struct Unexecuted instantiation: memory_display.c:elf_init_struct Unexecuted instantiation: clock.c:elf_init_struct Unexecuted instantiation: console_common.c:elf_init_struct Unexecuted instantiation: deep-probe.c:elf_init_struct Unexecuted instantiation: startup.c:elf_init_struct Unexecuted instantiation: misc.c:elf_init_struct Unexecuted instantiation: resource.c:elf_init_struct Unexecuted instantiation: restart.c:elf_init_struct Unexecuted instantiation: poweroff.c:elf_init_struct Unexecuted instantiation: slice.c:elf_init_struct Unexecuted instantiation: workqueue.c:elf_init_struct Unexecuted instantiation: complete.c:elf_init_struct Unexecuted instantiation: version.c:elf_init_struct Unexecuted instantiation: binfmt.c:elf_init_struct Unexecuted instantiation: block.c:elf_init_struct Unexecuted instantiation: bootm.c:elf_init_struct Unexecuted instantiation: booti.c:elf_init_struct Unexecuted instantiation: s_record.c:elf_init_struct Unexecuted instantiation: memtest.c:elf_init_struct Unexecuted instantiation: command.c:elf_init_struct Unexecuted instantiation: console.c:elf_init_struct Unexecuted instantiation: environment.c:elf_init_struct Unexecuted instantiation: envfs-core.c:elf_init_struct Unexecuted instantiation: env.c:elf_init_struct Unexecuted instantiation: bootargs.c:elf_init_struct Unexecuted instantiation: globalvar.c:elf_init_struct Unexecuted instantiation: date.c:elf_init_struct Unexecuted instantiation: meminfo.c:elf_init_struct Unexecuted instantiation: menu.c:elf_init_struct Unexecuted instantiation: oftree.c:elf_init_struct Unexecuted instantiation: partitions.c:elf_init_struct Unexecuted instantiation: dos.c:elf_init_struct Unexecuted instantiation: efi.c:elf_init_struct Unexecuted instantiation: poller.c:elf_init_struct Unexecuted instantiation: reset_source.c:elf_init_struct Unexecuted instantiation: hush.c:elf_init_struct Unexecuted instantiation: state.c:elf_init_struct Unexecuted instantiation: backend_format_dtb.c:elf_init_struct Unexecuted instantiation: backend_format_raw.c:elf_init_struct Unexecuted instantiation: backend_bucket_circular.c:elf_init_struct Unexecuted instantiation: state_fuzz.c:elf_init_struct Unexecuted instantiation: parser.c:elf_init_struct Unexecuted instantiation: bus.c:elf_init_struct Unexecuted instantiation: register.c:elf_init_struct Unexecuted instantiation: barebox.c:elf_init_struct Unexecuted instantiation: uimage_types.c:elf_init_struct Unexecuted instantiation: uimage.c:elf_init_struct Unexecuted instantiation: image-fit.c:elf_init_struct Unexecuted instantiation: bootm-fit.c:elf_init_struct Unexecuted instantiation: menutree.c:elf_init_struct Unexecuted instantiation: imd.c:elf_init_struct Unexecuted instantiation: file-list.c:elf_init_struct Unexecuted instantiation: firmware.c:elf_init_struct Unexecuted instantiation: boot.c:elf_init_struct Unexecuted instantiation: fastboot.c:elf_init_struct Unexecuted instantiation: memsize.c:elf_init_struct Unexecuted instantiation: bootsource.c:elf_init_struct Unexecuted instantiation: ddr_spd.c:elf_init_struct Unexecuted instantiation: ddr1_dimm_params.c:elf_init_struct Unexecuted instantiation: ddr2_dimm_params.c:elf_init_struct Unexecuted instantiation: ddr3_dimm_params.c:elf_init_struct Unexecuted instantiation: ddr4_dimm_params.c:elf_init_struct Unexecuted instantiation: filetype.c:elf_init_struct Unexecuted instantiation: driver.c:elf_init_struct Unexecuted instantiation: platform.c:elf_init_struct Unexecuted instantiation: regmap.c:elf_init_struct Unexecuted instantiation: regmap-multi.c:elf_init_struct Unexecuted instantiation: featctrl.c:elf_init_struct Unexecuted instantiation: linux_console.c:elf_init_struct Unexecuted instantiation: spi-nor.c:elf_init_struct Unexecuted instantiation: m25p80.c:elf_init_struct Unexecuted instantiation: core.c:elf_init_struct Unexecuted instantiation: partition.c:elf_init_struct Unexecuted instantiation: peb.c:elf_init_struct Unexecuted instantiation: mtdoob.c:elf_init_struct Unexecuted instantiation: spi.c:elf_init_struct Unexecuted instantiation: spi-mem.c:elf_init_struct Unexecuted instantiation: gpio_spi.c:elf_init_struct Unexecuted instantiation: i2c-gpio.c:elf_init_struct Unexecuted instantiation: i2c.c:elf_init_struct Unexecuted instantiation: i2c-smbus.c:elf_init_struct Unexecuted instantiation: i2c-algo-bit.c:elf_init_struct Unexecuted instantiation: fb.c:elf_init_struct Unexecuted instantiation: drm_modes.c:elf_init_struct Unexecuted instantiation: of_display_timing.c:elf_init_struct Unexecuted instantiation: fbconsole.c:elf_init_struct Unexecuted instantiation: syscon.c:elf_init_struct Unexecuted instantiation: led-gpio.c:elf_init_struct Unexecuted instantiation: led-triggers.c:elf_init_struct Unexecuted instantiation: at25.c:elf_init_struct Unexecuted instantiation: at24.c:elf_init_struct Unexecuted instantiation: mem.c:elf_init_struct Unexecuted instantiation: ubootvar.c:elf_init_struct Unexecuted instantiation: layouts.c:elf_init_struct Unexecuted instantiation: rmem.c:elf_init_struct Unexecuted instantiation: wd_core.c:elf_init_struct Unexecuted instantiation: gpiolib.c:elf_init_struct Unexecuted instantiation: dev-random.c:elf_init_struct Unexecuted instantiation: address.c:elf_init_struct Unexecuted instantiation: base.c:elf_init_struct Unexecuted instantiation: fdt.c:elf_init_struct Unexecuted instantiation: of_path.c:elf_init_struct Unexecuted instantiation: device.c:elf_init_struct Unexecuted instantiation: mem_generic.c:elf_init_struct Unexecuted instantiation: of_gpio.c:elf_init_struct Unexecuted instantiation: of_net.c:elf_init_struct Unexecuted instantiation: reserved-mem.c:elf_init_struct Unexecuted instantiation: of_mtd.c:elf_init_struct Unexecuted instantiation: overlay.c:elf_init_struct Unexecuted instantiation: resolver.c:elf_init_struct Unexecuted instantiation: of_firmware.c:elf_init_struct Unexecuted instantiation: ti-sysc.c:elf_init_struct Unexecuted instantiation: rtc-lib.c:elf_init_struct Unexecuted instantiation: class.c:elf_init_struct Unexecuted instantiation: nvmem.c:elf_init_struct Unexecuted instantiation: rtc-ds1307.c:elf_init_struct Unexecuted instantiation: reboot-mode.c:elf_init_struct Unexecuted instantiation: syscon-reboot-mode.c:elf_init_struct Unexecuted instantiation: nvmem-reboot-mode.c:elf_init_struct Unexecuted instantiation: synth.c:elf_init_struct Unexecuted instantiation: stddev.c:elf_init_struct Unexecuted instantiation: digest.c:elf_init_struct Unexecuted instantiation: hashsum.c:elf_init_struct Unexecuted instantiation: loadb.c:elf_init_struct Unexecuted instantiation: loadxy.c:elf_init_struct Unexecuted instantiation: loads.c:elf_init_struct Unexecuted instantiation: echo.c:elf_init_struct Unexecuted instantiation: md.c:elf_init_struct Unexecuted instantiation: mm.c:elf_init_struct Unexecuted instantiation: mw.c:elf_init_struct Unexecuted instantiation: memcmp.c:elf_init_struct Unexecuted instantiation: memcpy.c:elf_init_struct Unexecuted instantiation: memset.c:elf_init_struct Unexecuted instantiation: edit.c:elf_init_struct Unexecuted instantiation: sleep.c:elf_init_struct Unexecuted instantiation: msleep.c:elf_init_struct Unexecuted instantiation: reset.c:elf_init_struct Unexecuted instantiation: go.c:elf_init_struct Unexecuted instantiation: ls.c:elf_init_struct Unexecuted instantiation: cd.c:elf_init_struct Unexecuted instantiation: pwd.c:elf_init_struct Unexecuted instantiation: mkdir.c:elf_init_struct Unexecuted instantiation: rmdir.c:elf_init_struct Unexecuted instantiation: cp.c:elf_init_struct Unexecuted instantiation: rm.c:elf_init_struct Unexecuted instantiation: cat.c:elf_init_struct Unexecuted instantiation: mount.c:elf_init_struct Unexecuted instantiation: umount.c:elf_init_struct Unexecuted instantiation: crc.c:elf_init_struct Unexecuted instantiation: clear.c:elf_init_struct Unexecuted instantiation: test.c:elf_init_struct Unexecuted instantiation: flash.c:elf_init_struct Unexecuted instantiation: readline.c:elf_init_struct Unexecuted instantiation: setenv.c:elf_init_struct Unexecuted instantiation: export.c:elf_init_struct Unexecuted instantiation: printenv.c:elf_init_struct Unexecuted instantiation: saveenv.c:elf_init_struct Unexecuted instantiation: loadenv.c:elf_init_struct Unexecuted instantiation: true.c:elf_init_struct Unexecuted instantiation: false.c:elf_init_struct Unexecuted instantiation: bfetch.c:elf_init_struct Unexecuted instantiation: help.c:elf_init_struct Unexecuted instantiation: splash.c:elf_init_struct Unexecuted instantiation: fbtest.c:elf_init_struct Unexecuted instantiation: beep.c:elf_init_struct Unexecuted instantiation: gpio.c:elf_init_struct Unexecuted instantiation: uncompress.c:elf_init_struct Unexecuted instantiation: passwd.c:elf_init_struct Unexecuted instantiation: login.c:elf_init_struct Unexecuted instantiation: led.c:elf_init_struct Unexecuted instantiation: wd.c:elf_init_struct Unexecuted instantiation: trigger.c:elf_init_struct Unexecuted instantiation: time.c:elf_init_struct Unexecuted instantiation: uptime.c:elf_init_struct Unexecuted instantiation: of_diff.c:elf_init_struct Unexecuted instantiation: of_property.c:elf_init_struct Unexecuted instantiation: of_node.c:elf_init_struct Unexecuted instantiation: of_dump.c:elf_init_struct Unexecuted instantiation: of_display_timings.c:elf_init_struct Unexecuted instantiation: of_fixup_status.c:elf_init_struct Unexecuted instantiation: of_overlay.c:elf_init_struct Unexecuted instantiation: magicvar.c:elf_init_struct Unexecuted instantiation: iomemport.c:elf_init_struct Unexecuted instantiation: linux_exec.c:elf_init_struct Unexecuted instantiation: automount.c:elf_init_struct Unexecuted instantiation: global.c:elf_init_struct Unexecuted instantiation: dmesg.c:elf_init_struct Unexecuted instantiation: basename.c:elf_init_struct Unexecuted instantiation: dirname.c:elf_init_struct Unexecuted instantiation: readlink.c:elf_init_struct Unexecuted instantiation: let.c:elf_init_struct Unexecuted instantiation: ln.c:elf_init_struct Unexecuted instantiation: keystore.c:elf_init_struct Unexecuted instantiation: tftp.c:elf_init_struct Unexecuted instantiation: detect.c:elf_init_struct Unexecuted instantiation: devinfo.c:elf_init_struct Unexecuted instantiation: drvinfo.c:elf_init_struct Unexecuted instantiation: readf.c:elf_init_struct Unexecuted instantiation: 2048.c:elf_init_struct Unexecuted instantiation: hwclock.c:elf_init_struct Unexecuted instantiation: cmp.c:elf_init_struct Unexecuted instantiation: nv.c:elf_init_struct Unexecuted instantiation: defaultenv.c:elf_init_struct Unexecuted instantiation: dhcp.c:elf_init_struct Unexecuted instantiation: dhrystone.c:elf_init_struct Unexecuted instantiation: spd_decode.c:elf_init_struct Unexecuted instantiation: seed.c:elf_init_struct Unexecuted instantiation: ip-route-get.c:elf_init_struct Unexecuted instantiation: fuzz.c:elf_init_struct Unexecuted instantiation: tutorial.c:elf_init_struct Unexecuted instantiation: host.c:elf_init_struct Unexecuted instantiation: bcd.c:elf_init_struct Unexecuted instantiation: rbtree.c:elf_init_struct Unexecuted instantiation: display_options.c:elf_init_struct Unexecuted instantiation: string.c:elf_init_struct Unexecuted instantiation: strtox.c:elf_init_struct Unexecuted instantiation: kstrtox.c:elf_init_struct Unexecuted instantiation: vsprintf.c:elf_init_struct Unexecuted instantiation: parameter.c:elf_init_struct Unexecuted instantiation: xfuncs.c:elf_init_struct Unexecuted instantiation: getopt.c:elf_init_struct Unexecuted instantiation: readkey.c:elf_init_struct Unexecuted instantiation: kfifo.c:elf_init_struct Unexecuted instantiation: libbb.c:elf_init_struct Unexecuted instantiation: libgen.c:elf_init_struct Unexecuted instantiation: stringlist.c:elf_init_struct Unexecuted instantiation: cmdlinepart.c:elf_init_struct Unexecuted instantiation: recursive_action.c:elf_init_struct Unexecuted instantiation: make_directory.c:elf_init_struct Unexecuted instantiation: arith.c:elf_init_struct Unexecuted instantiation: div64.c:elf_init_struct Unexecuted instantiation: uuid.c:elf_init_struct Unexecuted instantiation: xxhash.c:elf_init_struct Unexecuted instantiation: decompress_bunzip2.c:elf_init_struct Unexecuted instantiation: decompress_inflate.c:elf_init_struct Unexecuted instantiation: fnmatch.c:elf_init_struct Unexecuted instantiation: find_next_bit.c:elf_init_struct Unexecuted instantiation: glob.c:elf_init_struct Unexecuted instantiation: notifier.c:elf_init_struct Unexecuted instantiation: random.c:elf_init_struct Unexecuted instantiation: image-sparse.c:elf_init_struct Unexecuted instantiation: lzo1x_decompress_safe.c:elf_init_struct Unexecuted instantiation: lz4_decompress.c:elf_init_struct Unexecuted instantiation: decompress.c:elf_init_struct Unexecuted instantiation: show_progress.c:elf_init_struct Unexecuted instantiation: decompress_unlzo.c:elf_init_struct Unexecuted instantiation: process_escape_sequence.c:elf_init_struct Unexecuted instantiation: base64.c:elf_init_struct Unexecuted instantiation: qsort.c:elf_init_struct Unexecuted instantiation: bmp.c:elf_init_struct Unexecuted instantiation: image_renderer.c:elf_init_struct Unexecuted instantiation: graphic_utils.c:elf_init_struct Unexecuted instantiation: 2d-primitives.c:elf_init_struct Unexecuted instantiation: xymodem.c:elf_init_struct Unexecuted instantiation: unlink-recursive.c:elf_init_struct Unexecuted instantiation: libfile.c:elf_init_struct Unexecuted instantiation: loadable.c:elf_init_struct Unexecuted instantiation: loadable-mem.c:elf_init_struct Unexecuted instantiation: loadable-file.c:elf_init_struct Unexecuted instantiation: loadable-compressed.c:elf_init_struct Unexecuted instantiation: bitmap.c:elf_init_struct Unexecuted instantiation: bsearch.c:elf_init_struct Unexecuted instantiation: fonts.c:elf_init_struct Unexecuted instantiation: font_8x16.c:elf_init_struct Unexecuted instantiation: list_sort.c:elf_init_struct Unexecuted instantiation: parseopt.c:elf_init_struct Unexecuted instantiation: ctype.c:elf_init_struct Unexecuted instantiation: hexdump.c:elf_init_struct Unexecuted instantiation: jwt.c:elf_init_struct Unexecuted instantiation: password.c:elf_init_struct Unexecuted instantiation: hmac.c:elf_init_struct Unexecuted instantiation: md5.c:elf_init_struct Unexecuted instantiation: sha1.c:elf_init_struct Unexecuted instantiation: sha2.c:elf_init_struct Unexecuted instantiation: sha4.c:elf_init_struct Unexecuted instantiation: pbkdf2.c:elf_init_struct Unexecuted instantiation: rsa.c:elf_init_struct Unexecuted instantiation: public-keys.c:elf_init_struct Unexecuted instantiation: crc32.c:elf_init_struct Unexecuted instantiation: memneq.c:elf_init_struct Unexecuted instantiation: lib.c:elf_init_struct Unexecuted instantiation: eth.c:elf_init_struct Unexecuted instantiation: net.c:elf_init_struct Unexecuted instantiation: sntp.c:elf_init_struct Unexecuted instantiation: ping.c:elf_init_struct Unexecuted instantiation: dns.c:elf_init_struct Unexecuted instantiation: ifup.c:elf_init_struct Unexecuted instantiation: cramfs.c:elf_init_struct Unexecuted instantiation: ext4fs.c:elf_init_struct Unexecuted instantiation: ext4_common.c:elf_init_struct Unexecuted instantiation: ext_barebox.c:elf_init_struct Unexecuted instantiation: ramfs.c:elf_init_struct Unexecuted instantiation: devfs-core.c:elf_init_struct Unexecuted instantiation: legacy.c:elf_init_struct Unexecuted instantiation: devfs.c:elf_init_struct Unexecuted instantiation: fs.c:elf_init_struct Unexecuted instantiation: libfs.c:elf_init_struct Unexecuted instantiation: compr.c:elf_init_struct Unexecuted instantiation: dir.c:elf_init_struct Unexecuted instantiation: nodelist.c:elf_init_struct Unexecuted instantiation: malloc.c:elf_init_struct Unexecuted instantiation: read.c:elf_init_struct Unexecuted instantiation: readinode.c:elf_init_struct Unexecuted instantiation: scan.c:elf_init_struct Unexecuted instantiation: build.c:elf_init_struct Unexecuted instantiation: super.c:elf_init_struct Unexecuted instantiation: debug.c:elf_init_struct Unexecuted instantiation: nfs.c:elf_init_struct Unexecuted instantiation: bpkfs.c:elf_init_struct Unexecuted instantiation: uimagefs.c:elf_init_struct Unexecuted instantiation: squashfs.c:elf_init_struct Unexecuted instantiation: namei.c:elf_init_struct Unexecuted instantiation: lzo_wrapper.c:elf_init_struct Unexecuted instantiation: ubootvarfs.c:elf_init_struct Unexecuted instantiation: fat.c:elf_init_struct Unexecuted instantiation: ff.c:elf_init_struct Unexecuted instantiation: fat-diskio.c:elf_init_struct Unexecuted instantiation: board.c:elf_init_struct Unexecuted instantiation: hostfile.c:elf_init_struct Unexecuted instantiation: devices.c:elf_init_struct Unexecuted instantiation: dtb.c:elf_init_struct Unexecuted instantiation: power.c:elf_init_struct Unexecuted instantiation: watchdog.c:elf_init_struct Unexecuted instantiation: cpuinfo.c:elf_init_struct Unexecuted instantiation: handoff-data.c:elf_init_struct Unexecuted instantiation: imd-barebox.c:elf_init_struct Unexecuted instantiation: fat-pbl.c:elf_init_struct Unexecuted instantiation: sha256.c:elf_init_struct |
31 | | |
32 | | int elf_check_image(struct elf_image *elf, void *buf); |
33 | | int elf_open_binary_into(struct elf_image *elf, void *buf); |
34 | | |
35 | | /* |
36 | | * Set the load address for the ELF file. |
37 | | * Must be called before elf_load(). |
38 | | * If not set, ET_EXEC uses p_paddr, ET_DYN uses lowest p_paddr. |
39 | | */ |
40 | | void elf_set_load_address(struct elf_image *elf, void *addr); |
41 | | |
42 | | /* |
43 | | * Parse the dynamic section and extract relocation information. |
44 | | * This is a generic function that works for both 32-bit and 64-bit ELF files, |
45 | | * and handles both REL and RELA relocation formats. |
46 | | * Returns 0 on success, -EINVAL on error. |
47 | | */ |
48 | | void *elf_find_dynamic_segment(struct elf_image *elf); |
49 | | |
50 | | /* |
51 | | * Parse the dynamic section and extract relocation information. |
52 | | * This is a generic function that works for both 32-bit and 64-bit ELF files, |
53 | | * and handles both REL and RELA relocation formats. |
54 | | * Returns 0 on success, -EINVAL on error. |
55 | | */ |
56 | | int elf_parse_dynamic_section_rel(struct elf_image *elf, const void *dyn_seg, |
57 | | void **rel_out, u64 *relsz_out, void **symtab); |
58 | | int elf_parse_dynamic_section_rela(struct elf_image *elf, const void *dyn_seg, |
59 | | void **rel_out, u64 *relsz_out, void **symtab); |
60 | | int elf_parse_dynamic_section_relr(struct elf_image *elf, const void *dyn_seg, |
61 | | void **relr_out, u64 *relrsz_out); |
62 | | |
63 | | /* |
64 | | * Apply dynamic relocations to an ELF binary already loaded in memory. |
65 | | * This modifies the ELF image in place without allocating new memory. |
66 | | * Useful for self-relocating loaders or externally loaded binaries. |
67 | | * The elf parameter must have been previously opened with elf_open_binary(). |
68 | | */ |
69 | | int elf_load_inplace(struct elf_image *elf); |
70 | | |
71 | | /* |
72 | | * Architecture-specific relocation handler. |
73 | | * Returns 0 on success, -ENOSYS if architecture doesn't support relocations, |
74 | | * other negative error codes on failure. |
75 | | */ |
76 | | int elf_apply_relocations(struct elf_image *elf, const void *dyn_seg); |
77 | | |
78 | | #endif |