# Copyright 2010, 2011 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 ${testfile}.exp ${testfile} ${srcfile}] } {
    untested ${testfile}.exp
    return -1
}

if ![runto_main] {
    fail "Can't run to main"
    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.
	verbose -log "no _r_debug symbol has been found"
	xfail $test
	untested ${testfile}.exp
	return
    }
    -re " = 0x\[0-9a-f\]+\r\n$gdb_prompt $" {
	pass $test
    }
}
gdb_test "info sharedlibrary" "warning: Corrupted shared library list: .*" "corrupted list"
