]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
[gdb/testsuite] Don't leak env vars in gdb.debuginfod/fetch_src_and_symbols.exp
authorTom de Vries <tdevries@suse.de>
Tue, 21 Jul 2020 07:40:21 +0000 (09:40 +0200)
committerTom de Vries <tdevries@suse.de>
Tue, 21 Jul 2020 07:40:21 +0000 (09:40 +0200)
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.

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/testsuite/ChangeLog
gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp

index 7dca586dd472568f7803113960a6a8f3e2d8b16c..a68c272188c2b2d42afc4e4afe0c22e7b2358c64 100644 (file)
@@ -1,3 +1,8 @@
+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.
+
 2020-07-20  Ludovic Courtès  <ludo@gnu.org>
 
        * gdb.guile/source2.scm: Add #f first argument to 'format'.
index fbab3b1f48d5cbfedf0393282d6b5466328d68e9..c26893ddf437897cfccc70e0554f9e92352f509e 100644 (file)
@@ -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
+}