diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2020-09-17 09:44:07 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2020-09-18 10:39:36 +0200 |
commit | 51f20205ed899c9b867cc0b9dcd5cd71fa16f50e (patch) | |
tree | 690b656a549311d06e348bc7c7b53ad54ae1797d /include/asm-generic | |
parent | 96028fb0995a9a5ff89ba9913eb9a62bfa248cbc (diff) | |
download | barebox-51f20205ed899c9b867cc0b9dcd5cd71fa16f50e.tar.gz barebox-51f20205ed899c9b867cc0b9dcd5cd71fa16f50e.tar.xz |
Add constructor support
Call constructors (gcc-generated initcall-like functions) during barebox
start. Constructors are e.g. used for kasan initialization.
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'include/asm-generic')
-rw-r--r-- | include/asm-generic/barebox.lds.h | 12 | ||||
-rw-r--r-- | include/asm-generic/sections.h | 3 |
2 files changed, 15 insertions, 0 deletions
diff --git a/include/asm-generic/barebox.lds.h b/include/asm-generic/barebox.lds.h index 138e9405a1..6971e2c1d2 100644 --- a/include/asm-generic/barebox.lds.h +++ b/include/asm-generic/barebox.lds.h @@ -113,12 +113,24 @@ KEEP(*(.rsa_keys.rodata.*)); \ __rsa_keys_end = .; \ +#ifdef CONFIG_CONSTRUCTORS +#define KERNEL_CTORS() . = ALIGN(8); \ + __ctors_start = .; \ + KEEP(*(.ctors)) \ + KEEP(*(SORT(.init_array.*))) \ + KEEP(*(.init_array)) \ + __ctors_end = .; +#else +#define KERNEL_CTORS() +#endif + #define RO_DATA_SECTION \ BAREBOX_INITCALLS \ BAREBOX_EXITCALLS \ BAREBOX_CMDS \ BAREBOX_RATP_CMDS \ BAREBOX_SYMS \ + KERNEL_CTORS() \ BAREBOX_MAGICVARS \ BAREBOX_CLK_TABLE \ BAREBOX_DTB \ diff --git a/include/asm-generic/sections.h b/include/asm-generic/sections.h index f584cad48d..870bff21f6 100644 --- a/include/asm-generic/sections.h +++ b/include/asm-generic/sections.h @@ -13,6 +13,9 @@ extern void *_barebox_image_size; extern void *_barebox_bare_init_size; extern void *_barebox_pbl_size; +/* Start and end of .ctors section - used for constructor calls. */ +extern char __ctors_start[], __ctors_end[]; + #define barebox_image_size (__image_end - __image_start) #define barebox_bare_init_size (unsigned int)&_barebox_bare_init_size #define barebox_pbl_size (__piggydata_start - __image_start) |