forked from Imagelibrary/binutils-gdb
This commit brings all the changes made by running gdb/copyright.py as per GDB's Start of New Year Procedure. For the avoidance of doubt, all changes in this commits were performed by the script.
91 lines
2.7 KiB
Plaintext
91 lines
2.7 KiB
Plaintext
# Copyright 2010-2022 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/>.
|
|
|
|
if {[skip_shlib_tests]} {
|
|
return 0
|
|
}
|
|
|
|
if {[is_remote target]} {
|
|
# gdbserver prints the warning message but expect is parsing only the GDB
|
|
# output, not the gdbserver output.
|
|
return 0
|
|
}
|
|
|
|
set testfile "solib-corrupted"
|
|
set srcfile start.c
|
|
|
|
if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile}] } {
|
|
return -1
|
|
}
|
|
|
|
if ![runto_main] {
|
|
return
|
|
}
|
|
|
|
# With probes interface GDB no longer scans the inferior library list so its
|
|
# corruption cannot be tested. There is no way to disable the probes
|
|
# interface.
|
|
|
|
set probes { init_start init_complete map_start reloc_complete unmap_start
|
|
unmap_complete }
|
|
set test "info probes"
|
|
gdb_test_multiple $test $test {
|
|
-re "^stap\[ \t\]+rtld\[ \t\]+(?:rtld_)?(\[a-z_\]+)\[ \t\]" {
|
|
set idx [lsearch -exact $probes $expect_out(1,string)]
|
|
if { $idx >= 0 } {
|
|
set probes [lreplace $probes $idx $idx]
|
|
}
|
|
exp_continue
|
|
}
|
|
-re "^\[^\r\n\]*\r\n" {
|
|
exp_continue
|
|
}
|
|
-re "^$gdb_prompt $" {
|
|
}
|
|
}
|
|
if { [llength $probes] == 0 } {
|
|
xfail $test
|
|
untested "GDB is using probes"
|
|
return
|
|
}
|
|
|
|
gdb_test "info sharedlibrary" "From * To .*" "normal list"
|
|
|
|
set no_glibc_debuginfo_re1 "No symbol \"_r_debug\" in current context\\."
|
|
set no_glibc_debuginfo_re2 \
|
|
[concat \
|
|
"Attempt to extract a component of a value that is not a structure" \
|
|
" pointer\\."]
|
|
set no_glibc_debuginfo_re3 \
|
|
"'_r_debug' has unknown type; cast it to its declared type"
|
|
set no_glibc_debuginfo_re \
|
|
"($no_glibc_debuginfo_re1|$no_glibc_debuginfo_re2|$no_glibc_debuginfo_re3)"
|
|
|
|
# GDB checks there for matching L_PREV.
|
|
set test "make solibs looping"
|
|
gdb_test_multiple "p/x _r_debug->r_map->l_next = _r_debug->r_map" $test {
|
|
-re "$no_glibc_debuginfo_re\r\n$gdb_prompt $" {
|
|
# glibc debug info is not available and it is too difficult to find and
|
|
# parse it from this testcase without the gdb supporting functions.
|
|
xfail $test
|
|
untested "no _r_debug symbol has been found"
|
|
return
|
|
}
|
|
-re " = 0x\[0-9a-f\]+\r\n$gdb_prompt $" {
|
|
pass $test
|
|
}
|
|
}
|
|
gdb_test "info sharedlibrary" "warning: Corrupted shared library list: .*" "corrupted list"
|