[U-Boot-Users] [Patch 05/17] U-Boot-V2:ARM: Introduce capability to have different stack/malloc area

Menon, Nishanth x0nishan at ti.com
Wed May 21 18:26:25 CEST 2008


The default setup of ARM memory allocation is as follows:
 ----
Stack Area
 ----
Heap Area
---
_u_boot_start
Rest of U-Boot..

This is an excellent strategy to catch stack overflow and memory buffer overflow issues. However, in conditions where:
a) U-Boot is automatically loaded by h/w in the default location without a writable memory area above it, this will crash,
b) Multiple non-contiguous memory areas available in system (e.g. SRAM and SDRAM), but the area where U-Boot is loaded is restricted in size and cannot fit the required heap and stack areas.
In these cases, we need to have ability to move the Heap and stack to the area of our choice. This patch introduces CONFIG_MALLOC_START for machine configurations which require this.
This would need to be enabled only if MACH_CAN_MODIFY_MALLOC_START is defined by the machine configurations that desire it. I have clubbed both heap and stack area to still catch some of those overflow issues.

Signed-off-by: Nishanth Menon<x0nishan at ti.com>

---
 arch/arm/Kconfig         |   22 ++++++++++++++++++++++
 arch/arm/cpu/start-arm.S |    9 +++++++++
 arch/arm/lib/arm.c       |    5 +++++
 3 files changed, 36 insertions(+)

Index: u-boot-v2.git/arch/arm/lib/arm.c
===================================================================
--- u-boot-v2.git.orig/arch/arm/lib/arm.c	2008-05-20 17:19:42.000000000 -0500
+++ u-boot-v2.git/arch/arm/lib/arm.c	2008-05-20 17:26:33.000000000 -0500
@@ -6,8 +6,13 @@
 
 int arm_mem_malloc_init(void)
 {
+#ifndef CONFIG_MALLOC_START
 	mem_malloc_init((void *)(_u_boot_start - CFG_MALLOC_LEN),
 			(void *)_u_boot_start);
+#else
+	mem_malloc_init((void *)(CONFIG_MALLOC_START - CFG_MALLOC_LEN),
+			(void *)CONFIG_MALLOC_START);
+#endif
 	return 0;
 }
 
Index: u-boot-v2.git/arch/arm/Kconfig
===================================================================
--- u-boot-v2.git.orig/arch/arm/Kconfig	2008-05-20 17:19:42.000000000 -0500
+++ u-boot-v2.git/arch/arm/Kconfig	2008-05-20 17:26:33.000000000 -0500
@@ -168,6 +168,28 @@
 	  If you want to start a 2.6 kernel and use an
 	  initrd image say y here.
 
+config MACH_CAN_MODIFY_MALLOC_START
+	bool
+
+config MALLOC_START_MODIFY
+	bool "Change Malloc Address location from default"
+	default n
+	depends on MACH_CAN_MODIFY_MALLOC_START
+	help
+	  Say Y here if you meanto put malloc and stack elsewhere.
+	  The default is to put Malloc and stack just above the
+	  interrupt vectors(_start). It is usually desired to keep it here
+	  as we can catch stack overflow and corruption issues easily.
+	  USE THIS OPTION WITH CAUTION
+
+config MALLOC_START
+	hex
+	prompt "Provide Alternate Malloc Start address"
+	depends on MALLOC_START_MODIFY
+	help
+	  Provide the alternate malloc start address. Remember that the area
+	  that will be used will be (this address) to (this address - CFG_MALLOC_LEN - CONFIG_STACKSIZE)
+
 endmenu
 
 source common/Kconfig
Index: u-boot-v2.git/arch/arm/cpu/start-arm.S
===================================================================
--- u-boot-v2.git.orig/arch/arm/cpu/start-arm.S	2008-05-20 17:26:30.000000000 -0500
+++ u-boot-v2.git/arch/arm/cpu/start-arm.S	2008-05-20 17:26:33.000000000 -0500
@@ -90,11 +90,20 @@
  * FIXME
  *************************************************************************/
 
+#ifndef CONFIG_MALLOC_START
 _MALLOC_START:
 	.word _start - CFG_MALLOC_LEN
 
 _STACK_START:
 	.word _start - CFG_MALLOC_LEN - CONFIG_STACKSIZE
+#else
+_MALLOC_START:
+	.word CONFIG_MALLOC_START - CFG_MALLOC_LEN
+
+_STACK_START:
+	.word CONFIG_MALLOC_START - CFG_MALLOC_LEN - CONFIG_STACKSIZE
+#endif
+
 
 /*
  * These are defined in the board-specific linker script.




More information about the U-Boot mailing list