This is the mail archive of the
mailing list for the GCC project.
Re: [PATCH/RFC] PR other/22313: Hot/cold sections vs. dwarf2 (take 2)
- From: Nicolas Setton <setton at adacore dot com>
- To: Roger Sayle <roger at eyesopen dot com>
- Cc: gcc-patches at gcc dot gnu dot org, Jason Merrill <jason at redhat dot com>
- Date: Fri, 8 Sep 2006 12:40:01 +0200
- Subject: Re: [PATCH/RFC] PR other/22313: Hot/cold sections vs. dwarf2 (take 2)
- References: <Pine.LNX.firstname.lastname@example.org>
I propose to apply this patch to mainline [and the 4.1 branch] in a
few days, unless one of our debugging guru's can point out a flaw in
my interpretation of dwarf-2 specification that seems to imply that
advance_loc* can advance from either the previous advance_loc* or
set_loc. [I'm also curious whether binutils/gcc can/should perform
advance_loc relaxation. Currently we always emit advance_loc4, but
for small deltas we could reduce the size of debugging information
by using advance_loc1 and/or advance_loc2].
Thoughts? Ok for mainline and the 4.1 branch?
I guess that this patch is incomplete, in that it breaks printing in
the debugger of variables allocated on the stack and for which the
dwarf-2 location is calculated relatively to the frame base.
To exhibit the problem, consider the following code:
int main (void)
a.a = 7;
Then try to break in "main" and print variable "a", you'll get the
Could not find the frame base for "main".
Further analysis. When compiling the example above with the patch
included, on x86-linux, the location expression for the frame base
starts with this:
.long .LFB2-.Ltext0 # Location list begin address (*.LLST0)
.long .LFB2-.Ltext0 # Location list end address (*.LLST0)
The first location expression is a null address range, which is a
list terminator in dwarf-2.
I suspect that the problem comes from the current implementation of
convert_cfa_to_loc_list, which currently expects only
DW_CFA_advance_loc statements in the CFI instructions; it should be
enhanced to expect and handle the DW_CFA_set_loc statements as well.
What do the experts think about this?
(If this problem is already known and/or fixed, I apologize for the