diff --git a/payloads/libpayload/Kconfig b/payloads/libpayload/Kconfig index 3c579e6af8..be68859a32 100644 --- a/payloads/libpayload/Kconfig +++ b/payloads/libpayload/Kconfig @@ -119,6 +119,35 @@ config MULTIBOOT depends on ARCH_X86 default y +config HEAP_SIZE + int "Heap size" + default 131072 + help + This is the heap size (malloc'able size) available + to the payload. + + If unsure, set to 131072 (128K) + +config STACK_SIZE + int "Stack size" + default 16384 + help + This is the stack size available to the payload. + + If unsure, set to 16384 (16K) + +config BASE_ADDRESS + hex "Base address" + default 0x04000000 if ARCH_ARM + default 0x80100000 if ARCH_ARM64 + default 0x00000000 if ARCH_MIPS + default 0x00100000 if ARCH_X86 + help + This is the base address for the payload. + + If unsure, set to 0x00100000 on x86, 0x00000000 on MIPS, + 0x04000000 on ARM or 0x80100000 on ARM64. + endmenu menu "Standard Libraries" diff --git a/payloads/libpayload/arch/arm/libpayload.ldscript b/payloads/libpayload/arch/arm/libpayload.ldscript index 5f65bd7f1a..492bd0c373 100644 --- a/payloads/libpayload/arch/arm/libpayload.ldscript +++ b/payloads/libpayload/arch/arm/libpayload.ldscript @@ -28,19 +28,14 @@ * SUCH DAMAGE. */ -BASE_ADDRESS = 0x4000000; - OUTPUT_FORMAT("elf32-littlearm","elf32-littlearm", "elf32-littlearm") OUTPUT_ARCH(arm) ENTRY(_entry) -HEAP_SIZE = 2*64*1024; -STACK_SIZE = 16384; - SECTIONS { - . = BASE_ADDRESS; + . = CONFIG_LP_BASE_ADDRESS; . = ALIGN(16); _start = .; @@ -74,12 +69,12 @@ SECTIONS . = ALIGN(16); _heap = .; - . += HEAP_SIZE; + . += CONFIG_LP_HEAP_SIZE; . = ALIGN(16); _eheap = .; _estack = .; - . += STACK_SIZE; + . += CONFIG_LP_STACK_SIZE; . = ALIGN(16); _stack = .; } diff --git a/payloads/libpayload/arch/arm64/libpayload.ldscript b/payloads/libpayload/arch/arm64/libpayload.ldscript index 50c82dce9b..5c807cef17 100644 --- a/payloads/libpayload/arch/arm64/libpayload.ldscript +++ b/payloads/libpayload/arch/arm64/libpayload.ldscript @@ -28,19 +28,14 @@ * SUCH DAMAGE. */ -BASE_ADDRESS = 0x80100000; - OUTPUT_FORMAT("elf64-littleaarch64","elf64-littleaarch64", "elf64-littleaarch64") OUTPUT_ARCH(arm64) ENTRY(_entry) -HEAP_SIZE = 2*64*1024; -STACK_SIZE = 16384; - SECTIONS { - . = BASE_ADDRESS; + . = CONFIG_LP_BASE_ADDRESS; . = ALIGN(16); _start = .; @@ -74,12 +69,12 @@ SECTIONS . = ALIGN(16); _heap = .; - . += HEAP_SIZE; + . += CONFIG_LP_HEAP_SIZE; . = ALIGN(16); _eheap = .; _estack = .; - . += STACK_SIZE; + . += CONFIG_LP_STACK_SIZE; . = ALIGN(16); _stack = .; @@ -88,7 +83,7 @@ SECTIONS */ _exc_estack = .; - . += STACK_SIZE; + . += CONFIG_LP_STACK_SIZE; . = ALIGN(16); _exc_stack = .; } diff --git a/payloads/libpayload/arch/mips/libpayload.ldscript b/payloads/libpayload/arch/mips/libpayload.ldscript index 28a741293b..351c2254fb 100644 --- a/payloads/libpayload/arch/mips/libpayload.ldscript +++ b/payloads/libpayload/arch/mips/libpayload.ldscript @@ -20,15 +20,11 @@ OUTPUT_ARCH(mips) -BASE_ADDRESS = 0x00000000; ENTRY(_entry) -HEAP_SIZE = 2*64*1024; -STACK_SIZE = 16*1024; - SECTIONS { - . = BASE_ADDRESS; + . = CONFIG_LP_BASE_ADDRESS; . = ALIGN(16); _start = .; @@ -68,12 +64,12 @@ SECTIONS . = ALIGN(16); _heap = .; - . += HEAP_SIZE; + . += CONFIG_LP_HEAP_SIZE; . = ALIGN(16); _eheap = .; _estack = .; - . += STACK_SIZE; + . += CONFIG_LP_STACK_SIZE; . = ALIGN(16); _stack = .; } diff --git a/payloads/libpayload/arch/x86/libpayload.ldscript b/payloads/libpayload/arch/x86/libpayload.ldscript index 3e7d4cc318..bcb2165a2f 100644 --- a/payloads/libpayload/arch/x86/libpayload.ldscript +++ b/payloads/libpayload/arch/x86/libpayload.ldscript @@ -27,19 +27,14 @@ * SUCH DAMAGE. */ -BASE_ADDRESS = 0x100000; - OUTPUT_FORMAT(elf32-i386) OUTPUT_ARCH(i386) ENTRY(_entry) -HEAP_SIZE = 2*64*1024; -STACK_SIZE = 16384; - SECTIONS { - . = BASE_ADDRESS; + . = CONFIG_LP_BASE_ADDRESS; . = ALIGN(16); _start = .; @@ -73,12 +68,12 @@ SECTIONS . = ALIGN(16); _heap = .; - . += HEAP_SIZE; + . += CONFIG_LP_HEAP_SIZE; . = ALIGN(16); _eheap = .; _estack = .; - . += STACK_SIZE; + . += CONFIG_LP_STACK_SIZE; . = ALIGN(16); _stack = .; } diff --git a/payloads/libpayload/bin/lpgcc b/payloads/libpayload/bin/lpgcc index 04c7e584d0..b3ef342ff2 100755 --- a/payloads/libpayload/bin/lpgcc +++ b/payloads/libpayload/bin/lpgcc @@ -187,6 +187,10 @@ else _LDFLAGS="$_LDFLAGS -Wl,--fix-cortex-a53-843419" fi + _LDFLAGS="$_LDFLAGS -Wl,--defsym=CONFIG_LP_BASE_ADDRESS=$CONFIG_LP_BASE_ADDRESS" + _LDFLAGS="$_LDFLAGS -Wl,--defsym=CONFIG_LP_HEAP_SIZE=$CONFIG_LP_HEAP_SIZE" + _LDFLAGS="$_LDFLAGS -Wl,--defsym=CONFIG_LP_STACK_SIZE=$CONFIG_LP_STACK_SIZE" + if [ $DEBUGME -eq 1 ]; then echo "$DEFAULT_CC $_LDFLAGS $HEAD_O $CMDLINE $_CFLAGS -lpayload $_LIBGCC" fi