Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* [committed][gdb/testsuite] Don't leak env vars in gdb.debuginfod/fetch_src_and_symbols.exp
@ 2020-07-21  7:45 Tom de Vries
  0 siblings, 0 replies; only message in thread
From: Tom de Vries @ 2020-07-21  7:45 UTC (permalink / raw)
  To: gdb-patches

Hi,

Test-case gdb.debuginfod/fetch_src_and_symbols.exp leaks env vars
DEBUGINFOD_URLS, DEBUGINFOD_TIMEOUT and DEBUGINFOD_CACHE_PATH, causing
timeouts in subsequent tests.

Fix this by using save_vars.  Also, fix PATH and DUPLICATE errors.  Finally,
cleanup whitespace.

Committed to trunk.

Thanks,
- Tom

[gdb/testsuite] Don't leak env vars in gdb.debuginfod/fetch_src_and_symbols.exp

gdb/testsuite/ChangeLog:

2020-07-21  Tom de Vries  <tdevries@suse.de>

	* gdb.debuginfod/fetch_src_and_symbols.exp: Use save_vars for env
	vars.  Fix PATH and DUPLICATE errors.  Cleanup whitespace.

---
 .../gdb.debuginfod/fetch_src_and_symbols.exp       | 209 ++++++++++++---------
 1 file changed, 120 insertions(+), 89 deletions(-)

diff --git a/gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp b/gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp
index fbab3b1f48..c26893ddf4 100644
--- a/gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp
+++ b/gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp
@@ -31,7 +31,7 @@ if { [which curl] == 0 } {
 
 # Skip testing if gdb was not configured with debuginfod
 if { [string first "with-debuginfod" \
-         [eval exec $GDB $INTERNAL_GDBFLAGS --configuration]] == -1 } {
+	 [eval exec $GDB $INTERNAL_GDBFLAGS --configuration]] == -1 } {
     untested "gdb not configured with debuginfod"
     return -1
 }
@@ -58,31 +58,6 @@ if { [gdb_compile "$sourcetmp" "$binfile" executable {debug}] != "" } {
     return -1
 }
 
-setenv DEBUGINFOD_URLS ""
-setenv DEBUGINFOD_TIMEOUT 30
-setenv DEBUGINFOD_CACHE_PATH $cache
-
-# Test that gdb cannot find source without debuginfod
-clean_restart $binfile
-gdb_test_no_output "set substitute-path $outputdir /dev/null"
-gdb_test "list" ".*No such file or directory.*"
-
-# Strip symbols into separate file and move it so gdb cannot find it without debuginfod
-if { [gdb_gnu_strip_debug $binfile ""] != 0 } {
-    fail "strip debuginfo"
-    return -1
-}
-
-set debugdir [standard_output_file "debug"]
-set debuginfo [standard_output_file "fetch_src_and_symbols.debug"]
-
-file mkdir $debugdir
-file rename -force $debuginfo $debugdir
-
-# Test that gdb cannot find symbols without debuginfod
-clean_restart $binfile
-gdb_test "file" ".*No symbol file.*"
-
 # Write some assembly that just has a .gnu_debugaltlink section.
 # Copied from testsuite/gdb.dwarf2/dwzbuildid.exp.
 proc write_just_debugaltlink {filename dwzname buildid} {
@@ -118,7 +93,7 @@ proc write_dwarf_file {filename buildid {value 99}} {
 
 	cu {} {
 	    compile_unit {{language @DW_LANG_C}} {
-	        int_label2: base_type {
+		int_label2: base_type {
 		    {name int}
 		    {byte_size 4 sdata}
 		    {encoding @DW_ATE_signed}
@@ -134,82 +109,138 @@ proc write_dwarf_file {filename buildid {value 99}} {
     }
 }
 
-set buildid "01234567890abcdef0123456"
+proc no_url { } {
+    global binfile outputdir debugdir
 
-write_just_debugaltlink ${binfile}_has_altlink.S ${binfile}_dwz.o $buildid
-write_dwarf_file ${binfile}_dwz.S $buildid
+    setenv DEBUGINFOD_URLS ""
 
-if {[gdb_compile ${binfile}_has_altlink.S ${binfile}_alt.o object nodebug] != ""} {
-    fail "compile main with altlink"
-    return -1
-}
+    # Test that gdb cannot find source without debuginfod
+    clean_restart $binfile
+    gdb_test_no_output "set substitute-path $outputdir /dev/null" \
+	"set substitute-path"
+    gdb_test "list" ".*No such file or directory.*"
 
-if {[gdb_compile ${binfile}_dwz.S ${binfile}_dwz.o object nodebug] != ""} {
-    fail "compile altlink"
-    return -1
-}
+    # Strip symbols into separate file and move it so gdb cannot find it \
+	without debuginfod
+    if { [gdb_gnu_strip_debug $binfile ""] != 0 } {
+	fail "strip debuginfo"
+	return -1
+    }
 
-file rename -force ${binfile}_dwz.o $debugdir
+    set debugdir [standard_output_file "debug"]
+    set debuginfo [standard_output_file "fetch_src_and_symbols.debug"]
 
-# Test that gdb cannot find dwz without debuginfod.
-clean_restart
-gdb_test "file ${binfile}_alt.o" ".*could not find '.gnu_debugaltlink'.*"
+    file mkdir $debugdir
+    file rename -force $debuginfo $debugdir
 
-# Find an unused port
-set port 7999
-set found 0
-while { ! $found } {
-  incr port
-  if { $port == 65536 } {
-    fail "no available ports"
-    return -1
-  }
-
-  spawn debuginfod -vvvv -d $db -p $port -F $debugdir
-  expect {
-    "started http server on IPv4 IPv6 port=$port" { set found 1 }
-    "failed to bind to port" { kill_wait_spawned_process $spawn_id }
-    timeout {
-      fail "find port timeout"
-      return -1
+    # Test that gdb cannot find symbols without debuginfod
+    clean_restart $binfile
+    gdb_test "file" ".*No symbol file.*"
+
+    set buildid "01234567890abcdef0123456"
+
+    write_just_debugaltlink ${binfile}_has_altlink.S ${binfile}_dwz.o \
+	$buildid
+    write_dwarf_file ${binfile}_dwz.S $buildid
+
+    if {[gdb_compile ${binfile}_has_altlink.S ${binfile}_alt.o object \
+	     nodebug] != ""} {
+	fail "compile main with altlink"
+	return -1
     }
-  }
-}
 
-set metrics [list "ready 1" \
-	     "thread_work_total{role=\"traverse\"} 1" \
-	     "thread_work_pending{role=\"scan\"} 0" \
-	     "thread_busy{role=\"scan\"} 0"]
+    if {[gdb_compile ${binfile}_dwz.S ${binfile}_dwz.o object \
+	     nodebug] != ""} {
+	fail "compile altlink"
+	return -1
+    }
+
+    file rename -force ${binfile}_dwz.o $debugdir
 
-# Check server metrics to confirm init has completed.
-foreach m $metrics {
-  set timelim 20
-  while { $timelim != 0 } {
-    sleep 0.5
-    catch {exec curl -s http://127.0.0.1:$port/metrics} got
+    # Test that gdb cannot find dwz without debuginfod.
+    clean_restart
+    gdb_test "file ${binfile}_alt.o" \
+	".*could not find '.gnu_debugaltlink'.*" \
+	"file [file tail ${binfile}_alt.o]"
+}
+
+proc local_url { } {
+    global binfile outputdir db debugdir
+
+    # Find an unused port
+    set port 7999
+    set found 0
+    while { ! $found } {
+	incr port
+	if { $port == 65536 } {
+	    fail "no available ports"
+	    return -1
+	}
 
-    if { [regexp $m $got] } {
-      break
+	spawn debuginfod -vvvv -d $db -p $port -F $debugdir
+	expect {
+	    "started http server on IPv4 IPv6 port=$port" { set found 1 }
+	    "failed to bind to port" { kill_wait_spawned_process $spawn_id }
+	    timeout {
+		fail "find port timeout"
+		return -1
+	    }
+	}
     }
 
-    incr timelim -1
-  }
+    set metrics [list "ready 1" \
+		     "thread_work_total{role=\"traverse\"} 1" \
+		     "thread_work_pending{role=\"scan\"} 0" \
+		     "thread_busy{role=\"scan\"} 0"]
 
-  if { $timelim == 0 } {
-    fail "server init timeout"
-    return -1
-  }
+    # Check server metrics to confirm init has completed.
+    foreach m $metrics {
+	set timelim 20
+	while { $timelim != 0 } {
+	    sleep 0.5
+	    catch {exec curl -s http://127.0.0.1:$port/metrics} got
+
+	    if { [regexp $m $got] } {
+		break
+	    }
+
+	    incr timelim -1
+	}
+
+	if { $timelim == 0 } {
+	    fail "server init timeout"
+	    return -1
+	}
+    }
+
+    # Point the client to the server
+    setenv DEBUGINFOD_URLS http://127.0.0.1:$port
+
+    # gdb should now find the symbol and source files
+    clean_restart $binfile
+    gdb_test_no_output "set substitute-path $outputdir /dev/null" \
+	"set substitute-path"
+    gdb_test "br main" "Breakpoint 1 at.*file.*"
+    gdb_test "l" ".*This program is distributed in the hope.*"
+
+    # gdb should now find the debugaltlink file
+    clean_restart
+    gdb_test "file ${binfile}_alt.o" \
+	".*Reading symbols from ${binfile}_alt.o\.\.\.*" \
+	"file [file tail ${binfile}_alt.o]"
 }
 
-# Point the client to the server
-setenv DEBUGINFOD_URLS http://127.0.0.1:$port
+set envlist \
+    [list \
+	 env(DEBUGINFOD_URLS) \
+	 env(DEBUGINFOD_TIMEOUT) \
+	 env(DEBUGINFOD_CACHE_PATH)]
 
-# gdb should now find the symbol and source files
-clean_restart $binfile
-gdb_test_no_output "set substitute-path $outputdir /dev/null"
-gdb_test "br main" "Breakpoint 1 at.*file.*"
-gdb_test "l" ".*This program is distributed in the hope.*"
+save_vars $envlist {
+    setenv DEBUGINFOD_TIMEOUT 30
+    setenv DEBUGINFOD_CACHE_PATH $cache
 
-# gdb should now find the debugaltlink file
-clean_restart
-gdb_test "file ${binfile}_alt.o" ".*Reading symbols from ${binfile}_alt.o\.\.\.*"
+    with_test_prefix no_url no_url
+
+    with_test_prefix local_url local_url
+}


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2020-07-21  7:45 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-07-21  7:45 [committed][gdb/testsuite] Don't leak env vars in gdb.debuginfod/fetch_src_and_symbols.exp Tom de Vries

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox