public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Corinna Vinschen <vinschen@redhat.com>
To: gdb-patches@sourceware.org
Subject: Re: [rfa] frame address size incorrect if address size != ptr size
Date: Thu, 05 Aug 2010 08:06:00 -0000	[thread overview]
Message-ID: <20100805080551.GA12562@calimero.vinschen.de> (raw)
In-Reply-To: <20100804223959.GA32106@host1.dyn.jankratochvil.net>

On Aug  5 00:39, Jan Kratochvil wrote:
> On Wed, 04 Aug 2010 13:35:01 +0200, Corinna Vinschen wrote:
> > Ping?  This affects generic code in dwarf2-frame.c...
> > 
> > On Jul 26 16:52, Corinna Vinschen wrote:
> [...]
> >   /* The target address size.  For .eh_frame FDEs this is considered
> >      equal to the size of a target pointer.  For .dwarf_frame FDEs,
>                                                    ^^^^^^^^^^^^ = .debug_frame
> >      this is supposed to be the target address size from the associated
> >      CU header.  FIXME: We do not have a good way to determine the
> >      latter.  Always use the target pointer size for now.  */
> >   cie->addr_size = gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT;
> [...]
> > Therefore I propose the below patch.  It continues to compute addr_size
> > from gdbarch_ptr_bit for .eh_frame sections, but uses gdbarch_addr_bit
> > in case of .dwarf_frame sections.
>              ^^^^^^^^^^^^ = .debug_frame
>              
> I find the GDB comment above to be obsolete now.  FSF GCC (at least 4.4+ at
> least x86_64-linux) no longer generates .debug_frame sections (unless you
> explicitly use -fno-asynchronous-unwind-tables) as generated .eh_frame
> sections already contains all the needed info.

I tested this with a linux->XStormy16 cross gcc 4.4.3, and it does not
generate .eh_frame sections, but .debug_frame sections.  The cie version
is 1, so the address size can't be fetched from the debug info.  That's
the case I'm trying to fix.

Besides, there are still a lot of installations using older compiler
versions so the comment is still useful, isn't it?

> I have not built gcc for the xstrormy16 target to check it more.  Still
> I believe .eh_frame and .dwarf_frame address size should be treated the same.

That would be fine with me.

I made the difference because the comment explicitely states that
.eh_frame sections are defined to use the target *pointer* size and
.dwarf_frame (sic) sections are using the *address* size as given in
the CU header.  This address size is exactly what is defined by
gdbarch_addr_bit().

So, the alternative would be to assume that the address size is always
correct and so is the one generated by the compiler, rather than the
pointer size.  This does not affect any target with pointer size ==
address size anyway, nor does it affect targets using a compiler
generating CIEs with a version >= 4.

The alternative patch would be:

	* dwarf2-frame.c (decode_frame_entry_1): Fix typo in comment.
	Assume target address size rather than target pointer size
	to cover small targets.

Index: dwarf2-frame.c
===================================================================
RCS file: /cvs/src/src/gdb/dwarf2-frame.c,v
retrieving revision 1.114
diff -u -p -r1.114 dwarf2-frame.c
--- dwarf2-frame.c	7 Jul 2010 17:26:38 -0000	1.114
+++ dwarf2-frame.c	5 Aug 2010 07:48:07 -0000
@@ -1733,11 +1733,11 @@ decode_frame_entry_1 (struct comp_unit *
       cie->encoding = DW_EH_PE_absptr;
 
       /* The target address size.  For .eh_frame FDEs this is considered
-	 equal to the size of a target pointer.  For .dwarf_frame FDEs, 
+	 equal to the size of a target pointer.  For .debug_frame FDEs, 
 	 this is supposed to be the target address size from the associated
 	 CU header.  FIXME: We do not have a good way to determine the 
-	 latter.  Always use the target pointer size for now.  */
-      cie->addr_size = gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT;
+	 latter.  Always use the target address size for now.  */
+      cie->addr_size = gdbarch_addr_bit (gdbarch) / TARGET_CHAR_BIT;
 
       /* We'll determine the final value later, but we need to
 	 initialize it conservatively.  */
@@ -1779,7 +1779,7 @@ decode_frame_entry_1 (struct comp_unit *
 	}
       else
 	{
-	  cie->addr_size = gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT;
+	  cie->addr_size = gdbarch_addr_bit (gdbarch) / TARGET_CHAR_BIT;
 	  cie->segment_size = 0;
 	}
 

Corinna

-- 
Corinna Vinschen
Cygwin Project Co-Leader
Red Hat

  reply	other threads:[~2010-08-05  8:06 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-07-26 14:53 Corinna Vinschen
2010-08-04 11:35 ` Corinna Vinschen
2010-08-04 22:40   ` Jan Kratochvil
2010-08-05  8:06     ` Corinna Vinschen [this message]
2010-08-05 10:04       ` Ulrich Weigand
2010-08-05 12:30         ` Corinna Vinschen
2010-08-05 14:08           ` Ulrich Weigand
2010-08-05 14:30             ` Corinna Vinschen
2010-08-05 14:59               ` Ulrich Weigand
2010-08-05 15:30                 ` Corinna Vinschen
2010-08-05 16:52                   ` Ulrich Weigand
2010-08-06 10:48                     ` Corinna Vinschen
2010-08-06 11:17                       ` Mark Kettenis
2010-08-06 12:01                         ` Corinna Vinschen
2010-08-06 14:51                       ` Ulrich Weigand
2010-08-06 15:57                         ` Corinna Vinschen
2010-08-06 16:27                           ` Ulrich Weigand
2010-08-06 16:59                             ` Corinna Vinschen
2010-08-06 19:03                               ` Corinna Vinschen
2010-08-08 14:55                                 ` Ulrich Weigand

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=20100805080551.GA12562@calimero.vinschen.de \
    --to=vinschen@redhat.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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).