introduce barebox_bare_init_size to known the bare_init size and check it
this allow to check we do not exceed the size of the SRAM as example introduce BAREBOX_MAX_BARE_INIT_SIZE the maximum size of bare_init this will allow your bare_init will fit in SRAM as example ARCH can overwrite it via ARCH_BAREBOX_MAX_BARE_INIT_SIZE Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
parent
4bcf52aa66
commit
463229490e
|
@ -44,9 +44,12 @@ SECTIONS
|
|||
. = 0x1000;
|
||||
LONG(0x53555243) /* 'CRUS' */
|
||||
#endif
|
||||
__bare_init_start = .;
|
||||
*(.text_bare_init*)
|
||||
__bare_init_end = .;
|
||||
*(.text*)
|
||||
}
|
||||
BAREBOX_BARE_INIT_SIZE
|
||||
|
||||
. = ALIGN(4);
|
||||
.rodata : { *(.rodata*) }
|
||||
|
|
|
@ -34,9 +34,12 @@ SECTIONS
|
|||
*(.text_entry*)
|
||||
_stext = .;
|
||||
_text = .;
|
||||
__bare_init_start = .;
|
||||
*(.text_bare_init*)
|
||||
__bare_init_end = .;
|
||||
*(.text*)
|
||||
}
|
||||
BAREBOX_BARE_INIT_SIZE
|
||||
|
||||
PRE_IMAGE
|
||||
|
||||
|
|
|
@ -44,9 +44,12 @@ SECTIONS
|
|||
_stext = .;
|
||||
__text = .;
|
||||
_text = .;
|
||||
__bare_init_start = .;
|
||||
*(.text_entry)
|
||||
__bare_init_end = .;
|
||||
*(.text)
|
||||
}
|
||||
BAREBOX_BARE_INIT_SIZE
|
||||
|
||||
. = ALIGN(4);
|
||||
.rodata : { *(.rodata) }
|
||||
|
|
|
@ -145,13 +145,16 @@ SECTIONS
|
|||
/* do not align here! It may fails with the LOADADDR! */
|
||||
_stext = .;
|
||||
*(.text_entry*)
|
||||
__bare_init_start = .;
|
||||
*(.text_bare_init*)
|
||||
__bare_init_end = .;
|
||||
*(.text*)
|
||||
. = ALIGN(4);
|
||||
*(.rodata*)
|
||||
. = ALIGN(4);
|
||||
_etext = .; /* End of text and rodata section */
|
||||
} > barebox
|
||||
BAREBOX_BARE_INIT_SIZE
|
||||
|
||||
.data : AT ( LOADADDR(.text) + SIZEOF(.text) ) {
|
||||
*(.data*)
|
||||
|
|
|
@ -111,6 +111,15 @@ config BAREBOX_MAX_IMAGE_SIZE
|
|||
help
|
||||
Define the maximum size of barebox
|
||||
|
||||
config BAREBOX_MAX_BARE_INIT_SIZE
|
||||
prompt "Maximum bare_init size"
|
||||
hex
|
||||
default 0xffffffff
|
||||
help
|
||||
Define the maximum size of bare_init
|
||||
this will allow your bare_init will fit in SRAM as example
|
||||
ARCH can overwrite it via ARCH_BAREBOX_MAX_BARE_INIT_SIZE
|
||||
|
||||
config HAVE_CONFIGURABLE_MEMORY_LAYOUT
|
||||
bool
|
||||
|
||||
|
|
|
@ -26,3 +26,18 @@
|
|||
#define BAREBOX_SYMS KEEP(*(__usymtab))
|
||||
|
||||
#define BAREBOX_MAGICVARS KEEP(*(SORT_BY_NAME(.barebox_magicvar*)))
|
||||
|
||||
#if defined(CONFIG_ARCH_BAREBOX_MAX_BARE_INIT_SIZE) && \
|
||||
CONFIG_ARCH_BAREBOX_MAX_BARE_INIT_SIZE < CONFIG_BAREBOX_MAX_BARE_INIT_SIZE
|
||||
#define MAX_BARE_INIT_SIZE CONFIG_ARCH_BAREBOX_MAX_BARE_INIT_SIZE
|
||||
#else
|
||||
#define MAX_BARE_INIT_SIZE CONFIG_BAREBOX_MAX_BARE_INIT_SIZE
|
||||
#endif
|
||||
|
||||
#include <linux/stringify.h>
|
||||
/* use 2 ASSERT because ld can not accept '"size" "10"' format */
|
||||
#define BAREBOX_BARE_INIT_SIZE \
|
||||
_barebox_bare_init_size = __bare_init_end - _text; \
|
||||
ASSERT(_barebox_bare_init_size < MAX_BARE_INIT_SIZE, "Barebox bare_init size > ") \
|
||||
ASSERT(_barebox_bare_init_size < MAX_BARE_INIT_SIZE, __stringify(MAX_BARE_INIT_SIZE)) \
|
||||
|
||||
|
|
|
@ -3,9 +3,12 @@
|
|||
|
||||
extern char _text[], _stext[], _etext[];
|
||||
extern char __bss_start[], __bss_stop[];
|
||||
extern char __bare_init_start[], __bare_init_end[];
|
||||
extern char _end[];
|
||||
extern void *_barebox_image_size;
|
||||
extern void *_barebox_bare_init_size;
|
||||
|
||||
#define barebox_image_size (unsigned int)&_barebox_image_size
|
||||
#define barebox_bare_init_size (unsigned int)&_barebox_bare_init_size
|
||||
|
||||
#endif /* _ASM_GENERIC_SECTIONS_H_ */
|
||||
|
|
Loading…
Reference in New Issue