# Copyright 2007, 2008, 2009, 2010, 2011 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  
}

if { [prepare_for_testing dw2-noloc.exp "dw2-noloc" {dw2-noloc-main.c dw2-noloc.S} {nodebug}] } {
    return -1
}

# Symbols have the form: {file,main}_loc{addr,empty,no}_{,un}resolvable
# file: Symbol DIE is placed in DW_TAG_compile_unit.
# main: Symbol DIE is placed in DW_TAG_subprogram.
# locaddr: DW_AT_location is using DW_FORM_block DW_OP_addr <addr>.
# locempty: DW_AT_location has zero DW_FORM_block size.
# locno: DW_AT_location is not present.
# resolvable: .symtab entry exists for this symbol name.
# unresolvable: .symtab entry does not exist for this symbol name.
# DW_AT_declaration is not present in any of these DIEs.

proc file_symbols {type} {
    global pf_prefix
    set old_prefix $pf_prefix
    lappend pf_prefix "$type:"

    global gdb_prompt

    gdb_test "print file_locaddr_resolvable" "= 1234567890"
    gdb_test "ptype file_locaddr_resolvable" "type = int"

    gdb_test "print file_locaddr_unresolvable" "= 1234567890"
    gdb_test "ptype file_locaddr_unresolvable" "type = int"

    gdb_test "print file_locempty_resolvable" "= <optimized out>"
    gdb_test "ptype file_locempty_resolvable" "type = int"

    gdb_test "print file_locempty_unresolvable" "= <optimized out>"
    gdb_test "ptype file_locempty_unresolvable" "type = int"

    gdb_test "print file_locno_resolvable" "= <optimized out>"
    gdb_test "ptype file_locno_resolvable" "type = int"

    gdb_test "print file_locno_unresolvable" "= <optimized out>"
    gdb_test "ptype file_locno_unresolvable" "type = int"

    gdb_test "print file_extern_locaddr_resolvable" "= 1234567890"
    gdb_test "ptype file_extern_locaddr_resolvable" "type = int"

    gdb_test "print file_extern_locaddr_unresolvable" "= 1234567890"
    gdb_test "ptype file_extern_locaddr_unresolvable" "type = int"

    gdb_test "print file_extern_locempty_resolvable" "= <optimized out>"
    gdb_test "ptype file_extern_locempty_resolvable" "type = int"

    gdb_test "print file_extern_locempty_unresolvable" "= <optimized out>"
    gdb_test "ptype file_extern_locempty_unresolvable" "type = int"

    gdb_test "print file_extern_locno_resolvable" "= 1234567890"
    gdb_test "ptype file_extern_locno_resolvable" "type = int"

    # `print file_extern_locno_unresolvable' currently prints
    # Address of symbol "file_extern_locno_unresolvable" is unknown.
    # As DW_AT_declaration is not present in this DIE
    # it should print <optimized out>.  As usefulness of such DIE is not
    # clear its resolution is not being tested.

    set pf_prefix $old_prefix
}

file_symbols no-run

if ![runto_main] {
    return -1
}

file_symbols in-main


gdb_test "print main_local_locaddr_resolvable" "= 1234567890"
gdb_test "ptype main_local_locaddr_resolvable" "type = int"

gdb_test "print main_local_locaddr_unresolvable" "= 1234567890"
gdb_test "ptype main_local_locaddr_unresolvable" "type = int"

gdb_test "print main_local_locempty_resolvable" "= <optimized out>"
gdb_test "ptype main_local_locempty_resolvable" "type = int"

gdb_test "print main_local_locempty_unresolvable" "= <optimized out>"
gdb_test "ptype main_local_locempty_unresolvable" "type = int"

gdb_test "print main_local_locno_resolvable" "= <optimized out>"
gdb_test "ptype main_local_locno_resolvable" "type = int"

gdb_test "print main_local_locno_unresolvable" "= <optimized out>"
gdb_test "ptype main_local_locno_unresolvable" "type = int"

gdb_test "print main_extern_locaddr_resolvable" "= 1234567890"
gdb_test "ptype main_extern_locaddr_resolvable" "type = int"

gdb_test "print main_extern_locaddr_unresolvable" "= 1234567890"
gdb_test "ptype main_extern_locaddr_unresolvable" "type = int"

gdb_test "print main_extern_locempty_resolvable" "= <optimized out>"
gdb_test "ptype main_extern_locempty_resolvable" "type = int"

gdb_test "print main_extern_locempty_unresolvable" "= <optimized out>"
gdb_test "ptype main_extern_locempty_unresolvable" "type = int"

gdb_test "print main_extern_locno_resolvable" "= 1234567890"
gdb_test "ptype main_extern_locno_resolvable" "type = int"

# For `main_extern_locno_unresolvable' see `file_extern_locno_unresolvable'.
