From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4754 invoked by alias); 18 Sep 2006 21:59:29 -0000 Received: (qmail 4680 invoked by alias); 18 Sep 2006 21:59:20 -0000 Date: Mon, 18 Sep 2006 21:59:00 -0000 Message-ID: <20060918215920.4679.qmail@sourceware.org> X-Bugzilla-Reason: CC References: Subject: [Bug debug/29132] [4.1/4.2 Regression] Mips exception handling broken. In-Reply-To: Reply-To: gcc-bugzilla@gcc.gnu.org To: gcc-bugs@gcc.gnu.org From: "ddaney at avtrex dot com" Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org X-SW-Source: 2006-09/txt/msg01747.txt.bz2 List-Id: ------- 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