1# Copyright 2017-2020 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/>. 15load_lib dwarf.exp 16 17# This test can only be run on targets which support DWARF-2 and use gas. 18if {![dwarf2_support]} { 19 return 0 20} 21 22standard_testfile ada-valprint-error.c ada-valprint-error-dw.S 23 24# We need to know the size of integer and address types in order 25# to write some of the debugging info we'd like to generate. 26# 27# For that, we ask GDB by debugging our ada-valprint-error.c program. 28# Any program would do, but since we already have ada-valprint-error.c 29# specifically for this testcase, might as well use that. 30 31if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile}] } { 32 untested ${testfile}.exp 33 return -1 34} 35 36# Make some DWARF for the test. 37set asm_file [standard_output_file $srcfile2] 38Dwarf::assemble $asm_file { 39 cu {} { 40 DW_TAG_compile_unit { 41 {DW_AT_language @DW_LANG_Ada95} 42 {DW_AT_name fd.adb} 43 {DW_AT_comp_dir /tmp} 44 } { 45 declare_labels array_elt_label integer_label array_label \ 46 typedef_label ref_type_label 47 set ptr_size [get_sizeof "void *" 96] 48 set int_size [get_sizeof "int" 4] 49 50 # A structure with no size attribute, to mimick structures 51 # in Ada that have a dynamic size... 52 array_elt_label: structure_type { 53 {name fd__Tints_doubledC} 54 {artificial 1 DW_FORM_flag_present} 55 } 56 57 # ... and a corresponding XVZ variable, supposed to be there 58 # to provide the actual size. Except that, in this case, 59 # the variable has no address, to simulate the fact that 60 # it has been optimized out (which the compiler can do, 61 # even if it at the expense of debuggability). 62 DW_TAG_variable { 63 {name fd__Tints_doubledC___XVZ} 64 {DW_AT_type :$integer_label} 65 {artificial 1 DW_FORM_flag_present} 66 } 67 68 integer_label: DW_TAG_base_type { 69 {DW_AT_byte_size $int_size DW_FORM_sdata} 70 {DW_AT_encoding @DW_ATE_signed} 71 {DW_AT_name integer} 72 } 73 74 array_label: DW_TAG_array_type { 75 {DW_AT_name fd__ints_doubled} 76 {DW_AT_type :$array_elt_label} 77 } { 78 DW_TAG_subrange_type { 79 {DW_AT_type :$integer_label} 80 {DW_AT_upper_bound 2 DW_FORM_data1} 81 } 82 } 83 84 typedef_label: DW_TAG_typedef { 85 {DW_AT_name fd__ints_doubled} 86 {DW_AT_type :$array_label} 87 } 88 89 ref_type_label: DW_TAG_reference_type { 90 {DW_AT_byte_size $ptr_size DW_FORM_sdata} 91 {DW_AT_type :$typedef_label} 92 } 93 94 DW_TAG_variable { 95 {name fd__global} 96 {DW_AT_type :$ref_type_label} 97 {DW_AT_location { 98 DW_OP_addr [gdb_target_symbol fd__global] 99 } SPECIAL_expr} 100 {external 1 flag} 101 } 102 103 } 104 } 105} 106 107if { [prepare_for_testing ${testfile}.exp ${testfile} \ 108 [list $srcfile $asm_file] {nodebug}] } { 109 return -1 110} 111 112gdb_test_no_output "set language ada" 113 114gdb_test "print fd.global" \ 115 " = <error reading variable: unable to read value of fd__Tints_doubledC___XVZ \\(value has been optimized out\\)>" 116