Bug 30103 - GDB gets confused about what is the current source file for various actions
Summary: GDB gets confused about what is the current source file for various actions
Status: RESOLVED FIXED
Alias: None
Product: gdb
Classification: Unclassified
Component: testsuite (show other bugs)
Version: HEAD
: P2 normal
Target Milestone: 14.1
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2023-02-09 16:31 UTC by Luis Machado
Modified: 2023-02-10 14:59 UTC (History)
1 user (show)

See Also:
Host: aarch64-linux
Target: aarch64-linux
Build: aarch64-linux
Last reconfirmed:


Attachments
gdb.log on aarch64-linux Ubuntu 22.04. (2.37 KB, text/x-log)
2023-02-09 16:32 UTC, Luis Machado
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Luis Machado 2023-02-09 16:31:09 UTC
As described in here, gdb seems to get confused about what is the current source file to use for commands like break / list / info source.

In particular, there seems to be a manifestation of this confusion when the source file is the same and doesn't have any directory components to it.

Attached is an example of how the test fails on aarch64-linux Ubuntu 22.04. It doesn't fail for aarch64-linux Ubuntu 20.04 though.
Comment 1 Luis Machado 2023-02-09 16:32:30 UTC
Created attachment 14667 [details]
gdb.log on aarch64-linux Ubuntu 22.04.
Comment 2 Tom de Vries 2023-02-10 11:07:07 UTC
I don't think this is a gdb problem, but a testsuite problem.

I think the fact that the test-case source file is called longjmp.c, and that due to a KFAIL we're stopping in __libc_siglongjmp, which is in a glibc file also called longjmp.c is an unfortunate red herring.

In other words, I think we would see the same problem if __libc_siglongjmp was located in bla.c (or, conversely we'd rename the test-case source file).

Setting component to testsuite.

Subbmitted patch: https://sourceware.org/pipermail/gdb-patches/2023-February/196807.html.

Btw, as mentioned in the patch, I also managed to reproduce on x86_64/-m32.
Comment 3 Sourceware Commits 2023-02-10 14:58:04 UTC
The master branch has been updated by Tom de Vries <vries@sourceware.org>:

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=632652850db23bfec2499febe03c9ac4aa0b8dce

commit 632652850db23bfec2499febe03c9ac4aa0b8dce
Author: Tom de Vries <tdevries@suse.de>
Date:   Fri Feb 10 15:58:00 2023 +0100

    [gdb/testsuite] Fix linespec ambiguity in gdb.base/longjmp.exp
    
    PR testsuite/30103 reports the following failure on aarch64-linux
    (ubuntu 22.04):
    ...
    (gdb) PASS: gdb.base/longjmp.exp: with_probes=0: pattern 1: next to longjmp
    next
    warning: Breakpoint address adjusted from 0x83dc305fef755015 to \
      0xffdc305fef755015.
    Warning:
    Cannot insert breakpoint 0.
    Cannot access memory at address 0xffdc305fef755015
    
    __libc_siglongjmp (env=0xaaaaaaab1018 <env>, val=1) at ./setjmp/longjmp.c:30
    30      }
    (gdb) KFAIL: gdb.base/longjmp.exp: with_probes=0: pattern 1: gdb/26967 \
      (PRMS: next over longjmp)
    delete breakpoints
    Delete all breakpoints? (y or n) y
    (gdb) info breakpoints
    No breakpoints or watchpoints.
    (gdb) break 63
    No line 63 in the current file.
    Make breakpoint pending on future shared library load? (y or [n]) n
    (gdb) FAIL: gdb.base/longjmp.exp: with_probes=0: pattern 2: setup: breakpoint \
      at pattern start (got interactive prompt)
    ...
    
    The test-case intends to set the breakpoint on line number 63 in
    gdb.base/longjmp.c.
    
    It tries to do so by specifying "break 63", which specifies a line in the
    "current source file".
    
    Due to the KFAIL PR, gdb stopped in __libc_siglongjmp, and because of presence
    of debug info, the "current source file" becomes glibc's ./setjmp/longjmp.c.
    
    Consequently, setting the breakpoint fails.
    
    Fix this by adding a $subdir/$srcfile: prefix to the breakpoint linespecs.
    
    I've managed to reproduce the FAIL on x86_64/-m32, by installing the
    glibc-32bit-debuginfo package.  This allowed me to confirm the "current source
    file" that is used:
    ...
    (gdb) KFAIL: gdb.base/longjmp.exp: with_probes=0: pattern 1: gdb/26967 \
      (PRMS: next over longjmp)
    info source^M
    Current source file is ../setjmp/longjmp.c^M
    ...
    
    Tested on x86_64-linux, target boards unix/{-m64,-m32}.
    
    Reported-By: Luis Machado <luis.machado@arm.com>
    Reviewed-By: Tom Tromey <tom@tromey.com>
    
    PR testsuite/30103
    Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30103
Comment 4 Tom de Vries 2023-02-10 14:59:08 UTC
Fixed by commit.