From 821844534c78c60041402e732892f79865636650 Mon Sep 17 00:00:00 2001 From: Stefan Reinauer Date: Sat, 12 Mar 2016 16:18:17 -0800 Subject: libpayload: Move base address, stack and heap size to Kconfig This will allow more payloads to use the standard linker script instead of implementing their own. Change-Id: Ie60120769829f427ceb722109d85859b61dbde31 Signed-off-by: Stefan Reinauer Reviewed-on: https://review.coreboot.org/14074 Tested-by: build bot (Jenkins) Reviewed-by: Martin Roth --- payloads/libpayload/Kconfig | 29 ++++++++++++++++++++++ payloads/libpayload/arch/arm/libpayload.ldscript | 11 +++----- payloads/libpayload/arch/arm64/libpayload.ldscript | 13 +++------- payloads/libpayload/arch/mips/libpayload.ldscript | 10 +++----- payloads/libpayload/arch/x86/libpayload.ldscript | 11 +++----- payloads/libpayload/bin/lpgcc | 4 +++ 6 files changed, 46 insertions(+), 32 deletions(-) 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 -- cgit v1.2.3