# Copyright 2011-2021 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 -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"
}
