Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Daniel Jacobowitz <drow@false.org>
To: Denis PILAT <denis.pilat@st.com>
Cc: gdb-patches <gdb-patches@sourceware.org>
Subject: Re: [RFC] DW_AT_type missing from DW_TAG_subrange_type
Date: Tue, 10 Apr 2007 15:31:00 -0000	[thread overview]
Message-ID: <20070410153043.GC10890@caradoc.them.org> (raw)
In-Reply-To: <4612556C.1080709@st.com>

On Tue, Apr 03, 2007 at 03:23:56PM +0200, Denis PILAT wrote:
> For the global variable declared like that
>  int array[] = {1, 2, 3, 4};
> the dwarf information generated by our specific compiler is missing DW_AT_type 
> missing from DW_TAG_subrange_type.
> 
> Usually in dwarf2 information (ie like the bellow example for gcc4 under 
> linux), the DW_AT_type exists for subranges :
> 
>   < 175 (0xaf) > DW_TAG_array_type
>   | DW_AT_sibling : < 191 (0xbf) >
>   | DW_AT_type : < 168 (0xa8) >
>   `--------------------------
>      < 184 (0xb8) > DW_TAG_subrange_type
>    * | DW_AT_type : < 191 (0xbf) >*          <<<<<-------- missing from my elf 
> file
>      | DW_AT_upper_bound : DW_AT_upper_bound(DW_FORM_data1) : 3
>      `--------------------------

Conveniently, the DWARF 3 standard specifies what this means (DWARF 2
may also; I didn't check).  From the standard:

> If the subrange entry has no type attribute describing the basis type,
> the basis type is assumed to be the same as the object described by
> the lower bound attribute (if it references an object). If there is no
> lower bound attribute, or that attribute does not reference an object,
> the basis type is the type of the upper bound or count attribute (if
> either of them references an object). If there is no upper bound or
> count attribute, or neither references an object, the type is assumed
> to be the same type, in the source language of the compilation unit
> containing the subrange entry, as a signed integer with the same size
> as an address on the target machine.

Since we do not handle objects for bounds yet, we're only interested
in that last case.  So, we should use an integer type the size of an
address.  Try using dwarf_base_type (DW_ATE_signed, TARGET_ADDR_BIT /
8, cu)?

That function is, in fact, very buggy.  We should fix it.  It has
hardcoded sizes of 1, 2, 4 for char, short, int and doesn't support
long long at all.

> I'm also wondering about  the code:
>  base_type = die_type (die, cu);
>  if (base_type == NULL)
>    {
>      complaint (&symfile_complaints,
>                _("DW_AT_type missing from DW_TAG_subrange_type"));
>      return;
>    }
> It seems we'll never have (base_type == NULL). Am I right ?
> May be it's time to remove that as well. The complaints seems to be in a better 
> place in my patch.

You're right; please do.

-- 
Daniel Jacobowitz
CodeSourcery


  reply	other threads:[~2007-04-10 15:31 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-04-03 13:24 Denis PILAT
2007-04-10 15:31 ` Daniel Jacobowitz [this message]
2007-04-18 12:55   ` Denis PILAT
2007-04-18 13:06     ` Daniel Jacobowitz
2007-04-18 13:17       ` Denis PILAT
2007-04-18 13:30         ` Daniel Jacobowitz
2007-04-18 14:21           ` Denis PILAT

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=20070410153043.GC10890@caradoc.them.org \
    --to=drow@false.org \
    --cc=denis.pilat@st.com \
    --cc=gdb-patches@sourceware.org \
    /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