# Copyright 2018-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/>.

# This file is part of the gdb testsuite.  It is intended to test that
# gdb can correctly print an ada symbol with linkage name before and after
# symtab expansion.

standard_testfile c-linkage-name.c c-linkage-name-2.c

set sources "${srcdir}/${subdir}/${srcfile} ${srcdir}/${subdir}/${srcfile2}"
if { [gdb_compile "${sources}" "${binfile}" executable {debug}] != "" } {
    untested "failed to compile"
    return -1
}

clean_restart
gdb_test_no_output "set language c"
gdb_load ${binfile}
set readnow [readnow]

set test "verify no symtab expansion"
if { $readnow } {
    unsupported $test
} else {
    # Verify that symtab expansion has not taken place.

    gdb_test_no_output "maint info symtabs" $test
}

set test "print symada__cS before partial symtab expansion"
if { $readnow } {
    unsupported $test
} else {
    # Try to print MUNDANE, but using its linkage name.

    gdb_test "print symada__cS" \
	" = {a = 100829103}" \
	"print symada__cS before partial symtab expansion"
}

# Force the symbols to be expanded for the unit that contains
# our symada__cS symbol by, e.g. inserting a breakpoint on one
# of the founction also provided by the same using.

gdb_test "break do_something_other_cu" \
         "Breakpoint $decimal at $hex: file .*$srcfile2, line $decimal\\."

# Verify that partial symtab expansion has taken place for
# c-linkage-name-2.c.

gdb_test "maint info symtabs" "\{ symtab \[^\r\n\]*c-linkage-name-2.c.*"

# Flush the symbol cache to prevent the lookup to return the same as before.

gdb_test "maint flush symbol-cache"

# Try to print MUNDANE using its linkage name again, after partial
# symtab expansion.

gdb_test "print symada__cS" \
         " = {a = 100829103}" \
         "print symada__cS after partial symtab expansion"
