diff options
Diffstat (limited to 'core/nds32/config_core.h')
-rw-r--r-- | core/nds32/config_core.h | 14 |
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 */ |