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/>. 15 16load_lib dwarf.exp 17 18# This test can only be run on targets which support DWARF-2 and use gas. 19if {![dwarf2_support]} { 20 return 0 21} 22 23standard_testfile .c formdata16-dw.S 24 25# We need to know the endianess in order 26# to write some of the debugging info we'd like to generate. 27if [prepare_for_testing "failed to prepare for endianness test" ${testfile} ${srcfile}] { 28 return -1 29} 30 31set endianness [get_endianness] 32 33set high "0x123456789abcdef0" 34set low "0x0fedcba987654321" 35if { $endianness == "big" } { 36 set pair $high,$low 37 set pair2 0x0,$low 38 set negative 0xffffffffffffffff,$low 39} else { 40 set pair $low,$high 41 set pair2 $low,0x0 42 set negative $low,0xffffffffffffffff 43} 44 45# Make some DWARF for the test. 46set asm_file [standard_output_file $srcfile2] 47Dwarf::assemble $asm_file { 48 global pair pair2 negative 49 50 cu { addr_size 4 } { 51 compile_unit {} { 52 declare_labels int_label sint_label 53 54 int_label: DW_TAG_base_type { 55 {DW_AT_byte_size 16 DW_FORM_udata} 56 {DW_AT_encoding @DW_ATE_unsigned} 57 {DW_AT_name "__uint128"} 58 } 59 60 sint_label: DW_TAG_base_type { 61 {DW_AT_byte_size 16 DW_FORM_udata} 62 {DW_AT_encoding @DW_ATE_signed} 63 {DW_AT_name "__int128"} 64 } 65 66 DW_TAG_variable { 67 {name xxx} 68 {type :$int_label} 69 {const_value $pair DW_FORM_data16} 70 } 71 72 DW_TAG_variable { 73 {name yyy} 74 {type :$int_label} 75 {const_value $pair2 DW_FORM_data16} 76 } 77 78 DW_TAG_variable { 79 {name sss} 80 {type :$sint_label} 81 {const_value $negative DW_FORM_data16} 82 } 83 } 84 } 85} 86 87if { [prepare_for_testing "failed to prepare" ${testfile} \ 88 [list $srcfile $asm_file] {nodebug}] } { 89 return -1 90} 91 92gdb_test "p/x xxx" " = 0x123456789abcdef00fedcba987654321" 93gdb_test "p xxx" "= 24197857203266734864629346612071973665" 94gdb_test "p/x yyy" " = 0xfedcba987654321" 95gdb_test "p yyy" "= 1147797409030816545" 96gdb_test "p/x sss" " = 0xffffffffffffffff0fedcba987654321" 97gdb_test "p sss" "= -17298946664678735071" 98