# Copyright 2020-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Test support for non-byte-sized integer base types. load_lib dwarf.exp # This test can only be run on targets which support DWARF-2 and use gas. if {![dwarf2_support]} { return 0 } standard_testfile .c .S set executable ${testfile} set asm_file [standard_output_file ${srcfile2}] if [prepare_for_testing "failed to prepare" ${testfile} ${srcfile}] { return -1 } # Create the DWARF. Dwarf::assemble ${asm_file} { cu {} { DW_TAG_compile_unit { {DW_AT_language @DW_LANG_C_plus_plus} } { declare_labels i7_type u1_type u17_type u31_type \ u31_1_type u32_0_type u0_0_type be30_1_type i7_type: DW_TAG_base_type { {DW_AT_encoding @DW_ATE_signed} {DW_AT_endianity @DW_END_little} {DW_AT_name "i7"} {DW_AT_byte_size 2 DW_FORM_udata} {DW_AT_bit_size 7 DW_FORM_udata} } DW_TAG_variable { {DW_AT_name "v_i16_m1"} {DW_AT_type :${i7_type}} {DW_AT_external 1 DW_FORM_flag} {DW_AT_location {DW_OP_addr [gdb_target_symbol "i16_m1"]} SPECIAL_expr} } u1_type: DW_TAG_base_type { {DW_AT_encoding @DW_ATE_boolean} {DW_AT_endianity @DW_END_little} {DW_AT_name "u1"} {DW_AT_byte_size 2 DW_FORM_udata} {DW_AT_bit_size 1 DW_FORM_udata} {DW_AT_data_bit_offset 2 DW_FORM_udata} } DW_TAG_variable { {DW_AT_name "v_u16_1"} {DW_AT_type :${u1_type}} {DW_AT_external 1 DW_FORM_flag} {DW_AT_location {DW_OP_addr [gdb_target_symbol "u16_1"]} SPECIAL_expr} } u17_type: DW_TAG_base_type { {DW_AT_encoding @DW_ATE_signed} {DW_AT_endianity @DW_END_little} {DW_AT_name "u17"} {DW_AT_byte_size 4 DW_FORM_udata} {DW_AT_bit_size 17 DW_FORM_udata} } DW_TAG_variable { {DW_AT_name "v_u32_m2"} {DW_AT_type :${u17_type}} {DW_AT_external 1 DW_FORM_flag} {DW_AT_location {DW_OP_addr [gdb_target_symbol "u32_m2"]} SPECIAL_expr} } u31_type: DW_TAG_base_type { {DW_AT_encoding @DW_ATE_unsigned} {DW_AT_endianity @DW_END_little} {DW_AT_name "u31"} {DW_AT_byte_size 4 DW_FORM_udata} {DW_AT_bit_size 31 DW_FORM_udata} } DW_TAG_variable { {DW_AT_name "v_u32_1"} {DW_AT_type :${u31_type}} {DW_AT_external 1 DW_FORM_flag} {DW_AT_location {DW_OP_addr [gdb_target_symbol "u32_1"]} SPECIAL_expr} } u31_1_type: DW_TAG_base_type { {DW_AT_encoding @DW_ATE_unsigned} {DW_AT_endianity @DW_END_little} {DW_AT_name "u31_1"} {DW_AT_byte_size 4 DW_FORM_udata} {DW_AT_bit_size 31 DW_FORM_udata} {DW_AT_data_bit_offset 1 DW_FORM_udata} } DW_TAG_variable { {DW_AT_name "v_u32_1_off"} {DW_AT_type :${u31_1_type}} {DW_AT_external 1 DW_FORM_flag} {DW_AT_location {DW_OP_addr [gdb_target_symbol "u32_1_off"]} SPECIAL_expr} } be30_1_type: DW_TAG_base_type { {DW_AT_encoding @DW_ATE_unsigned} {DW_AT_endianity @DW_END_big} {DW_AT_name "be30_1"} {DW_AT_byte_size 4 DW_FORM_udata} {DW_AT_bit_size 30 DW_FORM_udata} {DW_AT_data_bit_offset 1 DW_FORM_udata} } DW_TAG_variable { {DW_AT_name "v_be30_1_off"} {DW_AT_type :${be30_1_type}} {DW_AT_external 1 DW_FORM_flag} {DW_AT_location {DW_OP_addr [gdb_target_symbol "be30_1_off"]} SPECIAL_expr} } u32_0_type: DW_TAG_base_type { {DW_AT_encoding @DW_ATE_unsigned} {DW_AT_endianity @DW_END_little} {DW_AT_name "u32_0"} {DW_AT_byte_size 4 DW_FORM_udata} {DW_AT_bit_size 0 DW_FORM_udata} } DW_TAG_variable { {DW_AT_name "v_u32_0"} {DW_AT_type :${u32_0_type}} {DW_AT_external 1 DW_FORM_flag} {DW_AT_location {DW_OP_addr [gdb_target_symbol "u32_0"]} SPECIAL_expr} } u0_0_type: DW_TAG_base_type { {DW_AT_encoding @DW_ATE_unsigned} {DW_AT_endianity @DW_END_little} {DW_AT_name "u0_0"} {DW_AT_byte_size 0 DW_FORM_udata} } DW_TAG_variable { {DW_AT_name "v_u0_0"} {DW_AT_type :${u0_0_type}} {DW_AT_external 1 DW_FORM_flag} {DW_AT_location {DW_OP_addr [gdb_target_symbol "u32_0"]} SPECIAL_expr} } } } } if {[prepare_for_testing "failed to prepare" ${executable} \ [list ${asm_file} ${srcfile}] {}]} { return -1 } if {![runto_main]} { return -1 } gdb_test "print v_i16_m1" "= -1" gdb_test "print v_u16_1" "= true" gdb_test "print v_u32_m2" "= -2" gdb_test "print v_u32_1" "= 1" gdb_test "print v_u32_0" "= 0" gdb_test "print v_u0_0" "= 0" gdb_test "print v_i16_m1 = 7" "= 7" gdb_test "print v_i16_m1" "= 7" "print v_i16_m1 after assignment" gdb_test "print v_u32_1_off" "= 1" gdb_test "print v_u32_1_off = 7" " = 7" gdb_test "x/4xb &v_u32_1_off" ":\t0x0e\t0x00\t0x00\t0x00" gdb_test "print v_be30_1_off" "= 1" gdb_test "print v_be30_1_off = 7" " = 7" gdb_test "x/4xb &v_be30_1_off" ":\t0x00\t0x00\t0x00\t0x0e"