This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug debug/29132] [4.1/4.2 Regression] Mips exception handling broken.
- From: "ddaney at avtrex dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 18 Sep 2006 21:59:20 -0000
- Subject: [Bug debug/29132] [4.1/4.2 Regression] Mips exception handling broken.
- References: <bug-29132-7151@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #4 from ddaney at avtrex dot com 2006-09-18 21:59 -------
Subject: Re: [4.2 Regression] Mips exception handling broken.
roger at eyesopen dot com wrote:
> ------- Comment #1 from roger at eyesopen dot com 2006-09-18 21:27 -------
> Hi David,
>
> I was wondering if you have a MIPS tree handy, whether you could easily
> test the following single line patch:
>
> Index: dwarf2out.c
> ===================================================================
> *** dwarf2out.c (revision 117035)
> --- dwarf2out.c (working copy)
> *************** dwarf2out_begin_prologue (unsigned int l
> *** 2572,2578 ****
> fde = &fde_table[fde_table_in_use++];
> fde->decl = current_function_decl;
> fde->dw_fde_begin = dup_label;
> ! fde->dw_fde_current_label = NULL;
> fde->dw_fde_hot_section_label = NULL;
> fde->dw_fde_hot_section_end_label = NULL;
> fde->dw_fde_unlikely_section_label = NULL;
> --- 2572,2578 ----
> fde = &fde_table[fde_table_in_use++];
> fde->decl = current_function_decl;
> fde->dw_fde_begin = dup_label;
> ! fde->dw_fde_current_label = dup_label;
> fde->dw_fde_hot_section_label = NULL;
> fde->dw_fde_hot_section_end_label = NULL;
> fde->dw_fde_unlikely_section_label = NULL;
>
> Due to all the abstraction with debugging formats, its difficult to tell the
> order in which things get executed, and whether this initial value for
> dw_fde_current_label survives long enough to avoid use of a set_loc.
>
> Many thanks in advance,
>
Preliminary results using: readelf --debug-dump=frames libstdc++.so show
that this patch is working.
I now get:
00000064 00000024 00000068 FDE cie=00000000 pc=0003ed40..0003eed4
Augmentation data: 00 00 00 00
DW_CFA_advance_loc: 16 to 0003ed50
DW_CFA_def_cfa_offset: 48
DW_CFA_advance_loc: 24 to 0003ed68
DW_CFA_offset: r16 at cfa-24
DW_CFA_offset: r17 at cfa-20
DW_CFA_offset: r18 at cfa-16
DW_CFA_offset: r19 at cfa-12
DW_CFA_offset: r20 at cfa-8
Both addresses shown for DW_CFA_advance_loc are within the range of PC
for the FDE. It will take (a lot) more time to see if the code actually
works on my test platform, but it looks good to me so far.
David Daney.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29132