# Copyright 2004-2005, 2007-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

# Note: Inspired from dw2-basic.exp.

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

standard_testfile .S

if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" object {nodebug}] != "" } {
    return -1
}

clean_restart ${testfile}

# Verify that -file-list-exec-source-files returns a list where
# the "file" is "file1.txt" (file base name), and "fullname" is
# the full path to that file.  What we want to verify, most of all,
# is that the file and fullname fields are now inverted.
gdb_test "interpreter-exec mi -file-list-exec-source-files" \
         ".*{file=\"file1\\.txt\",fullname=\".+file1\\.txt\"}.*"

# And `info sources' should return the fullname incl. the directories.
gdb_test "info sources" {[/\\]file1\.txt}
