summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/include/stddef.h8
-rw-r--r--src/lib/program.ld4
2 files changed, 12 insertions, 0 deletions
diff --git a/src/include/stddef.h b/src/include/stddef.h
index b58f645a3b..35326ed6c6 100644
--- a/src/include/stddef.h
+++ b/src/include/stddef.h
@@ -34,4 +34,12 @@ typedef unsigned int wint_t;
#define MAYBE_STATIC static
#endif
+#ifndef __ROMCC__
+/* Provide a pointer to address 0 that thwarts any "accessing this is
+ * undefined behaviour and do whatever" trickery in compilers.
+ * Use when you _really_ need to read32(zeroptr) (ie. read address 0).
+ */
+extern void *zeroptr;
+#endif
+
#endif /* STDDEF_H */
diff --git a/src/lib/program.ld b/src/lib/program.ld
index 865b5f6aa7..9b8c7c9ec1 100644
--- a/src/lib/program.ld
+++ b/src/lib/program.ld
@@ -133,6 +133,10 @@ _eprogram = .;
/* Discard the sections we don't need/want */
+.zeroptr 0 (NOLOAD) : {
+ zeroptr = .;
+}
+
/DISCARD/ : {
*(.comment)
*(.comment.*)