1 # Copyright 2016-2024 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 printing a bitfield of an optimized-out variable. Regression 17 # test for PR gdb/20295. 18 19 load_lib dwarf.exp 20 21 # This test can only be run on targets which support DWARF-2 and use gas. 22 require dwarf2_support 23 24 standard_testfile main.c .S 25 set executable ${testfile} 26 27 # Make some DWARF for the test. 28 set asm_file [standard_output_file $srcfile2] 29 Dwarf::assemble $asm_file { 30 cu { version 3 addr_size 4 } { 31 compile_unit {} { 32 declare_labels struct_label var_label int_label 33 34 int_label: base_type { 35 {byte_size 4 sdata} 36 {encoding @DW_ATE_signed} 37 {name int} 38 } 39 40 struct_label: structure_type { 41 {name S} 42 {byte_size 8 DW_FORM_sdata} 43 } { 44 member { 45 {name bitfield} 46 {type :$int_label} 47 {bit_size 12 DW_FORM_sdata} 48 {bit_offset 20 DW_FORM_sdata} 49 } 50 member { 51 {name intfield} 52 {type :$int_label} 53 {data_member_location 4 DW_FORM_sdata} 54 } 55 } 56 57 subprogram { 58 {MACRO_AT_func { main }} 59 {type :$int_label} 60 {external 1 flag} 61 } { 62 var_label: DW_TAG_variable { 63 {name var} 64 {location {} DW_FORM_block1} 65 {type :$struct_label} 66 } 67 } 68 } 69 } 70 } 71 72 if [prepare_for_testing "failed to prepare" $executable "${asm_file} ${srcfile}" {}] { 73 return -1 74 } 75 76 if ![runto_main] { 77 return -1 78 } 79 80 gdb_test "p var" " = <optimized out>" 81 gdb_test "p var.bitfield" " = <optimized out>" 82 gdb_test "p var.intfield" " = <optimized out>" 83