# Copyright 2011-2012 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/>.
load_lib dwarf.exp

# This test can only be run on targets which support DWARF-2 and use gas.
if {![dwarf2_support]} {
    return 0  
}

standard_testfile .c dw2-case-insensitive-debug.S

if { [prepare_for_testing ${testfile}.exp ${testfile} \
	  [list $srcfile $srcfile2] {nodebug}] } {
    return -1
}

gdb_test "show case-sensitive" {Case sensitivity in name search is "auto; currently on"\.}

gdb_test "info functions fUnC_lang" \
	 "All functions matching regular expression \"fUnC_lang\":" \
	 "regexp case-sensitive on"

gdb_test "set case-sensitive off" {warning: the current case sensitivity setting does not match the language\.}

# The dot-leading symbol is for ppc64 function descriptors.
gdb_test "info functions fUnC_lang" \
	 "All functions matching regular expression \"fUnC_lang\":\[\r\n\]+File file1.txt:\r\nfoo FUNC_lang\\(void\\);(\r\n\r\nNon-debugging symbols:\r\n0x\[0-9a-f\]+ +\\.FUNC_lang)?" \
	 "regexp case-sensitive off"

gdb_test "p fuNC_lang" { = {foo \(void\)} 0x[0-9a-f]+ <FUNC_lang>}
gdb_test "p fuNC_symtab" { = {<text variable, no debug info>} 0x[0-9a-f]+ <\.?FUNC_symtab>}

if {[gdb_breakpoint "fuNC_lang"] == 1} {
    pass "setting breakpoint at fuNC_lang"
}

if {[gdb_breakpoint "fuNC_symtab"] == 1} {
    pass "setting breakpoint at fuNC_symtab"
}
