diff options
-rw-r--r-- | src/include/memlayout.h | 24 | ||||
-rw-r--r-- | 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 e62782aacd..49aa1cc437 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 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) +/* _<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[]; |