Fix skip.exp test failure observed with gcc-9.2.0

Message ID AM0PR08MB3714C86181FA179F9BA0266AE4560@AM0PR08MB3714.eurprd08.prod.outlook.com
State New, archived
Headers

Commit Message

Bernd Edlinger Dec. 15, 2019, 11:30 a.m. UTC
  Hi,

this is the split out patch on skip.exp which fixes a pre-existing
compatibilty issue with that test case and gcc-9.2.0 (and gcc-10 from
trunk of a few weeks ago at least, likely other versions too).


Is it OK for trunk?


Thanks
Bernd.
gdb/testsuite:
2019-12-15  Bernd Edlinger  <bernd.edlinger@hotmail.de>

	* gdb.base/skip.exp: Fix test failure observed with gcc-9.2.0.
  

Comments

Simon Marchi Dec. 15, 2019, 1:05 p.m. UTC | #1
On 2019-12-15 6:30 a.m., Bernd Edlinger wrote:
> Hi,
> 
> this is the split out patch on skip.exp which fixes a pre-existing
> compatibilty issue with that test case and gcc-9.2.0 (and gcc-10 from
> trunk of a few weeks ago at least, likely other versions too).
> 
> 
> Is it OK for trunk?
> 
> 
> Thanks
> Bernd.
> 
> 

Hi Bernd,

Just wondering, were you able to figure out which change in debug info lead
to this behavior change?  The behavior with gcc 9.2.0 seems better to be me,
I think your patch is ok.

I would just remove the unrelated whitespace fix before merging.

Simon
  
Bernd Edlinger Dec. 15, 2019, 6:12 p.m. UTC | #2
On 12/15/19 2:05 PM, Simon Marchi wrote:
> On 2019-12-15 6:30 a.m., Bernd Edlinger wrote:
>> Hi,
>>
>> this is the split out patch on skip.exp which fixes a pre-existing
>> compatibilty issue with that test case and gcc-9.2.0 (and gcc-10 from
>> trunk of a few weeks ago at least, likely other versions too).
>>
>>
>> Is it OK for trunk?
>>
>>
>> Thanks
>> Bernd.
>>
>>
> 
> Hi Bernd,
> 
> Just wondering, were you able to figure out which change in debug info lead
> to this behavior change?  The behavior with gcc 9.2.0 seems better to be me,
> I think your patch is ok.
> 

Yes indeed.  The change started with gcc-8.1.0 when -gcolumn-info was enabled
by default.  -gcolumn-info was first implemented in gcc-7.1.0 but default-disabled,
so you can get the altered behavior already with gcc-7 if you manually enable
-gcolumn-info.

So previously there was just one point where line line 30 (of skip.c) started:

  [0x00000032]  Advance Line by 27 to 28
  [0x00000034]  Copy
  [0x00000035]  Special opcode 63: advance Address by 4 to 0x4004cb and Line by 2 to 30
  [0x00000036]  Advance PC by constant 17 to 0x4004dc
  [0x00000037]  Special opcode 7: advance Address by 0 to 0x4004dc and Line by 2 to 32

with column-info we have line 30 three times with different column:

  [0x00000034]  Advance Line by 27 to 28
  [0x00000036]  Copy
  [0x00000037]  Set column to 9
  [0x00000039]  Special opcode 63: advance Address by 4 to 0x4004c6 and Line by 2 to 30
  [0x0000003a]  Set column to 17
  [0x0000003c]  Special opcode 75: advance Address by 5 to 0x4004cb and Line by 0 to 30
  [0x0000003d]  Set column to 3
  [0x0000003f]  Special opcode 75: advance Address by 5 to 0x4004d0 and Line by 0 to 30
  [0x00000040]  Special opcode 105: advance Address by 7 to 0x4004d7 and Line by 2 to 32


That could probably be filtered in dwarf2read.c to keep the old behavior, but I agree
that the new behavior makes still sense, even if we cannot really use the column info
in the line number info.

> I would just remove the unrelated whitespace fix before merging.
> 

Okay, I just replicated you advice regarding 8-space tab columns on
skip-inline.exp in the other patch.  Exactly those 2 lines were copied
where the tabs were not used correctly.


Thanks
Bernd.

> Simon
>
  
Simon Marchi Dec. 17, 2019, 2:44 a.m. UTC | #3
On 2019-12-15 1:12 p.m., Bernd Edlinger wrote:
> On 12/15/19 2:05 PM, Simon Marchi wrote:
>> On 2019-12-15 6:30 a.m., Bernd Edlinger wrote:
>>> Hi,
>>>
>>> this is the split out patch on skip.exp which fixes a pre-existing
>>> compatibilty issue with that test case and gcc-9.2.0 (and gcc-10 from
>>> trunk of a few weeks ago at least, likely other versions too).
>>>
>>>
>>> Is it OK for trunk?
>>>
>>>
>>> Thanks
>>> Bernd.
>>>
>>>
>>
>> Hi Bernd,
>>
>> Just wondering, were you able to figure out which change in debug info lead
>> to this behavior change?  The behavior with gcc 9.2.0 seems better to be me,
>> I think your patch is ok.
>>
> 
> Yes indeed.  The change started with gcc-8.1.0 when -gcolumn-info was enabled
> by default.  -gcolumn-info was first implemented in gcc-7.1.0 but default-disabled,
> so you can get the altered behavior already with gcc-7 if you manually enable
> -gcolumn-info.
> 
> So previously there was just one point where line line 30 (of skip.c) started:
> 
>   [0x00000032]  Advance Line by 27 to 28
>   [0x00000034]  Copy
>   [0x00000035]  Special opcode 63: advance Address by 4 to 0x4004cb and Line by 2 to 30
>   [0x00000036]  Advance PC by constant 17 to 0x4004dc
>   [0x00000037]  Special opcode 7: advance Address by 0 to 0x4004dc and Line by 2 to 32
> 
> with column-info we have line 30 three times with different column:
> 
>   [0x00000034]  Advance Line by 27 to 28
>   [0x00000036]  Copy
>   [0x00000037]  Set column to 9
>   [0x00000039]  Special opcode 63: advance Address by 4 to 0x4004c6 and Line by 2 to 30
>   [0x0000003a]  Set column to 17
>   [0x0000003c]  Special opcode 75: advance Address by 5 to 0x4004cb and Line by 0 to 30
>   [0x0000003d]  Set column to 3
>   [0x0000003f]  Special opcode 75: advance Address by 5 to 0x4004d0 and Line by 0 to 30
>   [0x00000040]  Special opcode 105: advance Address by 7 to 0x4004d7 and Line by 2 to 32
> 
> 
> That could probably be filtered in dwarf2read.c to keep the old behavior, but I agree
> that the new behavior makes still sense, even if we cannot really use the column info
> in the line number info.

That is actually some very good info for anyone wondering why this change was introduced!

Could you please put it in the commit message for posterity?

>> I would just remove the unrelated whitespace fix before merging.
>>
> 
> Okay, I just replicated you advice regarding 8-space tab columns on
> skip-inline.exp in the other patch.  Exactly those 2 lines were copied
> where the tabs were not used correctly.

Great thanks.  Note that we can also fix skip.exp, just in another, obvious patch.

Simon
  

Patch

From b15964b769373f25f276430914c5efa84d411032 Mon Sep 17 00:00:00 2001
From: Bernd Edlinger <bernd.edlinger@hotmail.de>
Date: Sun, 15 Dec 2019 11:05:47 +0100
Subject: [PATCH] Fix skip.exp test failure observed with gcc-9.2.0

Need to step a second time because with this gcc version
the first step jumps back to main before entering foo.
---
 gdb/testsuite/gdb.base/skip.exp | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/gdb/testsuite/gdb.base/skip.exp b/gdb/testsuite/gdb.base/skip.exp
index d763194..15dec42 100644
--- a/gdb/testsuite/gdb.base/skip.exp
+++ b/gdb/testsuite/gdb.base/skip.exp
@@ -21,8 +21,8 @@  load_lib completion-support.exp
 standard_testfile
 
 if { [prepare_for_testing "failed to prepare" "skip" \
-                          {skip.c skip1.c } \
-                          {debug nowarnings}] } {
+			  {skip.c skip1.c } \
+			  {debug nowarnings}] } {
     return -1
 }
 
@@ -142,7 +142,9 @@  with_test_prefix "step after disabling 3" {
 
     gdb_test "step" "bar \\(\\) at.*" "step 1"
     gdb_test "step" ".*" "step 2"; # Return from foo()
-    gdb_test "step" "foo \\(\\) at.*" "step 3"
+    # With gcc 9.2.0 we jump once back to main before entering foo here.
+    # If that happens try to step a second time.
+    gdb_test "step" "foo \\(\\) at.*" "step 3" "main \\(\\) at .*" "step"
     gdb_test "step" ".*" "step 4"; # Return from bar()
     gdb_test "step" "main \\(\\) at.*" "step 5"
 }
@@ -261,7 +263,9 @@  with_test_prefix "step using -fu for baz" {
     gdb_test_no_output "skip enable 7"
     gdb_test "step" "bar \\(\\) at.*" "step 1"
     gdb_test "step" ".*" "step 2"; # Return from bar()
-    gdb_test "step" "foo \\(\\) at.*" "step 3"
+    # With gcc 9.2.0 we jump once back to main before entering foo here.
+    # If that happens try to step a second time.
+    gdb_test "step" "foo \\(\\) at.*" "step 3" "main \\(\\) at.*" "step"
     gdb_test "step" ".*" "step 4"; # Return from foo()
     gdb_test "step" "main \\(\\) at.*" "step 5"
 }
@@ -276,7 +280,9 @@  with_test_prefix "step using -rfu for baz" {
     gdb_test_no_output "skip enable 8"
     gdb_test "step" "bar \\(\\) at.*" "step 1"
     gdb_test "step" ".*" "step 2"; # Return from bar()
-    gdb_test "step" "foo \\(\\) at.*" "step 3"
+    # With gcc 9.2.0 we jump once back to main before entering foo here.
+    # If that happens try to step a second time.
+    gdb_test "step" "foo \\(\\) at.*" "step 3" "main \\(\\) at.*" "step"
     gdb_test "step" ".*" "step 4"; # Return from foo()
     gdb_test "step" "main \\(\\) at.*" "step 5"
 }
-- 
1.9.1