[PATCH v2 0/3] Support frames inlined in outer frames

Simon Marchi simon.marchi@polymtl.ca
Mon Aug 31 17:32:46 GMT 2020


On 2020-08-28 4:50 a.m., Andrew Burgess wrote:
> * Simon Marchi via Gdb-patches <gdb-patches@sourceware.org> [2020-08-27 16:57:21 -0400]:
> 
>> This is essentially a v2 of this thread here:
>>
>>     https://sourceware.org/pipermail/gdb-patches/2020-March/166786.html
>>
>> In summary, this is what the patches do:
>>
>> 1. fixes a latent bug that triggered when trying to unwind a frame
>>    inlined in the outer frame
>> 2. changes how outer frames are represented
>> 3. allows frames inlined in outer frames, adds a test that runs on
>>    regular hardware
>>
>> I don't see any regression on x86-64.  I tested previous iterations of
>> the series (with similar code) on aarch64 too and didn't see any
>> regression.
> 
> I took a look through all these patches, and they all look good to me.
> 
> Thanks,
> Andrew

Thanks, I merged them.  I forgot to fix the nits pointed out by Pedro before merging, so I pushed another patch on top to do so:


>From f3bd50f1984e83e6abf5e971c56ce8fac3e936db Mon Sep 17 00:00:00 2001
From: Simon Marchi <simon.marchi@efficios.com>
Date: Mon, 31 Aug 2020 13:31:01 -0400
Subject: [PATCH] gdb: fix nits in previous patches

I forgot to fix some nits pointed out in review before merging the
"frame inlined in outer frame series", this patch fixes them.

gdb/ChangeLog:

	* frame-unwind.h (frame_prev_register_ftype): Fix adjective
	ordering in comment.
	* frame.c (frame_id_eq): Fix indentation.

gdb/testsuite/ChangeLog:

	* gdb.dwarf2/dw2-reg-undefined.exp: Remove spurious #.

Change-Id: Iaddde9677fc3f68382558d1a16f5a0b4beb78bac
---
 gdb/ChangeLog                                  | 6 ++++++
 gdb/frame-unwind.h                             | 2 +-
 gdb/frame.c                                    | 2 +-
 gdb/testsuite/ChangeLog                        | 4 ++++
 gdb/testsuite/gdb.dwarf2/dw2-reg-undefined.exp | 2 +-
 5 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 9637e4a7b12d..cc998d5ee585 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,9 @@
+2020-08-31  Simon Marchi  <simon.marchi@efficios.com>
+
+	* frame-unwind.h (frame_prev_register_ftype): Fix adjective
+	ordering in comment.
+	* frame.c (frame_id_eq): Fix indentation.
+
 2020-08-31  Scott Linder  <scott@scottlinder.com>
 	    Simon Marchi  <simon.marchi@efficios.com>

diff --git a/gdb/frame-unwind.h b/gdb/frame-unwind.h
index 25a601ccf4bb..6cc1a888861e 100644
--- a/gdb/frame-unwind.h
+++ b/gdb/frame-unwind.h
@@ -134,7 +134,7 @@ typedef void (frame_this_id_ftype) (struct frame_info *this_frame,
    a register in THIS frame, or a non-lvalue.

    If the previous frame's register was not saved by THIS_FRAME and is
-   therefore undefined, return a not_lval wholly optimized-out value.
+   therefore undefined, return a wholly optimized-out not_lval value.

    THIS_PROLOGUE_CACHE can be used to share any prolog analysis data
    with the other unwind methods.  Memory for that cache should be
diff --git a/gdb/frame.c b/gdb/frame.c
index 54f4c613c9e8..0b708e668272 100644
--- a/gdb/frame.c
+++ b/gdb/frame.c
@@ -774,7 +774,7 @@ frame_id_eq (frame_id l, frame_id r)
   bool eq;

   if (l.stack_status == FID_STACK_INVALID
-	   || r.stack_status == FID_STACK_INVALID)
+      || r.stack_status == FID_STACK_INVALID)
     /* Like a NaN, if either ID is invalid, the result is false.
        Note that a frame ID is invalid iff it is the null frame ID.  */
     eq = false;
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 66f1fe8533f2..148f31d26dd6 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2020-08-31  Simon Marchi  <simon.marchi@efficios.com>
+
+	* gdb.dwarf2/dw2-reg-undefined.exp: Remove spurious #.
+
 2020-08-31  Simon Marchi  <simon.marchi@efficios.com>

 	* gdb.dwarf2/frame-inlined-in-outer-frame.exp: New file.
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-reg-undefined.exp b/gdb/testsuite/gdb.dwarf2/dw2-reg-undefined.exp
index 4ab7e2dbfc44..75ea1f7b88ac 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-reg-undefined.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-reg-undefined.exp
@@ -76,7 +76,7 @@ for {set f 0} {$f < 3} {incr f} {
 }

 # Test that the debug log statement in frame_unwind_register_value produces
-# "not saved" and not# "optimized out".
+# "not saved" and not "optimized out".
 gdb_test "set debug frame 1"
 gdb_test {print $rax} {frame_unwind_register_value[^\r\n]+rax[^\r\n]+not saved.*}
 gdb_test "set debug frame 0"
-- 
2.26.2




More information about the Gdb-patches mailing list