1# Copyright (C) 2017-2019 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 symbol lookup when there are multiple circular imports. 17 18load_lib "d-support.exp" 19load_lib "dwarf.exp" 20 21if { [skip_d_tests] } { return -1 } 22 23# This test can only be run on targets which support DWARF-2 and use gas. 24if {![dwarf2_support]} { 25 return 0 26} 27 28standard_testfile watch-loc.c watch-loc-dw.S 29 30# Make some DWARF for the test. 31set asm_file [standard_output_file $srcfile2] 32Dwarf::assemble $asm_file { 33 global srcdir subdir srcfile 34 35 cu {} { 36 compile_unit { 37 {language @DW_LANG_D} 38 } { 39 declare_labels watch_module_label watch_struct_label 40 41 watch_module_label: module { 42 {name watch} 43 } { 44 watch_struct_label: structure_type { 45 {name tstruct} 46 {byte_size 1 data1} 47 } 48 49 tag_variable { 50 {name my_data} 51 {type :$watch_struct_label} 52 {location { 53 addr [gdb_target_symbol my_data] 54 } SPECIAL_expr} 55 {external 1 flag} 56 } 57 58 subprogram { 59 {MACRO_AT_func { "_Dmain" "${srcdir}/${subdir}/${srcfile}" }} 60 {external 1 flag_present} 61 } 62 } 63 } 64 } 65} 66 67if { [prepare_for_testing "failed to prepare" ${testfile} \ 68 [list $srcfile $asm_file] {nodebug}] } { 69 return -1 70} 71 72gdb_test_no_output "set language d" 73 74if {![runto "_Dmain"]} { 75 return -1 76} 77 78# watch -l will rewrite the expression to "*(watch.tstruct *) 0x12345", 79# this should not cause syntax error in the cast expression. 80gdb_test "watch -l my_data" ".*atchpoint \[0-9\]+: -location my_data" 81 82# Same test as above, but done explicitly. 83gdb_test "print *(watch.tstruct *) &my_data" "{<No data fields>}" 84