Message ID | 1430011521-24340-4-git-send-email-gabriel@krisman.be |
---|---|
State | New |
Headers | show |
On Saturday, April 25 2015, Gabriel Krisman Bertazi wrote: > gdb/testsuite/ > > * gdb.base/catch-syscall.exp (do_syscall_tests): Add call > to test_catch_syscall_group. > (test_catch_syscall_group): New. Hey, Thanks for this third version. I think we're almost there :-). > --- > gdb/testsuite/gdb.base/catch-syscall.exp | 37 ++++++++++++++++++++++++++++++++ > 1 file changed, 37 insertions(+) > > diff --git a/gdb/testsuite/gdb.base/catch-syscall.exp b/gdb/testsuite/gdb.base/catch-syscall.exp > index df0004a..c65c8e3 100644 > --- a/gdb/testsuite/gdb.base/catch-syscall.exp > +++ b/gdb/testsuite/gdb.base/catch-syscall.exp > @@ -269,6 +269,40 @@ proc test_catch_syscall_fail_nodatadir {} { > } > } > > +proc test_catch_syscall_group {} { > + global decimal > + > + set sysnum "\\\[${decimal}\\\]" > + > + gdb_test "catch syscall g:process" \ > + "Catchpoint $decimal \\(syscalls (\'(clone|fork|execve|exit)\' $sysnum)+.*" \ > + "set catchpoint on a group of syscalls" > + > + gdb_test "catch syscall group:process read" \ > + "Catchpoint $decimal \\(syscalls (\'(clone|fork|execve|exit)\' $sysnum)+.*read.*\\)" \ > + "set catchpoints on a group of syscalls and on a single syscall" > + > + gdb_test "catch syscall group:" \ > + "Unknown syscall group.*" \ > + "set catchpoints on an invalid group" You should use a full-anchored regex here. You know exactly what to expect from the command, so match it literally. > + > + gdb_test "catch syscall g:junk" \ > + "Unknown syscall group.*" \ > + "set catchpoints on an unknown group." Same here. > + > + gdb_test "complete catch syscall g:proc" \ > + "catch syscall g:process" \ > + "complete catch syscall group with 'g:' prefix" > + > + gdb_test "complete catch syscall group:proc" \ > + "catch syscall group:process" \ > + "complete catch syscall group with 'group:' prefix" > + > + gdb_test "complete catch syscall g" \ > + ".*group:process.*" \ > + "complete catch syscall group suggests 'group:' prefix" What you can do here, assuming that all targets have the same groups, is to use gdb_test_sequence and match all the "catch syscall group:XYZ" entries. Maybe that is too strict (it assumes that future targets will also have to implement the exact same groups), but I think it is OK doing that now and adjusting this in the future if we need. > +} > + > proc do_syscall_tests {} { > # NOTE: We don't have to point gdb at the correct data-directory. > # For the build tree that is handled by INTERNAL_GDBFLAGS. > @@ -309,6 +343,9 @@ proc do_syscall_tests {} { > # Testing if the 'catch syscall' command works when switching to > # different architectures on-the-fly (PR gdb/10737). > if [runto_main] then { test_catch_syscall_multi_arch } > + > + # Testing the 'catch' syscall command for a group of syscalls. > + if [runto_main] then { test_catch_syscall_group } > } > > proc test_catch_syscall_without_args_noxml {} { > -- > 1.9.3 Other than that, this part is OK, but I am not a global maintainer to approve.
diff --git a/gdb/testsuite/gdb.base/catch-syscall.exp b/gdb/testsuite/gdb.base/catch-syscall.exp index df0004a..c65c8e3 100644 --- a/gdb/testsuite/gdb.base/catch-syscall.exp +++ b/gdb/testsuite/gdb.base/catch-syscall.exp @@ -269,6 +269,40 @@ proc test_catch_syscall_fail_nodatadir {} { } } +proc test_catch_syscall_group {} { + global decimal + + set sysnum "\\\[${decimal}\\\]" + + gdb_test "catch syscall g:process" \ + "Catchpoint $decimal \\(syscalls (\'(clone|fork|execve|exit)\' $sysnum)+.*" \ + "set catchpoint on a group of syscalls" + + gdb_test "catch syscall group:process read" \ + "Catchpoint $decimal \\(syscalls (\'(clone|fork|execve|exit)\' $sysnum)+.*read.*\\)" \ + "set catchpoints on a group of syscalls and on a single syscall" + + gdb_test "catch syscall group:" \ + "Unknown syscall group.*" \ + "set catchpoints on an invalid group" + + gdb_test "catch syscall g:junk" \ + "Unknown syscall group.*" \ + "set catchpoints on an unknown group." + + gdb_test "complete catch syscall g:proc" \ + "catch syscall g:process" \ + "complete catch syscall group with 'g:' prefix" + + gdb_test "complete catch syscall group:proc" \ + "catch syscall group:process" \ + "complete catch syscall group with 'group:' prefix" + + gdb_test "complete catch syscall g" \ + ".*group:process.*" \ + "complete catch syscall group suggests 'group:' prefix" +} + proc do_syscall_tests {} { # NOTE: We don't have to point gdb at the correct data-directory. # For the build tree that is handled by INTERNAL_GDBFLAGS. @@ -309,6 +343,9 @@ proc do_syscall_tests {} { # Testing if the 'catch syscall' command works when switching to # different architectures on-the-fly (PR gdb/10737). if [runto_main] then { test_catch_syscall_multi_arch } + + # Testing the 'catch' syscall command for a group of syscalls. + if [runto_main] then { test_catch_syscall_group } } proc test_catch_syscall_without_args_noxml {} {