mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-23 10:03:47 +08:00
gdb/testsuite/gdb.debuginfod: Add lazy downloading tests
Add some tests for 'set debuginfod enabled lazy', .gdb_index downloading and deferred debuginfo downloading.
This commit is contained in:
parent
6496753f01
commit
3e6430952a
@ -42,6 +42,23 @@ if { [gdb_compile "$sourcetmp" "${binfile}2" executable {debug build-id}] != ""
|
||||
return -1
|
||||
}
|
||||
|
||||
set sectfile "section"
|
||||
set sectsrc $srcdir/$subdir/section.c
|
||||
set sectexec [standard_output_file $sectfile]
|
||||
|
||||
set libfile "libsection"
|
||||
set libsrc $srcdir/$subdir/$libfile.c
|
||||
set lib_sl [standard_output_file $libfile.sl]
|
||||
|
||||
set lib_opts [list debug build-id ]
|
||||
set exec_opts [list debug build-id shlib=$lib_sl]
|
||||
|
||||
if { [gdb_compile_shlib $libsrc $lib_sl $lib_opts] != ""
|
||||
|| [gdb_compile $sectsrc $sectexec executable $exec_opts] != "" } {
|
||||
untested "failed to compile"
|
||||
return -1
|
||||
}
|
||||
|
||||
# Write some assembly that just has a .gnu_debugaltlink section.
|
||||
# Copied from testsuite/gdb.dwarf2/dwzbuildid.exp.
|
||||
proc write_just_debugaltlink {filename dwzname buildid} {
|
||||
@ -94,6 +111,7 @@ proc write_dwarf_file {filename buildid {value 99}} {
|
||||
}
|
||||
|
||||
set corefile [standard_output_file "corefile"]
|
||||
set lazy_support -1
|
||||
|
||||
# Setup the global variable DEBUGDIR as a directory containing the
|
||||
# debug information for the test executable.
|
||||
@ -103,6 +121,8 @@ set corefile [standard_output_file "corefile"]
|
||||
# running.
|
||||
proc_with_prefix no_url { } {
|
||||
global binfile outputdir debugdir
|
||||
global sectexec lib_sl libfile lazy_support
|
||||
global gdb_prompt
|
||||
|
||||
setenv DEBUGINFOD_URLS ""
|
||||
|
||||
@ -119,11 +139,18 @@ proc_with_prefix no_url { } {
|
||||
return -1
|
||||
}
|
||||
|
||||
if { [gdb_gnu_strip_debug $lib_sl ""] != 0} {
|
||||
fail "strip shlib debuginfo"
|
||||
return -1
|
||||
}
|
||||
|
||||
set debugdir [standard_output_file "debug"]
|
||||
set debuginfo [standard_output_file "fetch_src_and_symbols.debug"]
|
||||
set debuginfo_shlib [standard_output_file $libfile.sl.debug]
|
||||
|
||||
file mkdir $debugdir
|
||||
file rename -force $debuginfo $debugdir
|
||||
file rename -force $debuginfo_shlib $debugdir
|
||||
|
||||
# Test that GDB cannot find symbols without debuginfod.
|
||||
clean_restart $binfile
|
||||
@ -171,6 +198,25 @@ proc_with_prefix no_url { } {
|
||||
|
||||
clean_restart
|
||||
gdb_test "core $::corefile" ".*in ?? ().*" "file [file tail $::corefile]"
|
||||
clean_restart
|
||||
|
||||
# Check for lazy downloading support.
|
||||
gdb_test_multiple "set debuginfod enabled lazy" "check for lazy" {
|
||||
-re ".*lazy downloading is not compiled into GDB.*\n.*${gdb_prompt} $" {
|
||||
set lazy_support 0
|
||||
}
|
||||
-re ".*${gdb_prompt} $" {
|
||||
set lazy_support 1
|
||||
}
|
||||
}
|
||||
|
||||
if {$lazy_support == 1} {
|
||||
gdb_test "file $sectexec" "" "file [file tail $sectexec] file no url"
|
||||
gdb_test "start" "" "file [file tail $sectexec] start no url"
|
||||
gdb_test "info sharedlibrary" ".*Yes \\(\\*\\).*libsection.*" "lib no debug"
|
||||
} else {
|
||||
untested "lazy support no_url"
|
||||
}
|
||||
}
|
||||
|
||||
# Test that GDB prints the debuginfod URLs when loading files. URLS
|
||||
@ -208,6 +254,7 @@ proc disable_delete_breakpoints {} {
|
||||
# expected debug information.
|
||||
proc_with_prefix local_url { } {
|
||||
global binfile outputdir debugdir db
|
||||
global sectexec lib_sl libfile lazy_support
|
||||
|
||||
set url [start_debuginfod $db $debugdir]
|
||||
if { $url == "" } {
|
||||
@ -256,6 +303,17 @@ proc_with_prefix local_url { } {
|
||||
"file [file tail ${binfile}_alt.o]" \
|
||||
$enable_debuginfod_question "y"
|
||||
|
||||
if {$lazy_support == 1} {
|
||||
# GDB should now download .gdb_index.
|
||||
clean_restart
|
||||
gdb_test "set debuginfod enabled lazy" "" "set lazy urls"
|
||||
gdb_test "file $sectexec" "" "file [file tail $sectexec] file urls"
|
||||
set res ".*Download.*\.gdb_index.*libsection.*\r\nDownload.*debug info.*libsection.*"
|
||||
gdb_test "start $sectexec" $res "file [file tail $sectexec] start urls"
|
||||
} else {
|
||||
untested "lazy support urls"
|
||||
}
|
||||
|
||||
# Configure debuginfod with commands.
|
||||
unsetenv DEBUGINFOD_URLS
|
||||
clean_restart
|
||||
|
24
gdb/testsuite/gdb.debuginfod/libsection.c
Normal file
24
gdb/testsuite/gdb.debuginfod/libsection.c
Normal file
@ -0,0 +1,24 @@
|
||||
/* This testcase is part of GDB, the GNU debugger.
|
||||
|
||||
Copyright 2020-2023 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
void
|
||||
libsection_test ()
|
||||
{
|
||||
printf ("In libsection\n");
|
||||
}
|
28
gdb/testsuite/gdb.debuginfod/section.c
Normal file
28
gdb/testsuite/gdb.debuginfod/section.c
Normal file
@ -0,0 +1,28 @@
|
||||
/* This testcase is part of GDB, the GNU debugger.
|
||||
|
||||
Copyright 2020-2023 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <fcntl.h>
|
||||
|
||||
extern void libsection_test ();
|
||||
|
||||
int
|
||||
main()
|
||||
{
|
||||
(void) open ("", 0);
|
||||
libsection_test ();
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user