1# Copyright (C) 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/>. 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 cu {} { 34 compile_unit { 35 {language @DW_LANG_D} 36 } { 37 declare_labels watch_module_label watch_struct_label 38 39 watch_module_label: module { 40 {name watch} 41 } { 42 watch_struct_label: structure_type { 43 {name tstruct} 44 {byte_size 1 data1} 45 } 46 47 tag_variable { 48 {name my_data} 49 {type :$watch_struct_label} 50 {location { 51 addr [gdb_target_symbol my_data] 52 } SPECIAL_expr} 53 {external 1 flag} 54 } 55 56 subprogram { 57 {MACRO_AT_func { "_Dmain" }} 58 {external 1 flag_present} 59 } 60 } 61 } 62 } 63} 64 65if { [prepare_for_testing "failed to prepare" ${testfile} \ 66 [list $srcfile $asm_file] {nodebug}] } { 67 return -1 68} 69 70gdb_test_no_output "set language d" 71 72if {![runto "_Dmain"]} { 73 return -1 74} 75 76# watch -l will rewrite the expression to "*(watch.tstruct *) 0x12345", 77# this should not cause syntax error in the cast expression. 78gdb_test "watch -l my_data" ".*atchpoint \[0-9\]+: -location my_data" 79 80# Same test as above, but done explicitly. 81gdb_test "print *(watch.tstruct *) &my_data" "{<No data fields>}" 82