Sequel to PR40521 -- -g causes GCC to generate .eh_frame

Daniel Jacobowitz dan@codesourcery.com
Wed Mar 31 15:55:00 GMT 2010


On Wed, Mar 31, 2010 at 05:43:05PM +0200, Thomas Schwinge wrote:
> Deleting the definition is different from defining it to zero, as this is
> sort of a tri-state thing: undefined meaning that the DWARF unwinding
> machinery is not implemented, zero meaning that it is implemented but
> shall not be used, and one meaning that it shall be used.  (See my
> documentation update, too.)  For example, compare with this use in
> gcc/c-cppbuiltin.c:c_cpp_builtins:
> 
>     #ifdef DWARF2_UNWIND_INFO
>       if (dwarf2out_do_cfi_asm ())
>         cpp_define (pfile, "__GCC_HAVE_DWARF2_CFI_ASM");
>     #endif

I was expecting this code in defaults.h to handle everything:

/* If we have a definition of INCOMING_RETURN_ADDR_RTX, assume that
   the rest of the DWARF 2 frame unwind support is also provided.  */
#if !defined (DWARF2_UNWIND_INFO) && defined (INCOMING_RETURN_ADDR_RTX) \
    && !defined (TARGET_UNWIND_INFO)
#define DWARF2_UNWIND_INFO 1
#endif

But it sounds like what we want is this instead:

/* If we have a definition of INCOMING_RETURN_ADDR_RTX, assume that
   the rest of the DWARF 2 frame unwind support is also provided.  */
#if !defined (DWARF2_UNWIND_INFO) && defined (INCOMING_RETURN_ADDR_RTX)
# ifdef (TARGET_UNWIND_INFO)
#  define DWARF2_UNWIND_INFO 0
# else
#  define DWARF2_UNWIND_INFO 1
# endif
#endif

Or do the equivalent in config/arm/ as you've done, which is safer.

> Is that patch OK?  Who can approve it?  Jakub can't, he said on IRC.
> 
> gcc/
> 2010-03-31  Thomas Schwinge  <thomas@codesourcery.com>
> 	    Daniel Jacobowitz  <dan@codesourcery.com>
> 
> 	* doc/tm.texi (DWARF2_UNWIND_INFO, TARGET_UNWIND_INFO): Improve.
> 	* dwarf2out.c (NEED_UNWIND_TABLES): Define.
> 	(dwarf2out_do_frame, dwarf2out_do_cfi_asm, dwarf2out_begin_prologue)
> 	(dwarf2out_frame_finish, dwarf2out_assembly_start): Use it.
> 	(dwarf2out_assembly_start): Correct logic for TARGET_UNWIND_INFO.
> 	* config/arm/arm.h (DWARF2_UNWIND_INFO): Remove definition.
> 	* config/arm/bpabi.h (DWARF2_UNWIND_INFO): Define to zero.

This looks right to me.  Maybe Jason or Richard E. would review it?

-- 
Daniel Jacobowitz
CodeSourcery



More information about the Gcc-patches mailing list