]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blobdiff - gdb/testsuite/gdb.dwarf2/dw2-noloc.exp
Update copyright year range in all GDB files
[thirdparty/binutils-gdb.git] / gdb / testsuite / gdb.dwarf2 / dw2-noloc.exp
index e16cbfd6c05071b7709c5d2f022c02fd9419adb1..b23a4caf9fc24875f8f0613749e7021fe33ac7d5 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright 2007, 2008, 2009 Free Software Foundation, Inc.
+# Copyright 2007-2018 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
 #
 # 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.
-# For now pick a sampling of likely targets.
-if {![istarget *-*-linux*]
-    && ![istarget *-*-gnu*]
-    && ![istarget *-*-elf*]
-    && ![istarget *-*-openbsd*]
-    && ![istarget arm-*-eabi*]
-    && ![istarget powerpc-*-eabi*]} {
+if {![dwarf2_support]} {
     return 0  
 }
 
-set testfile "dw2-noloc"
-set srcfile ${testfile}.S
-set binfile ${objdir}/${subdir}/${testfile}.x
-
-if  { [gdb_compile "${srcdir}/${subdir}/main.c" "main.o" object {debug}] != "" } {
+if { [prepare_for_testing "failed to prepare" "dw2-noloc" {dw2-noloc-main.c dw2-noloc.S} {nodebug}] } {
     return -1
 }
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${testfile}.o" object {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} {
+    with_test_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.
+    }
 }
 
-if  { [gdb_compile "${testfile}.o main.o" "${binfile}" executable {debug}] != "" } {
+file_symbols no-run
+
+if ![runto_main] {
     return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
+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"
 
-gdb_test "print noloc" "Address of symbol \"noloc\" is unknown." "print noloc"
+# For `main_extern_locno_unresolvable' see `file_extern_locno_unresolvable'.