[PING][PATCH 1/2] Allow function prologues to have multiple repeating lines

Alan Hayward
2018-10-31T16:26:49Z

Ping for this and part two.

There was no 0/2. Thinking about it now, I probably should have said:

[0/2] Fix start line for function breakpoints on Ubuntu

These two patches came out of the change I made to ovldbreak.exp due to the
breakpoint at main starting on the { instead of the first line. This happens
only on Ubuntu.

Part one is a generic fix. Part two is an addition to the fix specifically
for i386/amd64. Part two also reverts the line number part of ovldbreak.exp.

Fixes roughly 50 test cases for Ubuntu.

Alan.

> On 24 Oct 2018, at 10:04, Alan Hayward <Alan.Hayward@arm.com> wrote:
>
> Compiling gdb.cp/ovldbreak.cc on Ubuntu places two identical line numbers
> in the function prologue.
>
> x86_64 Ubtunu 16.04 with GCC 5.4.0-6ubuntu1~16.04.4
> 000000000040052f :
> Line 48
> 40052f: 55 push %rbp
> 400530: 48 89 e5 mov %rsp,%rbp
> 400533: 53 push %rbx
> 400534: 48 81 ec 88 00 00 00 sub $0x88,%rsp
> Line 48
> 40053b: 64 48 8b 04 25 28 00 mov %fs:0x28,%rax
> 400542: 00 00
> 400544: 48 89 45 e8 mov %rax,-0x18(%rbp)
> 400548: 31 c0 xor %eax,%eax
> Line 49
> 40054a: c6 45 85 02 movb $0x2,-0x7b(%rbp)
> Line 50
> 40054e: c6 45 86 03 movb $0x3,-0x7a(%rbp)
> etc
>
> Aarch64 Ubuntu 16.04 with GCC 7.2.0-1ubuntu1~16.04
> 0000000000400708 :
> Line 48
> 400708: d102c3ff sub sp, sp, #0xb0
> 40070c: a9027bfd stp x29, x30, [sp,#32]
> 400710: 910083fd add x29, sp, #0x20
> 400714: f9001bf3 str x19, [sp,#48]
> Line 48
> 400718: 90000100 adrp x0, 420000 <_GLOBAL_OFFSET_TABLE_+0x28>
> 40071c: 9100e000 add x0, x0, #0x38
> 400720: f9400001 ldr x1, [x0]
> 400724: f90047a1 str x1, [x29,#136]
> 400728: d2800001 mov x1, #0x0 // #0
> Line 49
> 40072c: 52800040 mov w0, #0x2 // #2
> 400730: 3900b7a0 strb w0, [x29,#45]
> Line 50
> 400734: 52800060 mov w0, #0x3 // #3
> 400738: 3900bba0 strb w0, [x29,#46]
> etc
>
> Compare to openSUSE 13.3 AArch64 with GCC 7.2.1 20171020
>
> 00000000004005e4 :
> Line 48
> 4005e4: d102c3ff sub sp, sp, #0xb0
> 4005e8: a9027bfd stp x29, x30, [sp, #32]
> 4005ec: 910083fd add x29, sp, #0x20
> 4005f0: f9001bf3 str x19, [sp, #48]
> Line 49
> 4005f4: 52800040 mov w0, #0x2 // #2
> 4005f8: 39023fa0 strb w0, [x29, #143]
> Line 50
> 4005fc: 52800060 mov w0, #0x3 // #3
> 400600: 39023ba0 strb w0, [x29, #142]
>
> skip_prologue_using_sal () does did not allow for the case where there might
> be two SALs with the same line number in a function prologue. Allow this.
>
> Fixes over 50 tests on Aarch64 Ubuntu.
>
> 2018-10-24 Alan Hayward <alan.hayward@arm.com>
>
> * symtab.c (skip_prologue_using_sal): Don't break for equal line
> numbers.
> ---
> gdb/symtab.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/gdb/symtab.c b/gdb/symtab.c
> index 2e48d6527e..67ab5d40fa 100644
> --- a/gdb/symtab.c
> +++ b/gdb/symtab.c
> @@ -3925,9 +3925,9 @@ skip_prologue_using_sal (struct gdbarch *gdbarch, CORE_ADDR func_addr)
> sal = find_pc_line (prologue_sal.end, 0);
> if (sal.line == 0)
> break;
> - /* Assume that a consecutive SAL for the same (or larger)
> - line mark the prologue -> body transition. */
> - if (sal.line >= prologue_sal.line)
> + /* Assume that a SAL to a larger line marks the prologue -> body
> + transition. */
> + if (sal.line > prologue_sal.line)
> break;
> /* Likewise if we are in a different symtab altogether
> (e.g. within a file included via #include). */
> --
> 2.17.1 (Apple Git-112)
>