# This testcase is part of GDB, the GNU debugger.

# Copyright 1997-2019 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.
#
if [target_info exists no_long_long] {
    return 0
}

standard_testfile .c

# What compiler are we using?
#
if [get_compiler_info] {
    return -1
}

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] } then { 
   fail "run to 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 name } {
    if { $pat == "" } {
	setup_kfail gdb/1672 *-*-*
	gdb_test $test "xxx" $name
    } else {
	gdb_test $test $pat $name
    }
}

proc gdb_test_ptr { test args } {
    global sizeof_data_ptr

    gdb_test_xxx $test [pat2 $sizeof_data_ptr $args] $test
}

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] $test
}

proc gdb_test_short { test args } {
    global sizeof_short
    gdb_test_xxx $test [pat2 $sizeof_short $args] $test
}

proc gdb_test_int { test args } {
    global sizeof_int
    gdb_test_xxx $test [pat2 $sizeof_int $args] $test
}

proc gdb_test_long { test args } {
    global sizeof_long
    gdb_test_xxx $test [pat2 $sizeof_long $args] $test
}

proc gdb_test_long_long { test args } {
    global sizeof_long_long
    gdb_test_xxx $test [pat2 $sizeof_long_long $args] $test
}

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*"] || \
	      [istarget "*-*-symbianelf"]) } 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" "" "291" ""
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" "291.*-22738"

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
return 0
