[coreboot-gerrit] New patch to review for coreboot: memlayout: Add symbols for stage bounds

Julius Werner (jwerner@chromium.org) gerrit at coreboot.org
Fri Feb 19 01:17:10 CET 2016


Julius Werner (jwerner at chromium.org) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/13737

-gerrit

commit d6537fe8419dd125f45a1f2959c9948bae3bca49
Author: Julius Werner <jwerner at chromium.org>
Date:   Thu Feb 18 15:46:15 2016 -0800

    memlayout: Add symbols for stage bounds
    
    Stages are inconsistent with other memlayout regions in that they don't
    have _<name> and _e<name> symbols defined. We have _program and
    _eprogram, but that always only refers to the current stage and
    _eprogram marks the actual end of the executable's memory footprint, not
    the end of the area allocated in memlayout. Both of these are sometimes
    useful to know, so let's add another set of symbols that allow the stage
    areas to be treated more similarly to other regions.
    
    Change-Id: I9e8cff46bb15b51c71a87bd11affb37610aa7df9
    Signed-off-by: Julius Werner <jwerner at chromium.org>
---
 src/include/memlayout.h | 24 ++++++++++++------------
 src/include/symbols.h   | 18 ++++++++++++++++++
 2 files changed, 30 insertions(+), 12 deletions(-)

diff --git a/src/include/memlayout.h b/src/include/memlayout.h
index e62782a..49aa1cc 100644
--- a/src/include/memlayout.h
+++ b/src/include/memlayout.h
@@ -103,38 +103,38 @@
 /* Careful: 'INCLUDE <filename>' must always be at the end of the output line */
 #if ENV_BOOTBLOCK
 	#define BOOTBLOCK(addr, sz) \
-		SET_COUNTER(bootblock, addr) \
+		SYMBOL(bootblock, addr) \
+		_ebootblock = _bootblock + sz; \
 		_ = ASSERT(_eprogram - _program <= sz, \
 			STR(Bootblock exceeded its allotted size! (sz))); \
 		INCLUDE "bootblock/lib/program.ld"
 #else
 	#define BOOTBLOCK(addr, sz) \
-		SET_COUNTER(bootblock, addr) \
-		. += sz;
+		REGION(bootblock, addr, sz, 1)
 #endif
 
 #if ENV_ROMSTAGE
 	#define ROMSTAGE(addr, sz) \
-		SET_COUNTER(romstage, addr) \
+		SYMBOL(romstage, addr) \
+		_eromstage = _romstage + sz; \
 		_ = ASSERT(_eprogram - _program <= sz, \
 			STR(Romstage exceeded its allotted size! (sz))); \
 		INCLUDE "romstage/lib/program.ld"
 #else
 	#define ROMSTAGE(addr, sz) \
-		SET_COUNTER(romstage, addr) \
-		. += sz;
+		REGION(romstage, addr, sz, 1)
 #endif
 
 #if ENV_RAMSTAGE
 	#define RAMSTAGE(addr, sz) \
-		SET_COUNTER(ramstage, addr) \
+		SYMBOL(ramstage, addr) \
+		_eramstage = _ramstage + sz; \
 		_ = ASSERT(_eprogram - _program <= sz, \
 			STR(Ramstage exceeded its allotted size! (sz))); \
 		INCLUDE "ramstage/lib/program.ld"
 #else
 	#define RAMSTAGE(addr, sz) \
-		SET_COUNTER(ramstage, addr) \
-		. += sz;
+		REGION(ramstage, addr, sz, 1)
 #endif
 
 /* Careful: required work buffer size depends on RW properties such as key size
@@ -146,7 +146,8 @@
 
 #if ENV_VERSTAGE
 	#define VERSTAGE(addr, sz) \
-		SET_COUNTER(verstage, addr) \
+		SYMBOL(verstage, addr) \
+		_everstage = _verstage + sz; \
 		_ = ASSERT(_eprogram - _program <= sz, \
 			STR(Verstage exceeded its allotted size! (sz))); \
 		INCLUDE "verstage/lib/program.ld"
@@ -154,8 +155,7 @@
 	#define OVERLAP_VERSTAGE_ROMSTAGE(addr, size) VERSTAGE(addr, size)
 #else
 	#define VERSTAGE(addr, sz) \
-		SET_COUNTER(verstage, addr) \
-		. += sz;
+		REGION(verstage, addr, sz, 1)
 
 	#define OVERLAP_VERSTAGE_ROMSTAGE(addr, size) ROMSTAGE(addr, size)
 #endif
diff --git a/src/include/symbols.h b/src/include/symbols.h
index a36392f..d7cb35c 100644
--- a/src/include/symbols.h
+++ b/src/include/symbols.h
@@ -62,6 +62,24 @@ extern u8 _program[];
 extern u8 _eprogram[];
 #define _program_size (_eprogram - _program)
 
+/* _<stage>_size is always the maximum amount allocated in memlayout, whereas
+ * _program_size gives the actual memory footprint *used* by current stage. */
+extern u8 _bootblock[];
+extern u8 _ebootblock[];
+#define _bootblock_size (_ebootblock - _bootblock)
+
+extern u8 _romstage[];
+extern u8 _eromstage[];
+#define _romstage_size (_eromstage - _romstage)
+
+extern u8 _ramstage[];
+extern u8 _eramstage[];
+#define _ramstage_size (_eramstage - _ramstage)
+
+extern u8 _verstage[];
+extern u8 _everstage[];
+#define _verstage_size (_everstage - _verstage)
+
 /* Arch-specific, move to <arch/symbols.h> if they become too many. */
 
 extern u8 _ttb[];



More information about the coreboot-gerrit mailing list