summaryrefslogtreecommitdiff
path: root/core/nds32/config_core.h
diff options
context:
space:
mode:
Diffstat (limited to 'core/nds32/config_core.h')
-rw-r--r--core/nds32/config_core.h14
1 files changed, 14 insertions, 0 deletions
diff --git a/core/nds32/config_core.h b/core/nds32/config_core.h
index 57909a263a..d7a25d27da 100644
--- a/core/nds32/config_core.h
+++ b/core/nds32/config_core.h
@@ -10,4 +10,18 @@
#define BFD_ARCH nds32
#define BFD_FORMAT "elf32-nds32le"
+
+/*
+ * Force the compiler to use a proper relocation when accessing an external
+ * variable in a read-only section.
+ * TODO(crosbug.com/p/24378): remove me when the nds32 toolchain bug is fixed.
+ */
+#undef RO
+#define RO(var) \
+({ \
+ typeof(var) *__ptr_val; \
+ asm volatile("la %0, " #var "\n" : "=r"(__ptr_val)); \
+ ((typeof(var))(*__ptr_val)); \
+})
+
#endif /* __CONFIG_CORE_H */