[gdb/breakpoints] Fix segfault for catch syscall -1
Using a hello world a.out, I run into a segfault: ... $ gcc hello.c $ gdb -batch a.out -ex "catch syscall -1" -ex r Catchpoint 1 (syscall -1) Aborted (core dumped) ... Fix this by erroring out if a negative syscall number is used in the catch syscall command. Tested on x86_64-linux. gdb/ChangeLog: 2021-02-05 Tom de Vries <tdevries@suse.de> PR breakpoints/27313 * break-catch-syscall.c (catch_syscall_split_args): Reject negative syscall numbers. gdb/testsuite/ChangeLog: 2021-02-05 Tom de Vries <tdevries@suse.de> PR breakpoints/27313 * gdb.base/catch-syscall.exp: Check that "catch syscall -1" is rejected.
This commit is contained in:
parent
bdfea17ea9
commit
0e857c8288
@ -1,3 +1,9 @@
|
||||
2021-02-05 Tom de Vries <tdevries@suse.de>
|
||||
|
||||
PR breakpoints/27313
|
||||
* break-catch-syscall.c (catch_syscall_split_args): Reject negative
|
||||
syscall numbers.
|
||||
|
||||
2021-02-05 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* compile/compile-c-support.c (get_compile_context)
|
||||
|
@ -390,6 +390,8 @@ catch_syscall_split_args (const char *arg)
|
||||
syscall_number = (int) strtol (cur_name, &endptr, 0);
|
||||
if (*endptr == '\0')
|
||||
{
|
||||
if (syscall_number < 0)
|
||||
error (_("Unknown syscall number '%d'."), syscall_number);
|
||||
get_syscall_by_number (gdbarch, syscall_number, &s);
|
||||
result.push_back (s.number);
|
||||
}
|
||||
|
@ -1,3 +1,9 @@
|
||||
2021-02-05 Tom de Vries <tdevries@suse.de>
|
||||
|
||||
PR breakpoints/27313
|
||||
* gdb.base/catch-syscall.exp: Check that "catch syscall -1" is
|
||||
rejected.
|
||||
|
||||
2021-02-05 Tom de Vries <tdevries@suse.de>
|
||||
|
||||
* gdb.dwarf2/main-subprogram.exp: Add KFAIL for PR symtab/24549.
|
||||
|
@ -54,6 +54,9 @@ gdb_test_multiple "continue" $test {
|
||||
}
|
||||
}
|
||||
|
||||
# Test-case for PR27313. Verify that negative syscall numbers are refused.
|
||||
gdb_test "catch syscall -1" "Unknown syscall number '-1'\\."
|
||||
|
||||
# All (but the last) syscalls from the example code. It is filled in
|
||||
# proc setup_all_syscalls.
|
||||
set all_syscalls { }
|
||||
|
Loading…
Reference in New Issue
Block a user