From 862c385f9a6a5b92fa6b694136854d84b471ed8e Mon Sep 17 00:00:00 2001 From: Julius Werner Date: Thu, 18 Feb 2016 15:46:15 -0800 Subject: memlayout: Add symbols for stage bounds Stages are inconsistent with other memlayout regions in that they don't have _ and _e 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 Reviewed-on: https://review.coreboot.org/13737 Tested-by: build bot (Jenkins) Reviewed-by: Aaron Durbin --- src/include/memlayout.h | 24 ++++++++++++------------ src/include/symbols.h | 18 ++++++++++++++++++ 2 files changed, 30 insertions(+), 12 deletions(-) (limited to 'src/include') diff --git a/src/include/memlayout.h b/src/include/memlayout.h index e62782aacd..49aa1cc437 100644 --- a/src/include/memlayout.h +++ b/src/include/memlayout.h @@ -103,38 +103,38 @@ /* Careful: 'INCLUDE ' 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 a36392f125..d7cb35c0ef 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) +/* __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 if they become too many. */ extern u8 _ttb[]; -- cgit v1.2.3