summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/include/memlayout.h24
-rw-r--r--src/include/symbols.h18
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[];