diff options
author | Philippe Waroquiers <philippe.waroquiers@skynet.be> | 2022-11-20 17:42:12 +0100 |
---|---|---|
committer | Philippe Waroquiers <philippe.waroquiers@skynet.be> | 2022-11-21 21:16:12 +0100 |
commit | 28a072f4af84ad295d37f8aa70c5fec9d36a274c (patch) | |
tree | 159a8d5b50669a4801c7eb3e09abbcf2afa38193 | |
parent | 83f350830ee561ddc799d1445c6024a84df9f161 (diff) | |
download | binutils-28a072f4af84ad295d37f8aa70c5fec9d36a274c.zip binutils-28a072f4af84ad295d37f8aa70c5fec9d36a274c.tar.gz binutils-28a072f4af84ad295d37f8aa70c5fec9d36a274c.tar.bz2 |
When getting the locno of a bpstat, handle the case of bp with null locations.
The test py-objfile.exp unloads the current file while debugging the process.
This results in bpstat bs->b->loc to become nullptr.
Handle this case in breakpoint.c:bpstat_locno.
Note: GDB crashes on this problem with an internal error,
but the end of gdb summary shows:
...
=== gdb Summary ===
# of expected passes 36
The output also does not contain a 'FAIL:'.
After the fix, the nr of expected passes increased.
In the gdb.log output, one can see:
...
Fatal signal: Segmentation fault
----- Backtrace -----
0x55698905c5b9 gdb_internal_backtrace_1
../../binutils-gdb/gdb/bt-utils.c:122
0x55698905c5b9 _Z22gdb_internal_backtracev
...
ERROR: Couldn't send python print(objfile.filename) to GDB.
ERROR: : spawn id exp9 not open
while executing
"expect {
-i exp9 -timeout 10
-re ".*A problem internal to GDB has been detected" {
fail "$message (GDB internal error)"
gdb_internal_error..."
("uplevel" body line 1)
invoked from within
....
Wondering if it might be possible to improve gdb_test to have
gdb_test "python print(objfile.filename)" "None" \
"objfile.filename after objfile is unloaded"
reporting a failed result instead of just producing the internal error.
-rw-r--r-- | gdb/breakpoint.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index 5b69167..a161b78 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -4486,7 +4486,7 @@ bpstat_locno (const bpstat *bs) int locno = 0; - if (b != nullptr && b->loc->next != nullptr) + if (b != nullptr && b->loc != nullptr && b->loc->next != nullptr) { const bp_location *bl_i; |