Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Jan Kratochvil <jan.kratochvil@redhat.com>
To: Ulrich Weigand <uweigand@de.ibm.com>
Cc: gdb-patches@sourceware.org
Subject: Re: entryval tail call frames $sp adjustment vs. gdbarches  [Re: New ARI warning Thu Oct 13 01:55:36 UTC 2011]
Date: Fri, 21 Oct 2011 00:34:00 -0000	[thread overview]
Message-ID: <20111021000010.GA28878@host1.jankratochvil.net> (raw)
In-Reply-To: <201110191551.p9JFpjs3020322@d06av02.portsmouth.uk.ibm.com>

On Wed, 19 Oct 2011 17:51:45 +0200, Ulrich Weigand wrote:
> It's just that some of those assumptions seem really unnecessary to me.
> For example, the assumption that there is a fixed "PC" register:
> 
>       prev_gdbarch = frame_unwind_arch (this_frame);
>       pc_regnum = gdbarch_pc_regnum (prev_gdbarch);
>       if (pc_regnum == -1)
>         break;
> 
>       /* Simulate frame_unwind_pc without setting this_frame->prev_pc.p.  */
>       prev_pc = frame_unwind_register_unsigned (this_frame, pc_regnum);
> 
> Why don't you just do something like:
> 
>       prev_gdbarch = frame_unwind_arch (this_frame);
> 
>       /* Simulate frame_unwind_pc without setting this_frame->prev_pc.p.  */
>       prev_pc = gdbarch_unwind_pc (prev_gdbarch, this_frame);

I agree with this simplification, used it.


> Yes, dwarf2_frame_cfa would be preferable here.

Also I agree.  Checked in both changes.

No regressions on {x86_64,x86_64-m32,i686}-fedora16pre-linux-gnu.


Thanks,
Jan


http://sourceware.org/ml/gdb-cvs/2011-10/msg00156.html

--- src/gdb/ChangeLog	2011/10/20 23:12:59	1.13448
+++ src/gdb/ChangeLog	2011/10/20 23:57:23	1.13449
@@ -1,3 +1,12 @@
+2011-10-20  Jan Kratochvil  <jan.kratochvil@redhat.com>
+	    Ulrich Weigand  <uweigand@de.ibm.com>
+
+	* dwarf2-frame-tailcall.c: Include dwarf2-frame.h.
+	(dwarf2_tailcall_prev_register_first): Use dwarf2_frame_cfa.
+	(dwarf2_tailcall_sniffer_first): Remove variable pc_regnum.  Replace
+	gdbarch_pc_regnum and frame_unwind_register_unsigned by
+	gdbarch_unwind_pc.
+
 2011-10-20  Cary Coutant  <ccoutant@google.com>
 
 	* dwarf2read.c (dw2_get_file_names): Move adjustment for type
--- src/gdb/dwarf2-frame-tailcall.c	2011/10/09 20:21:48	1.1
+++ src/gdb/dwarf2-frame-tailcall.c	2011/10/20 23:57:23	1.2
@@ -29,6 +29,7 @@
 #include "gdbtypes.h"
 #include "regcache.h"
 #include "value.h"
+#include "dwarf2-frame.h"
 
 /* Contains struct tailcall_cache indexed by next_bottom_frame.  */
 static htab_t cache_htab;
@@ -280,7 +281,7 @@
       if (next_levels == cache->chain_levels - 1)
 	addr = cache->prev_sp;
       else
-	addr = get_frame_base (this_frame) - cache->entry_cfa_sp_offset;
+	addr = dwarf2_frame_cfa (this_frame) - cache->entry_cfa_sp_offset;
     }
   else
     return NULL;
@@ -380,15 +381,12 @@
   /* Catch any unwinding errors.  */
   TRY_CATCH (except, RETURN_MASK_ERROR)
     {
-      int pc_regnum, sp_regnum;
+      int sp_regnum;
 
       prev_gdbarch = frame_unwind_arch (this_frame);
-      pc_regnum = gdbarch_pc_regnum (prev_gdbarch);
-      if (pc_regnum == -1)
-	break;
 
       /* Simulate frame_unwind_pc without setting this_frame->prev_pc.p.  */
-      prev_pc = frame_unwind_register_unsigned (this_frame, pc_regnum);
+      prev_pc = gdbarch_unwind_pc (prev_gdbarch, this_frame);
 
       /* call_site_find_chain can throw an exception.  */
       chain = call_site_find_chain (prev_gdbarch, prev_pc, this_pc);


  reply	other threads:[~2011-10-21  0:00 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-10-13  1:55 New ARI warning Thu Oct 13 01:55:36 UTC 2011 GDB Administrator
2011-10-13 13:54 ` Jan Kratochvil
2011-10-13 15:00   ` Ulrich Weigand
2011-10-13 21:15     ` entryval tail call frames $sp adjustment vs. gdbarches [Re: New ARI warning Thu Oct 13 01:55:36 UTC 2011] Jan Kratochvil
2011-10-19 16:05       ` Ulrich Weigand
2011-10-21  0:34         ` Jan Kratochvil [this message]
2011-10-21  0:45         ` Jan Kratochvil

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=20111021000010.GA28878@host1.jankratochvil.net \
    --to=jan.kratochvil@redhat.com \
    --cc=gdb-patches@sourceware.org \
    --cc=uweigand@de.ibm.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