[patch] C6X unwinding/exception handling

Paul Brook paul@codesourcery.com
Tue Sep 13 13:35:00 GMT 2011


> C6X uses an unwinding/exception handling echeme very similar to that
> defined by the ARM EABI.  The core of the unwinder is the same, so I've
> pulled it out into a common file.
> 
> Other than the obvious target specific bits, the main compiler visible
> difference is that the C6X assembler generates the unwinding tables from
> DWARF .cfi directives, rather than the separate set of directives used by
> the ARM assembler.
> 
> The libstdc++ changes probably deserve a bit of explanation. The ttype_base
> field was clearly used in an early draft of the ARM EABI, and the current
> ARM definition is a compatible subset of that used by C6X.
> _GLIBCXX_OVERRIDE_TTYPE_ENCODING is an unfortunate hack because when doing
> the ARM implementation I failed to realise ttype_encoding was the same
> thing as R_ARM_TARGET2.  We now have a lot of ARM binaries floating around
> with that field set incorrectly, so it's either this or an ABI bump.

I've updated the patch to accomodate the move to libgcc/, done a quick sanity 
recheck of arm-linux and c6x-elf and applied to svn.

P.S. in case it's not clear from my description, the libstdc++ changes aren't 
really a new hack, it's just making an old one more obvious.

Paul

2011-09-13  Paul Brook  <paul@codesourcery.com>
 
	gcc/
	* config/arm/arm.h (ASM_PREFERRED_EH_DATA_FORMAT): Define.
	(ARM_TARGET2_DWARF_FORMAT): Provide default definition.
	* config/arm/linux-eabi.h (ARM_TARGET2_DWARF_FORMAT): Define.
	* config/arm/symbian.h (ARM_TARGET2_DWARF_FORMAT): Define.
	* config/arm/uclinux-eabi.h(ARM_TARGET2_DWARF_FORMAT): Define.
	* config/arm/t-bpabi (EXTRA_HEADERS): Add unwind-arm-common.h.
	* config/arm/t-symbian (EXTRA_HEADERS): Add unwind-arm-common.h.
	* config/c6x/c6x.c (c6x_output_file_unwind): Don't rely on dwarf2 code
	enabling unwind tables.
	(c6x_debug_unwind_info): New function.
	(TARGET_ARM_EABI_UNWINDER): Define.
	(TARGET_DEBUG_UNWIND_INFO): Define.
	* config/c6x/c6x.h (DWARF_FRAME_RETURN_COLUMN): Define.
	(TARGET_EXTRA_CFI_SECTION): Remove.
	* config/c6x/t-c6x-elf (EXTRA_HEADERS): Set.
	* ginclude/unwind-arm-common.h: New file.

	libgcc/
	* config.host (tic6x-*-*): Add c6x/t-c6x-elf.  Set unwind_header.
	* unwind-c.c (PERSONALITY_FUNCTION): Use UNWIND_POINTER_REG.
	* unwind-arm-common.inc: New file.
	* config/arm/unwind-arm.c: Use unwind-arm-common.inc.
	* config/arm/unwind-arm.h: Use unwind-arm-common.h.
	(_GLIBCXX_OVERRIDE_TTYPE_ENCODING): Define.
	* config/c6x/libunwind.S: New file.
	* config/c6x/pr-support.c: New file.
	* config/c6x/unwind-c6x.c: New file.
	* config/c6x/unwind-c6x.h: New file.
	* config/c6x/t-c6x-elf: New file.


	libstdc++-v3/
	* libsupc++/eh_arm.cc (__cxa_end_cleanup): Add C6X implementation.
	* libsupc++/eh_call.cc (__cxa_call_unexpected): Set rtti_base.
	* libsupc++/eh_personality.cc (NO_SIZE_OF_ENCODED_VALUE): Remove
	__ARM_EABI_UNWINDER__ check.
	(parse_lsda_header): Check _GLIBCXX_OVERRIDE_TTYPE_ENCODING.
	(get_ttype_entry): Use generic implementation on ARM EABI.
	(check_exception_spec): Use _Unwind_decode_typeinfo_ptr and
	UNWIND_STACK_REG.
	(PERSONALITY_FUNCTION): Set ttype_base.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: patch.c6x_eh
Type: text/x-patch
Size: 106084 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20110913/64430c02/attachment.bin>


More information about the Gcc-patches mailing list