From: "H. J. Lu" <hjl@lucon.org>
To: gcc@gcc.gnu.org, GDB <gdb@sources.redhat.com>
Subject: Gdb generates location list without DW_AT_frame_base
Date: Thu, 30 Dec 2004 20:23:00 -0000 [thread overview]
Message-ID: <20041230202346.GA17311@lucon.org> (raw)
In-Reply-To: <20041230200720.GA11027@nevyn.them.org>
On Thu, Dec 30, 2004 at 03:07:20PM -0500, Daniel Jacobowitz wrote:
> On Thu, Dec 30, 2004 at 11:56:42AM -0800, H. J. Lu wrote:
> > DW_AT_frame_base may be needed for location lists of local variables.
> > But in case of tls_symbolic_operand, there is no local variable.
> > Location lists are used for function parameters.
>
> Then why is GDB calling get_frame_base? It is only called for
> DW_OP_fbreg. If we don't have a frame base, we don't know what
> DW_OP_fbreg refers to.
Gcc generates:
<1><28c955>: Abbrev Number: 47 (DW_TAG_subprogram)
DW_AT_sibling : <28c98f>
DW_AT_external : 1
DW_AT_name : (indirect string, offset: 0x3875d):
tls_symbolic_operand
DW_AT_decl_file : 1
DW_AT_decl_line : 471
DW_AT_prototyped : 1
DW_AT_type : <2887cb>
DW_AT_low_pc : 0x826c1d0
DW_AT_high_pc : 0x826c1fc
<2><28c96f>: Abbrev Number: 48 (DW_TAG_formal_parameter)
DW_AT_name : op
DW_AT_decl_file : 1
DW_AT_decl_line : 470
DW_AT_type : <288a7b>
DW_AT_location : 120fbf (location list)
<2><28c97e>: Abbrev Number: 49 (DW_TAG_formal_parameter)
DW_AT_name : (indirect string, offset: 0x3db66): mode
DW_AT_decl_file : 1
DW_AT_decl_line : 470
DW_AT_type : <288e5d>
DW_AT_location : 121018 (location list)
for
int
tls_symbolic_operand (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED)
{
return ((GET_CODE (op) == SYMBOL_REF) && (SYMBOL_REF_TLS_MODEL (op)
!= 0)) && (mode == VOIDmode || GET_MODE (op) == mode);
}
It may be a gcc bug after all.
>
> GDB should issue an error instead of crashing, but that's as far as we
> can go.
This patch does something like that
--- dwarf2loc.c 2004-12-30 12:01:34.140350763 -0800
+++ dwarf2loc.c.new 2004-12-30 11:54:24.759408333 -0800
@@ -164,13 +164,16 @@ dwarf_expr_frame_base (void *baton, unsi
*start = find_location_expression (symbaton, length,
get_frame_pc
(debaton->frame));
}
- else
+ else if (SYMBOL_OPS (framefunc) == &dwarf2_locexpr_funcs)
{
struct dwarf2_locexpr_baton *symbaton;
symbaton = SYMBOL_LOCATION_BATON (framefunc);
*length = symbaton->size;
*start = symbaton->data;
}
+ else
+ error ("Invalid frame base function for \"%s\".",
+ SYMBOL_NATURAL_NAME (framefunc));
if (*start == NULL)
error ("Could not find the frame base for \"%s\".",
H.J.
next prev parent reply other threads:[~2004-12-30 20:23 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-12-22 1:16 Is this a gcc, gdb or readelf bug? H. J. Lu
2004-12-22 11:09 ` Nick Clifton
2004-12-22 18:25 ` H. J. Lu
2004-12-23 3:43 ` Daniel Jacobowitz
2004-12-30 19:24 ` GDB 6.3 assumes that DW_AT_frame_base exists H. J. Lu
2004-12-30 19:36 ` H. J. Lu
2004-12-30 19:56 ` H. J. Lu
2004-12-30 20:07 ` Daniel Jacobowitz
2004-12-30 20:23 ` H. J. Lu [this message]
2004-12-30 20:28 ` Gdb generates location list without DW_AT_frame_base Daniel Jacobowitz
2004-12-30 20:52 ` Gdb generates DW_OP_fbreg in " H. J. Lu
2004-12-30 20:56 ` Gdb generates " Daniel Berlin
2004-12-30 21:05 ` H. J. Lu
2004-12-31 0:35 ` Daniel Berlin
2004-12-31 19:57 ` H. J. Lu
2004-12-31 20:09 ` Daniel Berlin
2004-12-31 20:11 ` H. J. Lu
2004-12-31 20:16 ` Daniel Berlin
[not found] ` <20041231163806.GA1335@lucon.org>
[not found] ` <Pine.LNX.4.60.0412311158280.27590@dberlin.org>
[not found] ` <20041231184405.GA2182@lucon.org>
[not found] ` <Pine.LNX.4.60.0412311451060.6844@dberlin.org>
[not found] ` <Pine.LNX.4.60.0412311509360.6844@dberlin.org>
[not found] ` <20041231215010.GA5722@lucon.org>
[not found] ` <20041231215443.GA5853@lucon.org>
[not found] ` <Pine.LNX.4.60.0412311656360.6844@dberlin.org>
[not found] ` <20041231220324.GA5987@lucon.org>
2005-01-01 19:15 ` gcc 4.0 " H. J. Lu
2005-01-01 20:09 ` Daniel Jacobowitz
2005-01-01 20:50 ` Daniel Berlin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20041230202346.GA17311@lucon.org \
--to=hjl@lucon.org \
--cc=gcc@gcc.gnu.org \
--cc=gdb@sources.redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox