# Copyright 2011-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/>.
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 [is_ilp32_target] {
    set ptrbits 32
} else {
    set ptrbits 64
}

if { [prepare_for_testing "failed to prepare" ${testfile} \
	  [list $srcfile $srcfile2] \
	  [list nodebug additional_flags=-DPTRBITS=$ptrbits]] } {
    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.
# Note that info functions gives the FUNC_lang result using the fortran syntax
# as specified in dw-case-insensitive-debug.S DW_AT_language.
gdb_test "info functions fUnC_lang" \
	 "All functions matching regular expression \"fUnC_lang\":\[\r\n\]+File file1.txt:\r\n\tfoo 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"
}
