Re: [PATCH 1/4] New test for removing socket file in gdb.trace/strace.exp.

Pedro Alves
2012-06-21T15:56:56Z

On 06/20/2012 02:46 PM, Yao Qi wrote:

> gdb/testsuite:
>
> 2012-06-20 Yao Qi <yao@codesourcery.com>
>
> PR gdb/14161.
> * gdb.trace/strace.exp (strace_remove_socket): New proc to test
> the socket file is removed.
> Invoke proc strace_remove_socket without checking
> 'is_remote target'.
> ---
> gdb/testsuite/gdb.trace/strace.exp | 108 ++++++++++++++++++++++++++++++++----
> 1 file changed, 98 insertions(+), 10 deletions(-)
>
> diff --git a/gdb/testsuite/gdb.trace/strace.exp b/gdb/testsuite/gdb.trace/strace.exp
> index 51da92b..d45c66d 100644
> --- a/gdb/testsuite/gdb.trace/strace.exp
> +++ b/gdb/testsuite/gdb.trace/strace.exp
> @@ -39,6 +39,90 @@ if { [gdb_compile $srcdir/$subdir/$srcfile $binfile executable $additional_flags
> return -1
> }
>
> +# Test that the socket file is removed when GDB quits, detaches or
> +# resumes the inferior until it exits.
> +
> +proc strace_remove_socket { action } {
> + with_test_prefix "remove_socket_after_${action}" {
> +
> + global executable
> + global gdb_prompt
> +
> + # Restart with a fresh gdb.
> + clean_restart $executable
> + if ![runto_main] {
> + fail "Can't run to main"
> + return -1
> + }
> +
> + # List the markers in program.
> + gdb_test "info static-tracepoint-markers" \
> + ".*ust/bar\[\t \]+n\[\t \]+.*ust/bar2\[\t \]+n\[\t \]+.*"
> +
> + set pid ""
> + set test "collect pid"
> + gdb_test_multiple "info inferiors" $test {
> + -re "process (\[-0-9a-fx\]+) \[^\n\]*\n.*${gdb_prompt} $" {
> + set pid $expect_out(1,string)
> + pass $test
> + }
> + -re ".*${gdb_prompt} $" {
> + fail $test
> + }
> + }
> +
> + set test "socket file exists"
> + set socket_file "/tmp/gdb_ust${pid}"
> + set status [remote_exec target "sh -c { \[ -S $socket_file \] }"]
> +
> + if { [lindex $status 0] == 0 } {
> + pass $test
> + } else {
> + fail $test
> + }
> +
> + send_gdb "${action}\n"
> + gdb_expect {
> + -re "A debugging session is active.\r\n.*\r\nQuit anyway\\? \\(y or n\\) $" {
> + send_gdb "y\n"
> + }
> + -re "Detaching .*, process .*$" {
> + }
> + -re "Continuing.*$" {
> + }
> + }
> +
> + set exists 1
> +
> + for {set i 1} {$i <= 5} {incr i} {
> + set status [remote_exec target "sh -c { \[ -S $socket_file \] }"]
> + if { [lindex $status 0] != 0 } {
> + set exists 0
> + break
> + }
> + sleep 1
> + }
> +
> + if { ![is_remote target] && ![string equal $action "detach"] } {
> + setup_kfail gdb/14161 *-*-*
> + }
> +
> + set test "socket file removed"
> +
> + if { $exists } {
> + fail $test
> + } else {
> + pass $test
> + }
> +
> + if { [string equal $action "quit"] && [is_remote host] } {
> + global gdb_spawn_id
> + # unset gdb_spawn_id here to avoid sending command 'quit' to GDB
> + # later in default_gdb_exit.
> + unset gdb_spawn_id
> + }
> +}}
> +
> proc strace_info_marker { } { with_test_prefix "info_marker" {
> global executable
> global gdb_prompt
> @@ -242,28 +326,32 @@ proc strace_trace_on_diff_addr { } { with_test_prefix "trace_diff_addr" {
> gdb_test "tfind" "Target failed to find requested trace frame\\..*"
> }}
>
> -clean_restart $executable
> +# Run it on x86/x86_64 linux.
> +if { [istarget "x86_64-*-linux*"] || [istarget "i\[34567\]86-*-linux*"] } {
> + strace_info_marker
> + strace_remove_socket "quit"
> + strace_remove_socket "detach"
> + strace_remove_socket "continue"
> +}
>
> +clean_restart $executable
> if ![runto_main] {
> fail "Can't run to main to check for trace support"
> return -1
> }
> -
> -# Run it on native x86/x86_64 linux.
> -if { ![is_remote target]
> - && ([istarget "x86_64-*-linux*"] || [istarget "i\[34567\]86-*-linux*"]) } {
> - strace_info_marker
> - return
> -}
> -
> if { ![gdb_target_supports_trace] } then {
> + # GDB detaches inferior so that the socket file can be removed.
> + gdb_test_multiple "detach" "detach" {
> + -re "Detaching .*, process .*${gdb_prompt} $" {
> + pass "detach"
> + }
> + }

This could just be gdb_test ? But I'm confused on why "detach"
is needed at all here, going from that comment. Wouldn't not
doing anything (and therefore gdb quitting and killing the inferior)
have the same effect?

> unsupported "Current target does not support trace"
> return -1;
> }
>
> gdb_load_shlibs $libipa

If we now have tests earlier that run against remote targets,
it seems this should be moved earlier too.

>
> -strace_info_marker
> strace_probe_marker
>
> strace_trace_on_same_addr "trace"

--
Pedro Alves