aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/microblaze/microblaze.h
diff options
context:
space:
mode:
authorEdgar E. Iglesias <edgar.iglesias@xilinx.com>2017-01-06 20:54:34 +0000
committerJoseph Myers <jsm28@gcc.gnu.org>2017-01-06 20:54:34 +0000
commitb69195a0f48add25066ee99ef00597715d3c1fe7 (patch)
treebf1a938e1e5e9e5426bda271978925b3fea8de59 /gcc/config/microblaze/microblaze.h
parent75213cc0e4b3afd8e677f25e4fe9201f1b856f33 (diff)
downloadgcc-b69195a0f48add25066ee99ef00597715d3c1fe7.zip
gcc-b69195a0f48add25066ee99ef00597715d3c1fe7.tar.gz
gcc-b69195a0f48add25066ee99ef00597715d3c1fe7.tar.bz2
Make MicroBlaze support DWARF EH (old Xilinx patch, needed for glibc build).
This patch, taken from <https://git.busybox.net/buildroot/tree/package/gcc/5.4.0/840-microblaze-enable-dwarf-eh-support.patch> and with a few formatting cleanups and an update for the removal of gen_rtx_raw_REG, enables DWARF EH support for MicroBlaze. This is needed for building glibc with a compiler that includes shared libgcc; right now all glibc builds for MicroBlaze are failing with my bot for lack of this support. (It's dubious if we should have glibc ports at all where required support is missing in FSF GCC.) Tested building glibc with build-many-glibcs.py. I have *not* done any other testing or any execution testing for MicroBlaze. 2017-01-06 Edgar E. Iglesias <edgar.iglesias@xilinx.com> David Holsgrove <david.holsgrove@xilinx.com> * common/config/microblaze/microblaze-common.c (TARGET_EXCEPT_UNWIND_INFO): Remove. * config/microblaze/microblaze-protos.h (microblaze_eh_return): New prototype. * config/microblaze/microblaze.c (microblaze_must_save_register) (microblaze_expand_epilogue, microblaze_return_addr): Handle calls_eh_return. (microblaze_eh_return): New function. * config/microblaze/microblaze.h (RETURN_ADDR_OFFSET) (EH_RETURN_DATA_REGNO, MB_EH_STACKADJ_REGNUM) (EH_RETURN_STACKADJ_RTX, ASM_PREFERRED_EH_DATA_FORMAT): New macros. * config/microblaze/microblaze.md (eh_return): New pattern. Co-Authored-By: David Holsgrove <david.holsgrove@xilinx.com> From-SVN: r244183
Diffstat (limited to 'gcc/config/microblaze/microblaze.h')
-rw-r--r--gcc/config/microblaze/microblaze.h16
1 files changed, 16 insertions, 0 deletions
diff --git a/gcc/config/microblaze/microblaze.h b/gcc/config/microblaze/microblaze.h
index 527f4d3..8fdadbf 100644
--- a/gcc/config/microblaze/microblaze.h
+++ b/gcc/config/microblaze/microblaze.h
@@ -184,6 +184,22 @@ extern enum pipeline_type microblaze_pipe;
#define INCOMING_RETURN_ADDR_RTX \
gen_rtx_REG (Pmode, GP_REG_FIRST + MB_ABI_SUB_RETURN_ADDR_REGNUM)
+/* Specifies the offset from INCOMING_RETURN_ADDR_RTX and the actual return PC. */
+#define RETURN_ADDR_OFFSET (8)
+
+/* Describe how we implement __builtin_eh_return. */
+#define EH_RETURN_DATA_REGNO(N) \
+ (((N) < 2) ? MB_ABI_FIRST_ARG_REGNUM + (N) : INVALID_REGNUM)
+
+#define MB_EH_STACKADJ_REGNUM MB_ABI_INT_RETURN_VAL2_REGNUM
+#define EH_RETURN_STACKADJ_RTX gen_rtx_REG (Pmode, MB_EH_STACKADJ_REGNUM)
+
+/* Select a format to encode pointers in exception handling data. CODE
+ is 0 for data, 1 for code labels, 2 for function pointers. GLOBAL is
+ true if the symbol may be affected by dynamic relocations. */
+#define ASM_PREFERRED_EH_DATA_FORMAT(CODE,GLOBAL) \
+ ((flag_pic || GLOBAL) ? DW_EH_PE_aligned : DW_EH_PE_absptr)
+
/* Use DWARF 2 debugging information by default. */
#define DWARF2_DEBUGGING_INFO
#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG