aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/or1k
diff options
context:
space:
mode:
authorStafford Horne <shorne@gmail.com>2020-03-22 10:13:22 +0900
committerStafford Horne <shorne@gmail.com>2021-01-14 08:45:01 +0900
commite40fdcc4f423dd1c3543979ddb8f33bf01dac5e4 (patch)
tree42a8ea887d16836f6470219832bad0cbf12205e6 /gcc/config/or1k
parent6ed637c585b1ffb25b9c00c57c3a9ee9955a0df5 (diff)
downloadgcc-e40fdcc4f423dd1c3543979ddb8f33bf01dac5e4.zip
gcc-e40fdcc4f423dd1c3543979ddb8f33bf01dac5e4.tar.gz
gcc-e40fdcc4f423dd1c3543979ddb8f33bf01dac5e4.tar.bz2
or1k: Fixup exception header data encodings
While running glibc tests several *-textrel tests failed showing that relocations remained against read only sections. It turned out this was related to exception headers data encoding being wrong. By default pointer encoding will always use the DW_EH_PE_absptr format. This patch uses format DW_EH_PE_pcrel and DW_EH_PE_sdata4. Optionally DW_EH_PE_indirect is included for global symbols. This eliminates the relocations. gcc/ChangeLog: * config/or1k/or1k.h (ASM_PREFERRED_EH_DATA_FORMAT): New macro.
Diffstat (limited to 'gcc/config/or1k')
-rw-r--r--gcc/config/or1k/or1k.h4
1 files changed, 4 insertions, 0 deletions
diff --git a/gcc/config/or1k/or1k.h b/gcc/config/or1k/or1k.h
index b686f1b..fe01ab8 100644
--- a/gcc/config/or1k/or1k.h
+++ b/gcc/config/or1k/or1k.h
@@ -408,4 +408,8 @@ do { \
((N) < 4 ? HW_TO_GCC_REGNO (25) + (N) : INVALID_REGNUM)
#define EH_RETURN_STACKADJ_RTX gen_rtx_REG (Pmode, EH_RETURN_REGNUM)
+/* Select a format to encode pointers in exception handling data. */
+#define ASM_PREFERRED_EH_DATA_FORMAT(CODE, GLOBAL) \
+ (((GLOBAL) ? DW_EH_PE_indirect : 0) | DW_EH_PE_pcrel | DW_EH_PE_sdata4)
+
#endif /* GCC_OR1K_H */