binutils-gdb/gdb/testsuite/gdb.dwarf2/dw2-fixed-point.exp
Andrew Burgess 1d506c26d9 Update copyright year range in header of all files managed by GDB
This commit is the result of the following actions:

  - Running gdb/copyright.py to update all of the copyright headers to
    include 2024,

  - Manually updating a few files the copyright.py script told me to
    update, these files had copyright headers embedded within the
    file,

  - Regenerating gdbsupport/Makefile.in to refresh it's copyright
    date,

  - Using grep to find other files that still mentioned 2023.  If
    these files were updated last year from 2022 to 2023 then I've
    updated them this year to 2024.

I'm sure I've probably missed some dates.  Feel free to fix them up as
you spot them.
2024-01-12 15:49:57 +00:00

317 lines
8.7 KiB
Text

# Copyright 2016-2024 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 <http://www.gnu.org/licenses/>.
load_lib dwarf.exp
# This test can only be run on targets which support DWARF-2 and use gas.
require dwarf2_support
standard_testfile dw2-fixed-point.c dw2-fixed-point-dw.S
# Make some DWARF for the test.
set asm_file [standard_output_file $srcfile2]
Dwarf::assemble $asm_file {
cu {} {
DW_TAG_compile_unit {
{DW_AT_language @DW_LANG_Ada95}
{DW_AT_name pck.ads}
{DW_AT_comp_dir /tmp}
} {
declare_labels fp1_base_type fp2_base_type fp3_small \
fp3_base_type fp1_range_type
fp1_base_type: DW_TAG_base_type {
{DW_AT_byte_size 1 DW_FORM_sdata}
{DW_AT_encoding @DW_ATE_signed_fixed}
{DW_AT_name pck__fp1_type}
{DW_AT_binary_scale -4 DW_FORM_sdata}
}
DW_TAG_variable {
{DW_AT_name pck__fp1_var}
{DW_AT_type :$fp1_base_type}
{DW_AT_location {
DW_OP_addr [gdb_target_symbol pck__fp1_var]
} SPECIAL_expr}
{external 1 flag}
}
DW_TAG_variable {
{DW_AT_name pck__fp1_var2}
{DW_AT_type :$fp1_base_type}
{DW_AT_location {
DW_OP_addr [gdb_target_symbol pck__fp1_var2]
} SPECIAL_expr}
{external 1 flag}
}
fp2_base_type: DW_TAG_base_type {
{DW_AT_byte_size 1 DW_FORM_sdata}
{DW_AT_encoding @DW_ATE_signed_fixed}
{DW_AT_name pck__fp2_type}
{DW_AT_decimal_scale -2 DW_FORM_sdata}
}
DW_TAG_variable {
{DW_AT_name pck__fp2_var}
{DW_AT_type :$fp2_base_type}
{DW_AT_location {
DW_OP_addr [gdb_target_symbol pck__fp2_var]
} SPECIAL_expr}
{external 1 flag}
}
fp3_small: DW_TAG_constant {
{DW_AT_GNU_numerator 1 DW_FORM_data1}
{DW_AT_GNU_denominator 30 DW_FORM_sdata}
}
fp3_base_type: DW_TAG_base_type {
{DW_AT_byte_size 1 DW_FORM_sdata}
{DW_AT_encoding @DW_ATE_signed_fixed}
{DW_AT_name pck__fp3_type}
{DW_AT_small :$fp3_small}
}
DW_TAG_variable {
{DW_AT_name pck__fp3_var}
{DW_AT_type :$fp3_base_type}
{DW_AT_location {
DW_OP_addr [gdb_target_symbol pck__fp3_var]
} SPECIAL_expr}
{external 1 flag}
}
fp1_range_type: DW_TAG_subrange_type {
{DW_AT_lower_bound 0xf0 DW_FORM_data1}
{DW_AT_upper_bound 0x10 DW_FORM_data1}
{DW_AT_name foo__fp1_range_type}
{DW_AT_type :$fp1_base_type}
}
DW_TAG_variable {
{DW_AT_name pck__fp1_range_var}
{DW_AT_type :$fp1_range_type}
{DW_AT_location {
DW_OP_addr [gdb_target_symbol pck__fp1_range_var]
} SPECIAL_expr}
{external 1 flag}
}
}
}
}
if { [prepare_for_testing ${testfile}.exp ${testfile} \
[list $srcfile $asm_file] {nodebug}] } {
return -1
}
if ![runto_main] {
return -1
}
# Do the testing in Ada mode, since this is the language for which
# this feature has been implemented, and where we know the language
# has the concept of fixed-point types.
gdb_test_no_output "set lang ada"
gdb_test "print pck.fp1_var" \
" = 0.25"
gdb_test "print /x pck.fp1_var" \
" = 0x0"
gdb_test "print pck.fp2_var" \
" = -0.01"
gdb_test "print /x pck.fp2_var" \
" = 0x0"
gdb_test "print pck.fp3_var" \
" = 0.1"
gdb_test "print /x pck.fp3_var" \
" = 0x0"
gdb_test "print pck.fp1_range_var" \
" = 1"
gdb_test "print /x pck.fp1_range_var" \
" = 0x1"
gdb_test "print pck.fp1_var + 0.25" \
" = 0.5"
gdb_test "print pck.fp2_var - pck.fp2_var" \
" = 0"
gdb_test "print pck.fp3_var * 1" \
" = 0.1"
gdb_test "print pck.fp3_var / pck.fp3_var" \
" = 1"
gdb_test "print pck.fp3_var / 0" \
"Division by zero"
gdb_test "print pck.fp1_range_var - 0.5" \
" = 0.5"
gdb_test "print -pck.fp1_var" \
" = -0.25"
gdb_test "print pck.fp1_var = pck.fp1_var" \
" = true"
gdb_test "print pck.fp1_var = pck.fp1_var2" \
" = false"
gdb_test "print pck.fp1_var /= pck.fp1_var" \
" = false"
gdb_test "print pck.fp1_var /= pck.fp1_var2" \
" = true"
gdb_test "print pck.fp1_var < pck.fp1_var" \
" = false"
gdb_test "print pck.fp1_var < pck.fp1_var2" \
" = true"
gdb_test "print pck.fp1_var <= pck.fp1_var2" \
" = true"
gdb_test "print pck.fp1_var <= pck.fp1_var" \
" = true"
gdb_test "print pck.fp1_var > pck.fp1_var2" \
" = false"
gdb_test "print pck.fp1_var2 > pck.fp1_var" \
" = true"
gdb_test "print pck.fp1_var >= pck.fp1_var" \
" = true"
gdb_test "print pck.fp1_var >= pck.fp1_var2" \
" = false"
# Same as above, but with litterals...
gdb_test "print pck.fp1_var = 0.25" \
" = true"
gdb_test "print pck.fp1_var = 0.5" \
" = false"
gdb_test "print pck.fp1_var = 1" \
" = false"
gdb_test "print pck.fp1_var /= 0.25" \
" = false"
gdb_test "print pck.fp1_var /= 0.5" \
" = true"
gdb_test "print pck.fp1_var /= 1" \
" = true"
gdb_test "print pck.fp1_var < 0.25" \
" = false"
gdb_test "print pck.fp1_var < 0.5" \
" = true"
gdb_test "print pck.fp1_var < 1" \
" = true"
gdb_test "print pck.fp1_var <= 0.25" \
" = true"
gdb_test "print pck.fp1_var <= 0.5" \
" = true"
gdb_test "print pck.fp1_var <= 1" \
" = true"
gdb_test "print pck.fp1_var > 0.25" \
" = false"
gdb_test "print pck.fp1_var > 0.5" \
" = false"
gdb_test "print pck.fp1_var > 1" \
" = false"
gdb_test "print pck.fp1_var >= 0.25" \
" = true"
gdb_test "print pck.fp1_var >= 0.5" \
" = false"
gdb_test "print pck.fp1_var >= 1" \
" = false"
# Set the language to LANG and do a ptype test on pck__fp1_var,
# pck__fp2_var and pck__fp3_var, verifying that the output matches
# FP1_RE, FP2_RE, FP2_RE (resp.).
proc do_ptype_test {lang fp1_re fp2_re fp3_re fp1_range_re} {
with_test_prefix "lang=$lang" {
gdb_test_no_output "set language $lang" \
"set language to $lang for ptype test"
gdb_test "ptype pck__fp1_var" $fp1_re
gdb_test "ptype pck__fp2_var" $fp2_re
gdb_test "ptype pck__fp3_var" $fp3_re
gdb_test "ptype pck__fp1_range_var" $fp1_range_re
}
}
do_ptype_test "ada" \
" = <1-byte fixed point \\(small = 1/16\\)>" \
" = <1-byte fixed point \\(small = 1/100\\)>" \
" = <1-byte fixed point \\(small = 1/30\\)>" \
" = <1-byte fixed point \\(small = 1/16\\)>"
foreach lang [list "c" "d" "go" "objective-c" "opencl" ] {
do_ptype_test $lang \
" = 1-byte fixed point \\(small = 1/16\\)" \
" = 1-byte fixed point \\(small = 1/100\\)" \
" = 1-byte fixed point \\(small = 1/30\\)" \
" = <range type>"
}
do_ptype_test "fortran" \
" = pck__fp1_type" \
" = pck__fp2_type" \
" = pck__fp3_type" \
" = <range type>"
do_ptype_test "modula-2" \
" = pck__fp1_type" \
" = pck__fp2_type" \
" = pck__fp3_type" \
" = \\\[1-byte fixed point \\(small = 1/16\\)\\.\\.1-byte fixed point \\(small = 1/16\\)\\\]"
do_ptype_test "pascal" \
" = pck__fp1_type" \
" = pck__fp2_type" \
" = pck__fp3_type" \
" = 1-byte fixed point \\(small = 1/16\\)\\.\\.1-byte fixed point \\(small = 1/16\\)"