1# Copyright 2004, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. 2 3# This program is free software; you can redistribute it and/or modify 4# it under the terms of the GNU General Public License as published by 5# the Free Software Foundation; either version 3 of the License, or 6# (at your option) any later version. 7# 8# This program is distributed in the hope that it will be useful, 9# but WITHOUT ANY WARRANTY; without even the implied warranty of 10# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11# GNU General Public License for more details. 12# 13# You should have received a copy of the GNU General Public License 14# along with this program. If not, see <http://www.gnu.org/licenses/>. */ 15 16# Test resolving of an opaque type from the loaded shared library. 17 18if $tracelevel then { 19 strace $tracelevel 20} 21 22set testfile type-opaque-main 23set libfile type-opaque-lib 24set srcfile ${testfile}.c 25set binfile ${objdir}/${subdir}/${testfile} 26 27set libsrc "${srcdir}/${subdir}/${libfile}.c" 28set libobj "${objdir}/${subdir}/${libfile}.so" 29set execsrc "${srcdir}/${subdir}/${srcfile}" 30 31remote_exec build "rm -f ${binfile}" 32 33# Are we on a target board? No support for downloading shared libraries 34# to a target yet. 35if ![isnative] then { 36 return 0 37} 38 39# get the value of gcc_compiled 40if [get_compiler_info ${binfile}] { 41 return -1 42} 43 44if { [gdb_compile_shlib $libsrc $libobj {debug}] != "" 45 || [gdb_compile $execsrc ${binfile} executable \ 46 [list debug shlib=${libobj}]] != "" } { 47 return -1 48} 49 50gdb_exit 51gdb_start 52gdb_reinitialize_dir $srcdir/$subdir 53gdb_load ${binfile} 54 55if ![runto_main] then { 56 fail "Can't run to main" 57 return 0 58} 59 60 61# DWARF3: An incomplete structure, union or class type is represented by 62# a structure, union or class entry that does not have a byte size attribute 63# and that has a DW_AT_declaration attribute. 64 65 66proc body { struct } { 67 global gdb_prompt 68 69 70 # <1><15f>: Abbrev Number: 8 (DW_TAG_structure_type) 71 # DW_AT_name : libtype_opaque 72 # DW_AT_declaration : 1 73 74 set name "opaque $struct type resolving" 75 gdb_test_multiple "ptype pointer_${struct}_opaque" $name \ 76 { 77 -re "libfield_opaque.*$gdb_prompt $" { 78 pass $name 79 } 80 } 81 82 83 # <1><9e>: Abbrev Number: 2 (DW_TAG_structure_type) 84 # DW_AT_name : libtype_empty 85 # DW_AT_byte_size : 0 86 # DW_AT_decl_file : 1 87 # DW_AT_decl_line : 25 88 89 set name "empty $struct type resolving" 90 gdb_test_multiple "ptype pointer_${struct}_empty" $name \ 91 { 92 -re "\\{\[ \t\r\n\]*<no data fields>\[ \t\r\n\]*\\}.*$gdb_prompt $" { 93 pass $name 94 } 95 -re "libfield_empty.*$gdb_prompt $" { 96 fail $name 97 } 98 } 99 100 101 # <1><b0>: Abbrev Number: 3 (DW_TAG_structure_type) 102 # DW_AT_sibling : <e3> 103 # DW_AT_name : libtype_filled 104 # DW_AT_byte_size : 4 105 # DW_AT_decl_file : 1 106 # DW_AT_decl_line : 29 107 # <2><c7>: Abbrev Number: 4 (DW_TAG_member) 108 # DW_AT_name : mainfield_filled 109 # DW_AT_decl_file : 1 110 # DW_AT_decl_line : 30 111 # DW_AT_type : <e3> 112 # DW_AT_data_member_location: 2 byte block: 23 0 (DW_OP_plus_uconst: 0) 113 114 set name "filled $struct type resolving" 115 gdb_test_multiple "ptype pointer_${struct}_filled" $name \ 116 { 117 -re "mainfield_filled.*$gdb_prompt $" { 118 pass $name 119 } 120 -re "libfield_filled.*$gdb_prompt $" { 121 fail $name 122 } 123 } 124 125 126} 127 128 129body struct 130body union 131