Fix skip.exp test failure observed with gcc-9.2.0
Commit Message
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
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
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
>
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
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(-)
@@ -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