forked from Imagelibrary/binutils-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.
283 lines
10 KiB
Plaintext
283 lines
10 KiB
Plaintext
# This testcase is part of GDB, the GNU debugger.
|
|
|
|
# Copyright 1997-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/>. */
|
|
|
|
# long_long.exp Test printing of 64-bit things in 32-bit gdb.
|
|
# Also test differnet kinds of formats.
|
|
#
|
|
require {!target_info exists no_long_long}
|
|
|
|
standard_testfile .c
|
|
|
|
if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [concat debug nowarnings]] != "" } {
|
|
untested "failed to compile"
|
|
return -1
|
|
}
|
|
|
|
# use this to debug:
|
|
#log_user 1
|
|
|
|
clean_restart ${binfile}
|
|
|
|
if {![runto known_types]} {
|
|
return
|
|
}
|
|
|
|
# Detect the size of the target's basic types.
|
|
|
|
set sizeof_char [get_sizeof "char" 1]
|
|
set sizeof_short [get_sizeof "short" 2]
|
|
set sizeof_int [get_sizeof "int" 4]
|
|
set sizeof_long [get_sizeof "long" 4]
|
|
set sizeof_long_long [get_sizeof "long long" 8]
|
|
set sizeof_data_ptr [get_sizeof "void *" 4]
|
|
set sizeof_double [get_sizeof "double" 8]
|
|
set sizeof_long_double [get_sizeof "long double" 8]
|
|
|
|
# Tests to handle ISA/ABI variants
|
|
|
|
proc pat2 { n pats } {
|
|
set i 0
|
|
while { $n > 1 } {
|
|
set n [expr $n / 2]
|
|
incr i
|
|
}
|
|
return [lindex $pats $i]
|
|
}
|
|
|
|
proc gdb_test_xxx { test pat args } {
|
|
if { $pat == "" } {
|
|
setup_kfail gdb/1672 *-*-*
|
|
set pat "xxx"
|
|
}
|
|
if { [llength $args] == 1 } {
|
|
set name [lindex $args 0]
|
|
gdb_test $test $pat $name
|
|
}
|
|
|
|
gdb_test $test $pat
|
|
}
|
|
|
|
proc gdb_test_ptr { test args } {
|
|
global sizeof_data_ptr
|
|
|
|
gdb_test_xxx $test [pat2 $sizeof_data_ptr $args]
|
|
}
|
|
|
|
proc gdb_test_xptr { examine args } {
|
|
global sizeof_data_ptr
|
|
set x [pat2 $sizeof_data_ptr $args]
|
|
# X is of the form { VARIABLE PATTERN }
|
|
gdb_test_xxx "$examine [lindex $x 0]" [lindex $x 1] "$examine"
|
|
}
|
|
|
|
proc gdb_test_char { test args } {
|
|
global sizeof_char
|
|
gdb_test_xxx $test [pat2 $sizeof_char $args]
|
|
}
|
|
|
|
proc gdb_test_short { test args } {
|
|
global sizeof_short
|
|
gdb_test_xxx $test [pat2 $sizeof_short $args]
|
|
}
|
|
|
|
proc gdb_test_int { test args } {
|
|
global sizeof_int
|
|
gdb_test_xxx $test [pat2 $sizeof_int $args]
|
|
}
|
|
|
|
proc gdb_test_long { test args } {
|
|
global sizeof_long
|
|
gdb_test_xxx $test [pat2 $sizeof_long $args]
|
|
}
|
|
|
|
proc gdb_test_long_long { test args } {
|
|
global sizeof_long_long
|
|
gdb_test_xxx $test [pat2 $sizeof_long_long $args]
|
|
}
|
|
|
|
gdb_breakpoint [gdb_get_line_number "Stop here and look"]
|
|
gdb_continue_to_breakpoint "Stop here and look"
|
|
|
|
# Check the hack for long long prints.
|
|
#
|
|
gdb_test "p/x val.hex" "0x0*0" "hex print p/x"
|
|
gdb_test "p/x val.dec" "0xab54a98ceb1f0ad2" "decimal print p/x"
|
|
# see if 'p/<code>' is handled same as 'p /<code>'
|
|
#
|
|
gdb_test "p /x val.dec" "0xab54a98ceb1f0ad2" "default print val.dec"
|
|
gdb_test "p /x val.bin" "0x123456789abcdef" "default print val.bin"
|
|
gdb_test "p /x val.oct" "0xa72ee53977053977" "default print val.oct"
|
|
gdb_test "p val.hex" "= 0" "default print hex"
|
|
|
|
gdb_test "p/u val.dec" "12345678901234567890" "decimal print p/u"
|
|
gdb_test "p/t val.bin" "100100011010001010110011110001001101010111100110111101111" "binary print"
|
|
gdb_test "p/o val.oct" "01234567123456701234567" "octal print"
|
|
gdb_test "p /d val.bin" "81985529216486895" "print +ve long long"
|
|
gdb_test "p/d val.dec" "-6101065172474983726" "decimal print p/d"
|
|
|
|
# Try all the combinations to bump up coverage.
|
|
#
|
|
gdb_test "p/d val.oct" "-6399925985474168457"
|
|
gdb_test "p/u val.oct" "12046818088235383159"
|
|
gdb_test "p/o val.oct" ".*"
|
|
gdb_test "p/t val.oct" "1010011100101110111001010011100101110111000001010011100101110111"
|
|
gdb_test_ptr "p/a val.oct" "" "" "0x77053977" "0xa72ee53977053977"
|
|
gdb_test "p/c val.oct" "'w'"
|
|
|
|
if { $sizeof_double == 8 || $sizeof_long_double == 8 } {
|
|
# ARM FPA floating point numbers are not strictly little endian or big
|
|
# endian, but a hybrid. They are in little endian format with the two
|
|
# words swapped in big endian format.
|
|
# EABI targets default to natural-endian VFP format.
|
|
|
|
if { ([istarget "arm*-*-*"]) \
|
|
&& !([istarget "*-*-*eabi*"] || \
|
|
[istarget "*-*-mingw32ce*"] || \
|
|
[istarget "*-*-openbsd*"]) } then {
|
|
# assume the long long represents a floating point double in ARM format
|
|
gdb_test "p/f val.oct" "2.1386676354387559e\\+265"
|
|
} else {
|
|
# assume the long long represents a floating point double in little
|
|
# endian format
|
|
gdb_test "p/f val.oct" "-5.9822653797615723e-120"
|
|
}
|
|
} else {
|
|
gdb_test "p/f val.oct" "-2.42716126e-15"
|
|
}
|
|
|
|
gdb_test_char "p/x *(char *)c" "0x1"
|
|
gdb_test_char "p/d *(char *)c" "1"
|
|
gdb_test_char "p/u *(char *)c" "1"
|
|
gdb_test_char "p/o *(char *)c" "01"
|
|
gdb_test_char "p/t *(char *)c" "1"
|
|
gdb_test_char "p/a *(char *)c" "0x1( <.*>)?"
|
|
gdb_test_char "p/f *(char *)c" "1"
|
|
gdb_test_char "p/c *(char *)c" "1 '.001'"
|
|
|
|
gdb_test_short "p/x *(short *)s" "" "0x123" ""
|
|
gdb_test_short "p/d *(short *)s" "" "291" ""
|
|
gdb_test_short "p/u *(short *)s" "" "291" ""
|
|
gdb_test_short "p/o *(short *)s" "" "0443" ""
|
|
gdb_test_short "p/t *(short *)s" "" "100100011" ""
|
|
gdb_test_short "p/a *(short *)s" "" "0x123( <.*>)?" ""
|
|
gdb_test_short "p/f *(short *)s" "" "1.7345e-0?5" ""
|
|
gdb_test_short "p/c *(short *)s" "" "35 '.'" ""
|
|
|
|
gdb_test_int "p/x *(int *)i" "" "0x123" "0x1234567" ""
|
|
gdb_test_int "p/d *(int *)i" "" "291" "19088743" ""
|
|
gdb_test_int "p/u *(int *)i" "" "291" "19088743" ""
|
|
gdb_test_int "p/o *(int *)i" "" "0443" "0110642547" ""
|
|
gdb_test_int "p/t *(int *)i" "" "100100011" "1001000110100010101100111" ""
|
|
gdb_test_int "p/a *(int *)i" "" "" "0x1234567" ""
|
|
gdb_test_int "p/f *(int *)i" "" "291" "2.99881655e-0?38" ""
|
|
gdb_test_int "p/c *(int *)i" "" "35 '.'" "103 'g'" ""
|
|
|
|
gdb_test_long "p/x *(long *)l" "" "0x123" "0x1234567" "0x123456789abcdef"
|
|
gdb_test_long "p/d *(long *)l" "" "291" "19088743" "81985529216486895"
|
|
gdb_test_long "p/u *(long *)l" "" "291" "19088743" "81985529216486895"
|
|
gdb_test_long "p/o *(long *)l" "" "0443" "0110642547" "04432126361152746757"
|
|
gdb_test_long "p/t *(long *)l" "" "100100011" "1001000110100010101100111" "100100011010001010110011110001001101010111100110111101111"
|
|
gdb_test_ptr "p/a *(long *)l" "" "" "0x1234567" "0x123456789abcdef"
|
|
gdb_test_long "p/f *(long *)l" "" "291" "2.99881655e-0?38" "3.5127005640885037e-303"
|
|
gdb_test_long "p/c *(long *)l" "" "35 '.'" "103 'g'" "-17 '.*'"
|
|
|
|
gdb_test_long_long "p/x *(long long *)ll" "" "" "" "0x123456789abcdef"
|
|
gdb_test_long_long "p/d *(long long *)ll" "" "" "" "81985529216486895"
|
|
gdb_test_long_long "p/u *(long long *)ll" "" "" "" "81985529216486895"
|
|
gdb_test_long_long "p/o *(long long *)ll" "" "" "" "04432126361152746757"
|
|
gdb_test_long_long "p/t *(long long *)ll" "" "" "" "100100011010001010110011110001001101010111100110111101111"
|
|
gdb_test_ptr "p/a *(long long *)ll" "" "" "0x89abcdef" "0x123456789abcdef"
|
|
gdb_test_long_long "p/f *(long long *)ll" "" "" "" "3.5127005640885037e-303"
|
|
gdb_test_long_long "p/c *(long long *)ll" "" "" "" "-17 '.*'"
|
|
|
|
# Implict Word size (except for a, c, and f)
|
|
|
|
gdb_test "x/w w" ".*" "set examine size to w"
|
|
gdb_test "x/x w" "0x01234567"
|
|
gdb_test "x/d w" "19088743"
|
|
gdb_test "x/u w" "19088743"
|
|
gdb_test "x/o w" "0110642547"
|
|
gdb_test "x/t w" "00000001001000110100010101100111"
|
|
gdb_test_xptr "x/a" { b "" } { h "" } { w "0x1234567" } { g "0x123456789abcdef" }
|
|
gdb_test "x/c b" "1 '.001'"
|
|
if { $sizeof_double == 8 || $sizeof_long_double == 8 } {
|
|
gdb_test "x/f &val.oct" "-5.9822653797615723e-120"
|
|
} else {
|
|
gdb_test "x/f &val.oct" "-2.42716126e-15"
|
|
}
|
|
|
|
# Implict Giant size (except for a, c, and f)
|
|
|
|
gdb_test "x/g g" ".*" "set examine size to g"
|
|
gdb_test "x/2x g" "0x0123456789abcdef.*0xa72ee53977053977"
|
|
gdb_test "x/2d g" "81985529216486895.*-6399925985474168457"
|
|
gdb_test "x/2u g" "81985529216486895.*12046818088235383159"
|
|
gdb_test "x/2o g" "04432126361152746757.*01234567123456701234567"
|
|
gdb_test "x/2t g" "0000000100100011010001010110011110001001101010111100110111101111.*1010011100101110111001010011100101110111000001010011100101110111"
|
|
gdb_test_xptr "x/2a" { b "" } { h "" } { w "0x1234567.*0xa72ee539" } { g "0x123456789abcdef.*0xa72ee53977053977" }
|
|
gdb_test "x/2c b" "1 '.001'.*-89 '.\[0-9\]*'"
|
|
if { $sizeof_double == 8 || $sizeof_long_double == 8 } {
|
|
gdb_test "x/2f &val.oct" "-5.9822653797615723e-120.*-5.9041889495880968e-100"
|
|
} else {
|
|
gdb_test "x/2f &val.oct" "-2.42716126e-15"
|
|
}
|
|
|
|
# Explicit sizes, and two memory locations ...
|
|
|
|
gdb_test "x/2bx b" "0x01.*0xa7"
|
|
gdb_test "x/2bd b" "1.*-89"
|
|
gdb_test "x/2bu b" "1.*167"
|
|
gdb_test "x/2bo b" "01.*0247"
|
|
gdb_test "x/2bt b" "00000001.*10100111"
|
|
gdb_test_ptr "x/2ba b" "" "" "0x1.*0xffffffa7" "0x1.*0xffffffffffffffa7"
|
|
gdb_test "x/2bc b" "1 '.001'.*-89 '.\[0-9\]*'"
|
|
gdb_test "x/2bf b" "1.*-89"
|
|
|
|
gdb_test "x/2hx h" "0x0123.*0xa72e"
|
|
gdb_test "x/2hd h" "291.*-22738"
|
|
gdb_test "x/2hu h" "291.*42798"
|
|
gdb_test "x/2ho h" "0443.*0123456"
|
|
gdb_test "x/2ht h" "0000000100100011.*1010011100101110"
|
|
gdb_test_ptr "x/2ha h" "" "" "0x123.*0xffffa72e" "0x123.*0xffffffffffffa72e"
|
|
gdb_test "x/2hc h" "35 '.'.*46 '.'"
|
|
gdb_test "x/2hf h" "1.7345e-0?5.*-0.028046"
|
|
|
|
gdb_test "x/2wx w" "0x01234567.*0xa72ee539"
|
|
gdb_test "x/2wd w" "19088743.*-1490098887"
|
|
gdb_test "x/2wu w" "19088743.*2804868409"
|
|
gdb_test "x/2wo w" "0110642547.*024713562471"
|
|
gdb_test "x/2wt w" "00000001001000110100010101100111.*10100111001011101110010100111001"
|
|
gdb_test_ptr "x/2wa w" "" "" "0x1234567.*0xa72ee539" "0x1234567.*0xffffffffa72ee539"
|
|
gdb_test "x/2wc w" "103 'g'.*57 '9'"
|
|
gdb_test "x/2wf w" "2.99881655e-0?38.*-2.42716126e-0?15"
|
|
|
|
gdb_test "x/2gx g" "0x0123456789abcdef.*0xa72ee53977053977"
|
|
gdb_test "x/2gd g" "81985529216486895.*-6399925985474168457"
|
|
gdb_test "x/2gu g" "81985529216486895.*12046818088235383159"
|
|
gdb_test "x/2go g" "04432126361152746757.*01234567123456701234567"
|
|
gdb_test "x/2gt g" "0000000100100011010001010110011110001001101010111100110111101111.*1010011100101110111001010011100101110111000001010011100101110111"
|
|
gdb_test_ptr "x/2ga g" "" "" "0x89abcdef.*0x77053977" "0x123456789abcdef.*0xa72ee53977053977"
|
|
gdb_test "x/2gc g" "-17 '.\[0-9\]*'.*119 'w'"
|
|
gdb_test "x/2gf g" "3.5127005640885037e-303.*-5.9822653797615723e-120"
|
|
|
|
# Repeat behavior.
|
|
gdb_test "x/2bx b" "0x01.*0xa7" "set up for repeat"
|
|
send_gdb "\n"
|
|
gdb_test "" "0x00.*0x00" "repeat x command"
|
|
|
|
gdb_exit
|