# Copyright 2010-2020 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] {
    fail "can't run to 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"

# 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 symbol \"_r_debug\" in current context\\.|Attempt to extract a component of a value that is not a structure pointer\\.)\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"
