mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-27 04:52:05 +08:00
389b98f7d8
Hi, We find gdb.base/printcmds.exp fails a lot on windows host, like this, p ctable1[163] $204 = 163 '£' (gdb) FAIL: gdb.base/printcmds.exp: p ctable1[163] however, on linux host, p ctable1[163] $205 = 163 '\243' (gdb) PASS: gdb.base/printcmds.exp: p ctable1[163] The printing related code is in valprint.c:print_wchar, if (gdb_iswprint (w) && (!need_escape || (!gdb_iswdigit (w) && w != LCST ('8') && w != LCST ('9')))) { gdb_wchar_t wchar = w; if (w == gdb_btowc (quoter) || w == LCST ('\\')) obstack_grow_wstr (output, LCST ("\\")); obstack_grow (output, &wchar, sizeof (gdb_wchar_t)); } else { // print W in hex or octal digits } When I debug gdb on different hosts, I find on windows host, gdb_iswprint (iswprint) returns true if 'w' is 163. However, on linux host, iswprint returns false if 'w' is 163. Looks this difference is caused by the charset. On Linux host, the target-charset is ANSI_X3.4-1968, while on windows host, the target-charset is CP1252. We can see how target-charset affects the output. On linux host, (gdb) set target-charset ASCII (gdb) p ctable1[163] $1 = 163 '\243' (gdb) set target-charset CP1252 (gdb) p ctable1[163] $2 = 163 '£' we can print the pound sign too, and it shows target-charset does affect the output. This patch is to set target-charset temporarily to ASCII for some charset-sensitive tests. Tested on arm-none-eabi and powerpc-linux-gnu on mingw32 host. More than one hundred fails are fixed. gdb/testsuite: 2014-04-17 Yao Qi <yao@codesourcery.com> * lib/gdb.exp (with_target_charset): New proc. * gdb.base/printcmds.exp (test_print_all_chars): Wrap tests with with_target_charset. (test_print_strings): Likewise. (test_repeat_bytes): Likewise. * gdb.base/setvar.exp: Set target-charset to ASCII temporarily for some tests.
975 lines
36 KiB
Plaintext
975 lines
36 KiB
Plaintext
# This testcase is part of GDB, the GNU debugger.
|
|
|
|
# Copyright 1992-2014 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/>.
|
|
|
|
# Please email any bugs, comments, and/or additions to this file to:
|
|
# bug-gdb@gnu.org
|
|
|
|
# This file was written by Fred Fish. (fnf@cygnus.com)
|
|
|
|
standard_testfile .c
|
|
|
|
if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
|
|
untested printcmds.exp
|
|
return -1
|
|
}
|
|
|
|
get_compiler_info
|
|
|
|
proc test_integer_literals_accepted {} {
|
|
global gdb_prompt
|
|
|
|
# Test various decimal values.
|
|
|
|
gdb_test "p 123" " = 123"
|
|
gdb_test "p -123" " = -123"
|
|
gdb_test "p/d 123" " = 123"
|
|
|
|
# Test various octal values.
|
|
|
|
gdb_test "p 0123" " = 83"
|
|
gdb_test "p 00123" " = 83"
|
|
gdb_test "p -0123" " = -83"
|
|
gdb_test "p/o 0123" " = 0123"
|
|
|
|
# Test various hexadecimal values.
|
|
|
|
gdb_test "p 0x123" " = 291"
|
|
gdb_test "p -0x123" " = -291"
|
|
gdb_test "p 0x0123" " = 291"
|
|
gdb_test "p -0x0123" " = -291"
|
|
gdb_test "p 0xABCDEF" " = 11259375"
|
|
gdb_test "p 0xabcdef" " = 11259375"
|
|
gdb_test "p 0xAbCdEf" " = 11259375"
|
|
gdb_test "p/x 0x123" " = 0x123"
|
|
|
|
# Test various binary values.
|
|
|
|
gdb_test "p 0b0" " = 0"
|
|
gdb_test "p 0b1111" " = 15"
|
|
gdb_test "p 0B1111" " = 15"
|
|
gdb_test "p -0b1111" " = -15"
|
|
}
|
|
|
|
proc test_character_literals_accepted {} {
|
|
global gdb_prompt
|
|
|
|
gdb_test "p 'a'" " = 97 'a'"
|
|
gdb_test "p/c 'a'" " = 97 'a'"
|
|
gdb_test "p/x 'a'" " = 0x61"
|
|
gdb_test "p/d 'a'" " = 97"
|
|
gdb_test "p/t 'a'" " = 1100001"
|
|
gdb_test "p '\\141'" " = 97 'a'"
|
|
gdb_test "p/x '\\377'" " = 0xff"
|
|
# Note "p '\''" => "= 39 '\''"
|
|
gdb_test "p '\\''" " = 39 '\\\\''"
|
|
# Note "p '\\'" => "= 92 '\\'"
|
|
gdb_test "p '\\\\'" " = 92 '\\\\\\\\'"
|
|
}
|
|
|
|
proc test_integer_literals_rejected {} {
|
|
global gdb_prompt
|
|
|
|
test_print_reject "p 0x"
|
|
test_print_reject "p 0b"
|
|
gdb_test "p ''" "(Empty character constant\\.|A character constant must contain at least one character\\.)"
|
|
gdb_test "p '''" "(Empty character constant\\.|A character constant must contain at least one character\\.)"
|
|
test_print_reject "p '\\'"
|
|
|
|
# Note that this turns into "p '\\\'" at gdb's input.
|
|
test_print_reject "p '\\\\\\'"
|
|
|
|
# Test various decimal values.
|
|
|
|
test_print_reject "p DEADBEEF"
|
|
|
|
# Test various octal values.
|
|
|
|
test_print_reject "p 09"
|
|
test_print_reject "p 079"
|
|
|
|
# Test various hexadecimal values.
|
|
|
|
test_print_reject "p 0xG"
|
|
test_print_reject "p 0xAG"
|
|
|
|
# Test various binary values.
|
|
|
|
test_print_reject "p 0b2"
|
|
test_print_reject "p 0b12"
|
|
}
|
|
|
|
proc test_float_accepted {} {
|
|
global gdb_prompt
|
|
|
|
# This test is useful to catch successful parsing of the first fp value.
|
|
gdb_test "p 123.4+56.7" " = 180.(099\[0-9]*|100\[0-9\]*)" "check for floating addition"
|
|
|
|
# Test all the suffixes (including no suffix).
|
|
gdb_test "p 1." " = 1"
|
|
gdb_test "p 1.5" " = 1.5"
|
|
gdb_test "p 1.f" " = 1"
|
|
gdb_test "p 1.5f" " = 1.5"
|
|
gdb_test "p 1.l" " = 1"
|
|
gdb_test "p 1.5l" " = 1.5"
|
|
|
|
# Test hexadecimal floating point.
|
|
set test "p 0x1.1"
|
|
gdb_test_multiple $test $test {
|
|
-re " = 1\\.0625\r\n$gdb_prompt $" {
|
|
pass $test
|
|
}
|
|
-re "Invalid number \"0x1\\.1\"\\.\r\n$gdb_prompt $" {
|
|
# Older glibc does not support hex float, newer does.
|
|
xfail $test
|
|
}
|
|
}
|
|
}
|
|
|
|
proc test_float_rejected {} {
|
|
# Gdb use to fail this test for all configurations. The C
|
|
# lexer thought that 123DEADBEEF was a floating point number, but
|
|
# then failed to notice that atof() only eats the 123 part.
|
|
# Fixed, 4/25/97, by Bob Manson.
|
|
test_print_reject "p 123DEADBEEF"
|
|
|
|
test_print_reject "p 123foobar.bazfoo3"
|
|
test_print_reject "p 123EEEEEEEEEEEEEEEEE33333k333"
|
|
|
|
# Test bad suffixes.
|
|
test_print_reject "p 1.1x"
|
|
test_print_reject "p 1.1ff"
|
|
test_print_reject "p 1.1ll"
|
|
}
|
|
|
|
proc test_print_all_chars {} {
|
|
global gdb_prompt
|
|
|
|
# Set the target-charset to ASCII, because the output varies from
|
|
# different charset.
|
|
with_target_charset "ASCII" {
|
|
|
|
gdb_test "p ctable1\[0\]" " = 0 '\\\\000'"
|
|
gdb_test "p ctable1\[1\]" " = 1 '\\\\001'"
|
|
gdb_test "p ctable1\[2\]" " = 2 '\\\\002'"
|
|
gdb_test "p ctable1\[3\]" " = 3 '\\\\003'"
|
|
gdb_test "p ctable1\[4\]" " = 4 '\\\\004'"
|
|
gdb_test "p ctable1\[5\]" " = 5 '\\\\005'"
|
|
gdb_test "p ctable1\[6\]" " = 6 '\\\\006'"
|
|
gdb_test "p ctable1\[7\]" " = 7 '\\\\a'"
|
|
gdb_test "p ctable1\[8\]" " = 8 '\\\\b'"
|
|
gdb_test "p ctable1\[9\]" " = 9 '\\\\t'"
|
|
gdb_test "p ctable1\[10\]" " = 10 '\\\\n'"
|
|
gdb_test "p ctable1\[11\]" " = 11 '\\\\v'"
|
|
gdb_test "p ctable1\[12\]" " = 12 '\\\\f'"
|
|
gdb_test "p ctable1\[13\]" " = 13 '\\\\r'"
|
|
gdb_test "p ctable1\[14\]" " = 14 '\\\\016'"
|
|
gdb_test "p ctable1\[15\]" " = 15 '\\\\017'"
|
|
gdb_test "p ctable1\[16\]" " = 16 '\\\\020'"
|
|
gdb_test "p ctable1\[17\]" " = 17 '\\\\021'"
|
|
gdb_test "p ctable1\[18\]" " = 18 '\\\\022'"
|
|
gdb_test "p ctable1\[19\]" " = 19 '\\\\023'"
|
|
gdb_test "p ctable1\[20\]" " = 20 '\\\\024'"
|
|
gdb_test "p ctable1\[21\]" " = 21 '\\\\025'"
|
|
gdb_test "p ctable1\[22\]" " = 22 '\\\\026'"
|
|
gdb_test "p ctable1\[23\]" " = 23 '\\\\027'"
|
|
gdb_test "p ctable1\[24\]" " = 24 '\\\\030'"
|
|
gdb_test "p ctable1\[25\]" " = 25 '\\\\031'"
|
|
gdb_test "p ctable1\[26\]" " = 26 '\\\\032'"
|
|
gdb_test "p ctable1\[27\]" " = 27 '\\\\033'"
|
|
gdb_test "p ctable1\[28\]" " = 28 '\\\\034'"
|
|
gdb_test "p ctable1\[29\]" " = 29 '\\\\035'"
|
|
gdb_test "p ctable1\[30\]" " = 30 '\\\\036'"
|
|
gdb_test "p ctable1\[31\]" " = 31 '\\\\037'"
|
|
gdb_test "p ctable1\[32\]" " = 32 ' '"
|
|
gdb_test "p ctable1\[33\]" " = 33 '!'"
|
|
gdb_test "p ctable1\[34\]" " = 34 '\"'"
|
|
gdb_test "p ctable1\[35\]" " = 35 '#'"
|
|
gdb_test "p ctable1\[36\]" " = 36 '\\\$'"
|
|
gdb_test "p ctable1\[37\]" " = 37 '%'"
|
|
gdb_test "p ctable1\[38\]" " = 38 '&'"
|
|
gdb_test "p ctable1\[39\]" " = 39 '\\\\''"
|
|
gdb_test "p ctable1\[40\]" " = 40 '\\('"
|
|
gdb_test "p ctable1\[41\]" " = 41 '\\)'"
|
|
gdb_test "p ctable1\[42\]" " = 42 '\\*'"
|
|
gdb_test "p ctable1\[43\]" " = 43 '\\+'"
|
|
gdb_test "p ctable1\[44\]" " = 44 ','"
|
|
gdb_test "p ctable1\[45\]" " = 45 '-'"
|
|
gdb_test "p ctable1\[46\]" " = 46 '.'"
|
|
gdb_test "p ctable1\[47\]" " = 47 '/'"
|
|
gdb_test "p ctable1\[48\]" " = 48 '0'"
|
|
gdb_test "p ctable1\[49\]" " = 49 '1'"
|
|
gdb_test "p ctable1\[50\]" " = 50 '2'"
|
|
gdb_test "p ctable1\[51\]" " = 51 '3'"
|
|
gdb_test "p ctable1\[52\]" " = 52 '4'"
|
|
gdb_test "p ctable1\[53\]" " = 53 '5'"
|
|
gdb_test "p ctable1\[54\]" " = 54 '6'"
|
|
gdb_test "p ctable1\[55\]" " = 55 '7'"
|
|
gdb_test "p ctable1\[56\]" " = 56 '8'"
|
|
gdb_test "p ctable1\[57\]" " = 57 '9'"
|
|
gdb_test "p ctable1\[58\]" " = 58 ':'"
|
|
gdb_test "p ctable1\[59\]" " = 59 ';'"
|
|
gdb_test "p ctable1\[60\]" " = 60 '<'"
|
|
gdb_test "p ctable1\[61\]" " = 61 '='"
|
|
gdb_test "p ctable1\[62\]" " = 62 '>'"
|
|
gdb_test "p ctable1\[63\]" " = 63 '\\?'"
|
|
gdb_test "p ctable1\[64\]" " = 64 '@'"
|
|
gdb_test "p ctable1\[65\]" " = 65 'A'"
|
|
gdb_test "p ctable1\[66\]" " = 66 'B'"
|
|
gdb_test "p ctable1\[67\]" " = 67 'C'"
|
|
gdb_test "p ctable1\[68\]" " = 68 'D'"
|
|
gdb_test "p ctable1\[69\]" " = 69 'E'"
|
|
gdb_test "p ctable1\[70\]" " = 70 'F'"
|
|
gdb_test "p ctable1\[71\]" " = 71 'G'"
|
|
gdb_test "p ctable1\[72\]" " = 72 'H'"
|
|
gdb_test "p ctable1\[73\]" " = 73 'I'"
|
|
gdb_test "p ctable1\[74\]" " = 74 'J'"
|
|
gdb_test "p ctable1\[75\]" " = 75 'K'"
|
|
gdb_test "p ctable1\[76\]" " = 76 'L'"
|
|
gdb_test "p ctable1\[77\]" " = 77 'M'"
|
|
gdb_test "p ctable1\[78\]" " = 78 'N'"
|
|
gdb_test "p ctable1\[79\]" " = 79 'O'"
|
|
gdb_test "p ctable1\[80\]" " = 80 'P'"
|
|
gdb_test "p ctable1\[81\]" " = 81 'Q'"
|
|
gdb_test "p ctable1\[82\]" " = 82 'R'"
|
|
gdb_test "p ctable1\[83\]" " = 83 'S'"
|
|
gdb_test "p ctable1\[84\]" " = 84 'T'"
|
|
gdb_test "p ctable1\[85\]" " = 85 'U'"
|
|
gdb_test "p ctable1\[86\]" " = 86 'V'"
|
|
gdb_test "p ctable1\[87\]" " = 87 'W'"
|
|
gdb_test "p ctable1\[88\]" " = 88 'X'"
|
|
gdb_test "p ctable1\[89\]" " = 89 'Y'"
|
|
gdb_test "p ctable1\[90\]" " = 90 'Z'"
|
|
gdb_test "p ctable1\[91\]" " = 91 '\\\['"
|
|
gdb_test "p ctable1\[92\]" " = 92 '\\\\\\\\'"
|
|
gdb_test "p ctable1\[93\]" " = 93 '\\\]'"
|
|
gdb_test "p ctable1\[94\]" " = 94 '\\^'"
|
|
gdb_test "p ctable1\[95\]" " = 95 '_'"
|
|
gdb_test "p ctable1\[96\]" " = 96 '`'"
|
|
gdb_test "p ctable1\[97\]" " = 97 'a'"
|
|
gdb_test "p ctable1\[98\]" " = 98 'b'"
|
|
gdb_test "p ctable1\[99\]" " = 99 'c'"
|
|
gdb_test "p ctable1\[100\]" " = 100 'd'"
|
|
gdb_test "p ctable1\[101\]" " = 101 'e'"
|
|
gdb_test "p ctable1\[102\]" " = 102 'f'"
|
|
gdb_test "p ctable1\[103\]" " = 103 'g'"
|
|
gdb_test "p ctable1\[104\]" " = 104 'h'"
|
|
gdb_test "p ctable1\[105\]" " = 105 'i'"
|
|
gdb_test "p ctable1\[106\]" " = 106 'j'"
|
|
gdb_test "p ctable1\[107\]" " = 107 'k'"
|
|
gdb_test "p ctable1\[108\]" " = 108 'l'"
|
|
gdb_test "p ctable1\[109\]" " = 109 'm'"
|
|
gdb_test "p ctable1\[110\]" " = 110 'n'"
|
|
gdb_test "p ctable1\[111\]" " = 111 'o'"
|
|
gdb_test "p ctable1\[112\]" " = 112 'p'"
|
|
gdb_test "p ctable1\[113\]" " = 113 'q'"
|
|
gdb_test "p ctable1\[114\]" " = 114 'r'"
|
|
gdb_test "p ctable1\[115\]" " = 115 's'"
|
|
gdb_test "p ctable1\[116\]" " = 116 't'"
|
|
gdb_test "p ctable1\[117\]" " = 117 'u'"
|
|
gdb_test "p ctable1\[118\]" " = 118 'v'"
|
|
gdb_test "p ctable1\[119\]" " = 119 'w'"
|
|
gdb_test "p ctable1\[120\]" " = 120 'x'"
|
|
gdb_test "p ctable1\[121\]" " = 121 'y'"
|
|
gdb_test "p ctable1\[122\]" " = 122 'z'"
|
|
gdb_test "p ctable1\[123\]" " = 123 '\[{\]+'"
|
|
gdb_test "p ctable1\[124\]" " = 124 '\[|\]+'"
|
|
gdb_test "p ctable1\[125\]" " = 125 '\[}\]+'"
|
|
gdb_test "p ctable1\[126\]" " = 126 '\[~\]'"
|
|
gdb_test "p ctable1\[127\]" " = 127 '\\\\177'"
|
|
gdb_test "p ctable1\[128\]" " = 128 '\\\\200'"
|
|
gdb_test "p ctable1\[129\]" " = 129 '\\\\201'"
|
|
gdb_test "p ctable1\[130\]" " = 130 '\\\\202'"
|
|
gdb_test "p ctable1\[131\]" " = 131 '\\\\203'"
|
|
gdb_test "p ctable1\[132\]" " = 132 '\\\\204'"
|
|
gdb_test "p ctable1\[133\]" " = 133 '\\\\205'"
|
|
gdb_test "p ctable1\[134\]" " = 134 '\\\\206'"
|
|
gdb_test "p ctable1\[135\]" " = 135 '\\\\207'"
|
|
gdb_test "p ctable1\[136\]" " = 136 '\\\\210'"
|
|
gdb_test "p ctable1\[137\]" " = 137 '\\\\211'"
|
|
gdb_test "p ctable1\[138\]" " = 138 '\\\\212'"
|
|
gdb_test "p ctable1\[139\]" " = 139 '\\\\213'"
|
|
gdb_test "p ctable1\[140\]" " = 140 '\\\\214'"
|
|
gdb_test "p ctable1\[141\]" " = 141 '\\\\215'"
|
|
gdb_test "p ctable1\[142\]" " = 142 '\\\\216'"
|
|
gdb_test "p ctable1\[143\]" " = 143 '\\\\217'"
|
|
gdb_test "p ctable1\[144\]" " = 144 '\\\\220'"
|
|
gdb_test "p ctable1\[145\]" " = 145 '\\\\221'"
|
|
gdb_test "p ctable1\[146\]" " = 146 '\\\\222'"
|
|
gdb_test "p ctable1\[147\]" " = 147 '\\\\223'"
|
|
gdb_test "p ctable1\[148\]" " = 148 '\\\\224'"
|
|
gdb_test "p ctable1\[149\]" " = 149 '\\\\225'"
|
|
gdb_test "p ctable1\[150\]" " = 150 '\\\\226'"
|
|
gdb_test "p ctable1\[151\]" " = 151 '\\\\227'"
|
|
gdb_test "p ctable1\[152\]" " = 152 '\\\\230'"
|
|
gdb_test "p ctable1\[153\]" " = 153 '\\\\231'"
|
|
gdb_test "p ctable1\[154\]" " = 154 '\\\\232'"
|
|
gdb_test "p ctable1\[155\]" " = 155 '\\\\233'"
|
|
gdb_test "p ctable1\[156\]" " = 156 '\\\\234'"
|
|
gdb_test "p ctable1\[157\]" " = 157 '\\\\235'"
|
|
gdb_test "p ctable1\[158\]" " = 158 '\\\\236'"
|
|
gdb_test "p ctable1\[159\]" " = 159 '\\\\237'"
|
|
gdb_test "p ctable1\[160\]" " = 160 '\\\\240'"
|
|
gdb_test "p ctable1\[161\]" " = 161 '\\\\241'"
|
|
gdb_test "p ctable1\[162\]" " = 162 '\\\\242'"
|
|
gdb_test "p ctable1\[163\]" " = 163 '\\\\243'"
|
|
gdb_test "p ctable1\[164\]" " = 164 '\\\\244'"
|
|
gdb_test "p ctable1\[165\]" " = 165 '\\\\245'"
|
|
gdb_test "p ctable1\[166\]" " = 166 '\\\\246'"
|
|
gdb_test "p ctable1\[167\]" " = 167 '\\\\247'"
|
|
gdb_test "p ctable1\[168\]" " = 168 '\\\\250'"
|
|
gdb_test "p ctable1\[169\]" " = 169 '\\\\251'"
|
|
gdb_test "p ctable1\[170\]" " = 170 '\\\\252'"
|
|
gdb_test "p ctable1\[171\]" " = 171 '\\\\253'"
|
|
gdb_test "p ctable1\[172\]" " = 172 '\\\\254'"
|
|
gdb_test "p ctable1\[173\]" " = 173 '\\\\255'"
|
|
gdb_test "p ctable1\[174\]" " = 174 '\\\\256'"
|
|
gdb_test "p ctable1\[175\]" " = 175 '\\\\257'"
|
|
gdb_test "p ctable1\[176\]" " = 176 '\\\\260'"
|
|
gdb_test "p ctable1\[177\]" " = 177 '\\\\261'"
|
|
gdb_test "p ctable1\[178\]" " = 178 '\\\\262'"
|
|
gdb_test "p ctable1\[179\]" " = 179 '\\\\263'"
|
|
gdb_test "p ctable1\[180\]" " = 180 '\\\\264'"
|
|
gdb_test "p ctable1\[181\]" " = 181 '\\\\265'"
|
|
gdb_test "p ctable1\[182\]" " = 182 '\\\\266'"
|
|
gdb_test "p ctable1\[183\]" " = 183 '\\\\267'"
|
|
gdb_test "p ctable1\[184\]" " = 184 '\\\\270'"
|
|
gdb_test "p ctable1\[185\]" " = 185 '\\\\271'"
|
|
gdb_test "p ctable1\[186\]" " = 186 '\\\\272'"
|
|
gdb_test "p ctable1\[187\]" " = 187 '\\\\273'"
|
|
gdb_test "p ctable1\[188\]" " = 188 '\\\\274'"
|
|
gdb_test "p ctable1\[189\]" " = 189 '\\\\275'"
|
|
gdb_test "p ctable1\[190\]" " = 190 '\\\\276'"
|
|
gdb_test "p ctable1\[191\]" " = 191 '\\\\277'"
|
|
gdb_test "p ctable1\[192\]" " = 192 '\\\\300'"
|
|
gdb_test "p ctable1\[193\]" " = 193 '\\\\301'"
|
|
gdb_test "p ctable1\[194\]" " = 194 '\\\\302'"
|
|
gdb_test "p ctable1\[195\]" " = 195 '\\\\303'"
|
|
gdb_test "p ctable1\[196\]" " = 196 '\\\\304'"
|
|
gdb_test "p ctable1\[197\]" " = 197 '\\\\305'"
|
|
gdb_test "p ctable1\[198\]" " = 198 '\\\\306'"
|
|
gdb_test "p ctable1\[199\]" " = 199 '\\\\307'"
|
|
gdb_test "p ctable1\[200\]" " = 200 '\\\\310'"
|
|
gdb_test "p ctable1\[201\]" " = 201 '\\\\311'"
|
|
gdb_test "p ctable1\[202\]" " = 202 '\\\\312'"
|
|
gdb_test "p ctable1\[203\]" " = 203 '\\\\313'"
|
|
gdb_test "p ctable1\[204\]" " = 204 '\\\\314'"
|
|
gdb_test "p ctable1\[205\]" " = 205 '\\\\315'"
|
|
gdb_test "p ctable1\[206\]" " = 206 '\\\\316'"
|
|
gdb_test "p ctable1\[207\]" " = 207 '\\\\317'"
|
|
gdb_test "p ctable1\[208\]" " = 208 '\\\\320'"
|
|
gdb_test "p ctable1\[209\]" " = 209 '\\\\321'"
|
|
gdb_test "p ctable1\[210\]" " = 210 '\\\\322'"
|
|
gdb_test "p ctable1\[211\]" " = 211 '\\\\323'"
|
|
gdb_test "p ctable1\[212\]" " = 212 '\\\\324'"
|
|
gdb_test "p ctable1\[213\]" " = 213 '\\\\325'"
|
|
gdb_test "p ctable1\[214\]" " = 214 '\\\\326'"
|
|
gdb_test "p ctable1\[215\]" " = 215 '\\\\327'"
|
|
gdb_test "p ctable1\[216\]" " = 216 '\\\\330'"
|
|
gdb_test "p ctable1\[217\]" " = 217 '\\\\331'"
|
|
gdb_test "p ctable1\[218\]" " = 218 '\\\\332'"
|
|
gdb_test "p ctable1\[219\]" " = 219 '\\\\333'"
|
|
gdb_test "p ctable1\[220\]" " = 220 '\\\\334'"
|
|
gdb_test "p ctable1\[221\]" " = 221 '\\\\335'"
|
|
gdb_test "p ctable1\[222\]" " = 222 '\\\\336'"
|
|
gdb_test "p ctable1\[223\]" " = 223 '\\\\337'"
|
|
gdb_test "p ctable1\[224\]" " = 224 '\\\\340'"
|
|
gdb_test "p ctable1\[225\]" " = 225 '\\\\341'"
|
|
gdb_test "p ctable1\[226\]" " = 226 '\\\\342'"
|
|
gdb_test "p ctable1\[227\]" " = 227 '\\\\343'"
|
|
gdb_test "p ctable1\[228\]" " = 228 '\\\\344'"
|
|
gdb_test "p ctable1\[229\]" " = 229 '\\\\345'"
|
|
gdb_test "p ctable1\[230\]" " = 230 '\\\\346'"
|
|
gdb_test "p ctable1\[231\]" " = 231 '\\\\347'"
|
|
gdb_test "p ctable1\[232\]" " = 232 '\\\\350'"
|
|
gdb_test "p ctable1\[233\]" " = 233 '\\\\351'"
|
|
gdb_test "p ctable1\[234\]" " = 234 '\\\\352'"
|
|
gdb_test "p ctable1\[235\]" " = 235 '\\\\353'"
|
|
gdb_test "p ctable1\[236\]" " = 236 '\\\\354'"
|
|
gdb_test "p ctable1\[237\]" " = 237 '\\\\355'"
|
|
gdb_test "p ctable1\[238\]" " = 238 '\\\\356'"
|
|
gdb_test "p ctable1\[239\]" " = 239 '\\\\357'"
|
|
gdb_test "p ctable1\[240\]" " = 240 '\\\\360'"
|
|
gdb_test "p ctable1\[241\]" " = 241 '\\\\361'"
|
|
gdb_test "p ctable1\[242\]" " = 242 '\\\\362'"
|
|
gdb_test "p ctable1\[243\]" " = 243 '\\\\363'"
|
|
gdb_test "p ctable1\[244\]" " = 244 '\\\\364'"
|
|
gdb_test "p ctable1\[245\]" " = 245 '\\\\365'"
|
|
gdb_test "p ctable1\[246\]" " = 246 '\\\\366'"
|
|
gdb_test "p ctable1\[247\]" " = 247 '\\\\367'"
|
|
gdb_test "p ctable1\[248\]" " = 248 '\\\\370'"
|
|
gdb_test "p ctable1\[249\]" " = 249 '\\\\371'"
|
|
gdb_test "p ctable1\[250\]" " = 250 '\\\\372'"
|
|
gdb_test "p ctable1\[251\]" " = 251 '\\\\373'"
|
|
gdb_test "p ctable1\[252\]" " = 252 '\\\\374'"
|
|
gdb_test "p ctable1\[253\]" " = 253 '\\\\375'"
|
|
gdb_test "p ctable1\[254\]" " = 254 '\\\\376'"
|
|
gdb_test "p ctable1\[255\]" " = 255 '\\\\377'"
|
|
}
|
|
}
|
|
|
|
# Test interaction of the number of print elements to print and the
|
|
# repeat count, set to the default of 10.
|
|
|
|
proc test_print_repeats_10 {} {
|
|
global gdb_prompt decimal
|
|
|
|
for { set x 1 } { $x <= 16 } { incr x } {
|
|
gdb_test_no_output "set print elements $x"
|
|
for { set e 1 } { $e <= 16 } {incr e } {
|
|
set v [expr $e - 1]
|
|
set command "p &ctable2\[${v}*16\]"
|
|
if { $x < $e } {
|
|
set aval $x
|
|
} else {
|
|
set aval $e
|
|
}
|
|
set xval [expr $x - $e]
|
|
if { $xval < 0 } {
|
|
set xval 0
|
|
}
|
|
if { $aval > 10 } {
|
|
set a "'a' <repeats $aval times>"
|
|
if { $xval > 0 } {
|
|
set a "${a}, \\\""
|
|
}
|
|
} else {
|
|
set a "\\\"[string range "aaaaaaaaaaaaaaaa" 1 $aval]"
|
|
if { $xval > 10 } {
|
|
set a "$a\\\", "
|
|
}
|
|
}
|
|
set xstr ""
|
|
if { $xval > 10 } {
|
|
set xstr "'X' <repeats $xval times>"
|
|
} else {
|
|
if { $xval > 0 } {
|
|
set xstr "[string range "XXXXXXXXXXXXXXXX" 1 $xval]\\\""
|
|
} else {
|
|
if { $aval <= 10 } {
|
|
set xstr "\\\""
|
|
}
|
|
}
|
|
}
|
|
if { $aval < 16 } {
|
|
set xstr "${xstr}\[.\]\[.\]\[.\]"
|
|
}
|
|
set string " = \[(\]unsigned char \[*\]\[)\] <ctable2(\\+$decimal)?> ${a}${xstr}"
|
|
gdb_test "$command" "$string" "$command with print elements set to $x"
|
|
}
|
|
}
|
|
}
|
|
|
|
# This tests whether GDB uses the correct element content offsets
|
|
# (relative to the complete `some_struct' value) when counting value
|
|
# repetitions.
|
|
|
|
proc test_print_repeats_embedded_array {} {
|
|
global gdb_prompt
|
|
|
|
gdb_test_escape_braces "p/x some_struct" \
|
|
"= {a = 0x12345678, b = 0x87654321, array = {0xaa <repeats 20 times>}}" \
|
|
"correct element repeats in array embedded at offset > 0"
|
|
}
|
|
|
|
proc test_print_strings {} {
|
|
global gdb_prompt decimal
|
|
|
|
# We accept "(unsigned char *) " before the string. char vs. unsigned char
|
|
# is already tested elsewhere.
|
|
|
|
# Test that setting print elements unlimited doesn't completely suppress
|
|
# printing; this was a bug in older gdb's.
|
|
gdb_test_no_output "set print elements 0"
|
|
gdb_test "p teststring" \
|
|
" = (.unsigned char .. )?\"teststring contents\"" "p teststring with elements set to 0"
|
|
gdb_test_no_output "set print elements 1"
|
|
gdb_test "p teststring" \
|
|
" = (.unsigned char .. )?\"t\"\\.\\.\\." "p teststring with elements set to 1"
|
|
gdb_test_no_output "set print elements 5"
|
|
gdb_test "p teststring" \
|
|
" = (.unsigned char .. )?\"tests\"\\.\\.\\." "p teststring with elements set to 5"
|
|
gdb_test_no_output "set print elements 19"
|
|
gdb_test "p teststring" \
|
|
" = (.unsigned char .. )?\"teststring contents\"" "p teststring with elements set to 19"
|
|
gdb_test_no_output "set print elements 20"
|
|
gdb_test "p teststring" \
|
|
" = (.unsigned char .. )?\"teststring contents\"" "p teststring with elements set to 20"
|
|
|
|
gdb_test_no_output "set print elements 8"
|
|
|
|
# Set the target-charset to ASCII, because the output varies from
|
|
# different charset.
|
|
with_target_charset "ASCII" {
|
|
gdb_test "p &ctable1\[0\]" \
|
|
" = \\(unsigned char \\*\\) <ctable1> \"\""
|
|
gdb_test "p &ctable1\[1\]" \
|
|
" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"\\\\001\\\\002\\\\003\\\\004\\\\005\\\\006\\\\a\\\\b\"..."
|
|
gdb_test "p &ctable1\[1*8\]" \
|
|
" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"\\\\b\\\\t\\\\n\\\\v\\\\f\\\\r\\\\016\\\\017\"..."
|
|
gdb_test "p &ctable1\[2*8\]" \
|
|
" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"\\\\020\\\\021\\\\022\\\\023\\\\024\\\\025\\\\026\\\\027\"..."
|
|
gdb_test "p &ctable1\[3*8\]" \
|
|
" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"\\\\030\\\\031\\\\032\\\\033\\\\034\\\\035\\\\036\\\\037\"..."
|
|
gdb_test "p &ctable1\[4*8\]" \
|
|
" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \" !\\\\\"#\\\$%&'\"..."
|
|
gdb_test "p &ctable1\[5*8\]" \
|
|
" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"\\(\\)\\*\\+,-./\"..."
|
|
gdb_test "p &ctable1\[6*8\]" \
|
|
" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"01234567\"..."
|
|
gdb_test "p &ctable1\[7*8\]" \
|
|
" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"89:;<=>\\?\"..."
|
|
gdb_test "p &ctable1\[8*8\]" \
|
|
" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"@ABCDEFG\"..."
|
|
gdb_test "p &ctable1\[9*8\]" \
|
|
" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"HIJKLMNO\"..."
|
|
gdb_test "p &ctable1\[10*8\]" \
|
|
" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"PQRSTUVW\"..."
|
|
gdb_test "p &ctable1\[11*8\]" \
|
|
" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"XYZ\\\[\\\\\\\\\\\]\\^_\"..."
|
|
gdb_test "p &ctable1\[12*8\]" \
|
|
" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"`abcdefg\"..."
|
|
gdb_test "p &ctable1\[13*8\]" \
|
|
" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"hijklmno\"..."
|
|
gdb_test "p &ctable1\[14*8\]" \
|
|
" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"pqrstuvw\"..."
|
|
gdb_test "p &ctable1\[15*8\]" \
|
|
" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"xyz\[{|}\]+\\~\\\\177\"..."
|
|
gdb_test "p &ctable1\[16*8\]" \
|
|
" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"\\\\200\\\\201\\\\202\\\\203\\\\204\\\\205\\\\206\\\\207\"..."
|
|
gdb_test "p &ctable1\[17*8\]" \
|
|
" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"\\\\210\\\\211\\\\212\\\\213\\\\214\\\\215\\\\216\\\\217\"..."
|
|
gdb_test "p &ctable1\[18*8\]" \
|
|
" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"\\\\220\\\\221\\\\222\\\\223\\\\224\\\\225\\\\226\\\\227\"..."
|
|
gdb_test "p &ctable1\[19*8\]" \
|
|
" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"\\\\230\\\\231\\\\232\\\\233\\\\234\\\\235\\\\236\\\\237\"..."
|
|
gdb_test "p &ctable1\[20*8\]" \
|
|
" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"\\\\240\\\\241\\\\242\\\\243\\\\244\\\\245\\\\246\\\\247\"..."
|
|
gdb_test "p &ctable1\[21*8\]" \
|
|
" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"\\\\250\\\\251\\\\252\\\\253\\\\254\\\\255\\\\256\\\\257\"..."
|
|
gdb_test "p &ctable1\[22*8\]" \
|
|
" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"\\\\260\\\\261\\\\262\\\\263\\\\264\\\\265\\\\266\\\\267\"..."
|
|
gdb_test "p &ctable1\[23*8\]" \
|
|
" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"\\\\270\\\\271\\\\272\\\\273\\\\274\\\\275\\\\276\\\\277\"..."
|
|
gdb_test "p &ctable1\[24*8\]" \
|
|
" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"\\\\300\\\\301\\\\302\\\\303\\\\304\\\\305\\\\306\\\\307\"..."
|
|
gdb_test "p &ctable1\[25*8\]" \
|
|
" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"\\\\310\\\\311\\\\312\\\\313\\\\314\\\\315\\\\316\\\\317\"..."
|
|
gdb_test "p &ctable1\[26*8\]" \
|
|
" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"\\\\320\\\\321\\\\322\\\\323\\\\324\\\\325\\\\326\\\\327\"..."
|
|
gdb_test "p &ctable1\[27*8\]" \
|
|
" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"\\\\330\\\\331\\\\332\\\\333\\\\334\\\\335\\\\336\\\\337\"..."
|
|
gdb_test "p &ctable1\[28*8\]" \
|
|
" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"\\\\340\\\\341\\\\342\\\\343\\\\344\\\\345\\\\346\\\\347\"..."
|
|
gdb_test "p &ctable1\[29*8\]" \
|
|
" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"\\\\350\\\\351\\\\352\\\\353\\\\354\\\\355\\\\356\\\\357\"..."
|
|
gdb_test "p &ctable1\[30*8\]" \
|
|
" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"\\\\360\\\\361\\\\362\\\\363\\\\364\\\\365\\\\366\\\\367\"..."
|
|
gdb_test "p &ctable1\[31*8\]" \
|
|
" = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"\\\\370\\\\371\\\\372\\\\373\\\\374\\\\375\\\\376\\\\377\"..."
|
|
}
|
|
}
|
|
|
|
proc test_print_int_arrays {} {
|
|
global gdb_prompt
|
|
|
|
gdb_test_no_output "set print elements 24"
|
|
|
|
gdb_test_escape_braces "p int1dim" \
|
|
" = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}"
|
|
gdb_test_escape_braces "p int2dim" \
|
|
" = {{0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11}}"
|
|
gdb_test_escape_braces "p int3dim" \
|
|
" = {{{0, 1}, {2, 3}, {4, 5}}, {{6, 7}, {8, 9}, {10, 11}}}"
|
|
gdb_test_escape_braces "p int4dim" \
|
|
" = {{{{0, 1}, {2, 3}, {4, 5}}, {{6, 7}, {8, 9}, {10, 11}}}}"
|
|
|
|
# Some checks for various output formats.
|
|
gdb_test_escape_braces "p/x int4dim" \
|
|
" = {{{{0x0, 0x1}, {0x2, 0x3}, {0x4, 0x5}}, {{0x6, 0x7}, {0x8, 0x9}, {0xa, 0xb}}}}"
|
|
gdb_test_escape_braces "p/z int4dim" \
|
|
" = {{{{0x0+0, 0x0+1}, {0x0+2, 0x0+3}, {0x0+4, 0x0+5}}, {{0x0+6, 0x0+7}, {0x0+8, 0x0+9}, {0x0+a, 0x0+b}}}}"
|
|
gdb_test_escape_braces "p/o int4dim" \
|
|
" = {{{{0, 01}, {02, 03}, {04, 05}}, {{06, 07}, {010, 011}, {012, 013}}}}"
|
|
gdb_test_escape_braces "p/t int4dim" \
|
|
" = {{{{0, 1}, {10, 11}, {100, 101}}, {{110, 111}, {1000, 1001}, {1010, 1011}}}}"
|
|
}
|
|
|
|
proc test_print_typedef_arrays {} {
|
|
global gdb_prompt
|
|
|
|
gdb_test_no_output "set print elements 24"
|
|
|
|
gdb_test_escape_braces "p a1" \
|
|
" = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20}"
|
|
gdb_test "p a1\[0\]" " = 2"
|
|
gdb_test "p a1\[9\]" " = 20"
|
|
|
|
gdb_test "p a2" \
|
|
" = \"abcd\""
|
|
gdb_test "p a2\[0\]" " = 97 'a'"
|
|
gdb_test "p a2\[3\]" " = 100 'd'"
|
|
|
|
# Regression test of null-stop; PR 11049.
|
|
gdb_test_no_output "set print null-stop on"
|
|
gdb_test "p a2" " = \"abcd\"" "print a2 with null-stop on"
|
|
gdb_test_no_output "set print null-stop off"
|
|
}
|
|
|
|
proc test_artificial_arrays {} {
|
|
# Send \026@ instead of just @ in case the kill character is @.
|
|
# \026 (ctrl-v) is to escape the next character (@), but it is
|
|
# not only unnecessary to do so on MingW hosts, but also harmful
|
|
# for the test because that character isn't recognized as an
|
|
# escape character.
|
|
set ctrlv "\026"
|
|
if [ishost *-*-mingw*] {
|
|
set ctrlv ""
|
|
}
|
|
gdb_test_escape_braces "p int1dim\[0\]${ctrlv}@2" " = {0, 1}" {p int1dim[0]@2}
|
|
gdb_test_escape_braces "p int1dim\[0\]${ctrlv}@2${ctrlv}@3" \
|
|
"({{0, 1}, {2, 3}, {4, 5}}|\[Cc\]annot.*)" \
|
|
{p int1dim[0]@2@3}
|
|
gdb_test_escape_braces {p/x (short [])0x12345678} \
|
|
" = ({0x1234, 0x5678}|{0x5678, 0x1234})"
|
|
}
|
|
|
|
proc test_print_char_arrays {} {
|
|
global gdb_prompt
|
|
global hex decimal
|
|
|
|
gdb_test_no_output "set print elements 24"
|
|
gdb_test_no_output "set print address on"
|
|
|
|
gdb_test "p arrays" \
|
|
" = {array1 = \"abc\", array2 = \"d\", array3 = \"e\", array4 = \"fg\", array5 = \"hij\"}"
|
|
|
|
gdb_test "p parrays" " = \\(struct some_arrays \\*\\) $hex <arrays>"
|
|
gdb_test "p parrays->array1" " = \"abc\""
|
|
gdb_test "p &parrays->array1" " = \\(unsigned char \\(\\*\\)\\\[4\\\]\\) $hex <arrays>"
|
|
gdb_test "p parrays->array2" " = \"d\""
|
|
gdb_test "p &parrays->array2" " = \\(unsigned char \\(\\*\\)\\\[1\\\]\\) $hex <arrays\\+$decimal>"
|
|
gdb_test "p parrays->array3" " = \"e\""
|
|
gdb_test "p &parrays->array3" " = \\(unsigned char \\(\\*\\)\\\[1\\\]\\) $hex <arrays\\+$decimal>"
|
|
gdb_test "p parrays->array4" " = \"fg\""
|
|
gdb_test "p &parrays->array4" " = \\(unsigned char \\(\\*\\)\\\[2\\\]\\) $hex <arrays\\+$decimal>"
|
|
gdb_test "p parrays->array5" " = \"hij\""
|
|
gdb_test "p &parrays->array5" " = \\(unsigned char \\(\\*\\)\\\[4\\\]\\) $hex <arrays\\+$decimal>"
|
|
|
|
gdb_test_no_output "set print address off"
|
|
}
|
|
|
|
proc test_print_string_constants {} {
|
|
global gdb_prompt
|
|
|
|
gdb_test_no_output "set print elements 50"
|
|
|
|
if [target_info exists gdb,cannot_call_functions] {
|
|
setup_xfail "*-*-*" 2416
|
|
fail "This target can not call functions"
|
|
return
|
|
}
|
|
|
|
# We need to up this because this can be really slow on some boards.
|
|
# (Test may involve inferior malloc() calls).
|
|
set timeout 60
|
|
|
|
gdb_test "p \"a string\"" " = \"a string\""
|
|
gdb_test "p \"embedded \\000 null\"" " = \"embedded \\\\000 null\""
|
|
gdb_test "p \"abcd\"\[2\]" " = 99 'c'"
|
|
gdb_test "p sizeof (\"abcdef\")" " = 7"
|
|
gdb_test "ptype \"foo\"" " = char \\\[4\\\]"
|
|
gdb_test "p *\"foo\"" " = 102 'f'"
|
|
gdb_test "ptype *\"foo\"" " = char"
|
|
gdb_test "p &*\"foo\"" " = \"foo\""
|
|
gdb_test "ptype &*\"foo\"" "type = char \\*"
|
|
gdb_test "p (char *)\"foo\"" " = \"foo\""
|
|
}
|
|
|
|
proc test_print_array_constants {} {
|
|
|
|
if [target_info exists gdb,cannot_call_functions] {
|
|
setup_xfail "*-*-*" 2416
|
|
fail "This target can not call functions"
|
|
return
|
|
}
|
|
|
|
# We need to up this because this can be really slow on some boards.
|
|
# (Test may involve inferior malloc() calls).
|
|
set timeout 60
|
|
|
|
gdb_test "print {'a','b','c'}" " = \"abc\""
|
|
gdb_test_escape_braces "print {0,1,2}" " = {0, 1, 2}"
|
|
gdb_test_escape_braces "print {(long)0,(long)1,(long)2}" " = {0, 1, 2}"
|
|
gdb_test_escape_braces "print {{0,1,2},{3,4,5}}" " = {{0, 1, 2}, {3, 4, 5}}"
|
|
gdb_test "print {4,5,6}\[2\]" " = 6"
|
|
gdb_test "print *&{4,5,6}\[1\]" "Attempt to take address of value not located in memory."
|
|
}
|
|
|
|
proc test_print_enums {} {
|
|
# Regression test for PR11827.
|
|
gdb_test "print some_volatile_enum" "enumvolval1"
|
|
|
|
gdb_test "print three" " = \\\(ONE \\| TWO\\\)"
|
|
}
|
|
|
|
proc test_printf {} {
|
|
gdb_test "printf \"x=%d,y=%d,z=%d\\n\", 5, 6, 7" "x=5,y=6,z=7"
|
|
gdb_test "printf \"string=%.4sxx\\n\", teststring" "string=testxx"
|
|
gdb_test "printf \"string=%sxx\\n\", teststring" \
|
|
"string=teststring contentsxx"
|
|
|
|
gdb_test "printf \"%f is fun\\n\", 1.0" "1\.0+ is fun"
|
|
|
|
# Test mixing args of different sizes.
|
|
gdb_test "printf \"x=%d,y=%f,z=%d\\n\", 5, 6.0, 7" "x=5,y=6\.0+,z=7"
|
|
gdb_test "printf \"%x %f, %c %x, %x, %f\\n\", 0xbad, -99.541, 'z',\
|
|
0xfeedface, 0xdeadbeef, 5.0" "bad -99.54\[0-9\]+, z feedface, deadbeef, 5.0+"
|
|
|
|
# Regression test for C lexer bug.
|
|
gdb_test "printf \"%c\\n\", \"x\"\[1,0\]" "x"
|
|
|
|
# Regression test for "%% at end of format string.
|
|
# See http://sourceware.org/bugzilla/show_bug.cgi?id=11345
|
|
gdb_test "printf \"%%%d%%\\n\", 5" "%5%"
|
|
|
|
# Some tests for missing format specifier after '%'.
|
|
gdb_test "printf \"%\", 0" "Incomplete format specifier at end of format string"
|
|
gdb_test "printf \"%.234\", 0" "Incomplete format specifier at end of format string"
|
|
gdb_test "printf \"%-\", 0" "Incomplete format specifier at end of format string"
|
|
gdb_test "printf \"%-23\", 0" "Incomplete format specifier at end of format string"
|
|
|
|
# Test for invalid printf flags on pointer types.
|
|
gdb_test "printf \"%#p\", 0" "Inappropriate modifiers to format specifier 'p' in printf"
|
|
gdb_test "printf \"% p\", 0" "Inappropriate modifiers to format specifier 'p' in printf"
|
|
gdb_test "printf \"%0p\", 0" "Inappropriate modifiers to format specifier 'p' in printf"
|
|
gdb_test "printf \"%+p\", 0" "Inappropriate modifiers to format specifier 'p' in printf"
|
|
|
|
|
|
gdb_test "define hibob\nprintf \"hi bob \"\nshell echo zzz\nprintf \"y\\n\"\nend" \
|
|
"" \
|
|
"create hibob command"
|
|
gdb_test "hibob" "hi bob zzz.*y" "run hibob command"
|
|
}
|
|
|
|
#Test printing DFP values with printf
|
|
proc test_printf_with_dfp {} {
|
|
|
|
# Test various dfp values, covering 32-bit, 64-bit and 128-bit ones
|
|
|
|
# _Decimal32 constants, which can support up to 7 digits
|
|
gdb_test "printf \"%Hf\\n\",1.2df" "1.2"
|
|
gdb_test "printf \"%Hf\\n\",-1.2df" "-1.2"
|
|
gdb_test "printf \"%Hf\\n\",1.234567df" "1.234567"
|
|
gdb_test "printf \"%Hf\\n\",-1.234567df" "-1.234567"
|
|
gdb_test "printf \"%Hf\\n\",1234567.df" "1234567"
|
|
gdb_test "printf \"%Hf\\n\",-1234567.df" "-1234567"
|
|
|
|
gdb_test "printf \"%Hf\\n\",1.2E1df" "12"
|
|
gdb_test "printf \"%Hf\\n\",1.2E10df" "1.2E\\+10"
|
|
gdb_test "printf \"%Hf\\n\",1.2E-10df" "1.2E-10"
|
|
|
|
# The largest exponent for 32-bit dfp value is 96.
|
|
gdb_test "printf \"%Hf\\n\",1.2E96df" "1.200000E\\+96"
|
|
|
|
# _Decimal64 constants, which can support up to 16 digits
|
|
gdb_test "printf \"%Df\\n\",1.2dd" "1.2"
|
|
gdb_test "printf \"%Df\\n\",-1.2dd" "-1.2"
|
|
gdb_test "printf \"%Df\\n\",1.234567890123456dd" "1.234567890123456"
|
|
gdb_test "printf \"%Df\\n\",-1.234567890123456dd" "-1.234567890123456"
|
|
gdb_test "printf \"%Df\\n\",1234567890123456.dd" "1234567890123456"
|
|
gdb_test "printf \"%Df\\n\",-1234567890123456.dd" "-1234567890123456"
|
|
|
|
gdb_test "printf \"%Df\\n\",1.2E1dd" "12"
|
|
gdb_test "printf \"%Df\\n\",1.2E10dd" "1.2E\\+10"
|
|
gdb_test "printf \"%Df\\n\",1.2E-10dd" "1.2E-10"
|
|
|
|
# The largest exponent for 64-bit dfp value is 384.
|
|
gdb_test "printf \"%Df\\n\",1.2E384dd" "1.200000000000000E\\+384"
|
|
|
|
# _Decimal128 constants, which can support up to 34 digits
|
|
gdb_test "printf \"%DDf\\n\",1.2dl" "1.2"
|
|
gdb_test "printf \"%DDf\\n\",-1.2dl" "-1.2"
|
|
gdb_test "printf \"%DDf\\n\",1.234567890123456789012345678901234dl" "1.234567890123456789012345678901234"
|
|
gdb_test "printf \"%DDf\\n\",-1.234567890123456789012345678901234dl" "-1.234567890123456789012345678901234"
|
|
gdb_test "printf \"%DDf\\n\",1234567890123456789012345678901234.dl" "1234567890123456789012345678901234"
|
|
gdb_test "printf \"%DDf\\n\",-1234567890123456789012345678901234.dl" "-1234567890123456789012345678901234"
|
|
|
|
gdb_test "printf \"%DDf\\n\",1.2E1dl" "12"
|
|
gdb_test "printf \"%DDf\\n\",1.2E10dl" "1.2E\\+10"
|
|
gdb_test "printf \"%DDf\\n\",1.2E-10dl" "1.2E-10"
|
|
|
|
# The largest exponent for 128-bit dfp value is 6144.
|
|
gdb_test "printf \"%DDf\\n\",1.2E6144dl" "1.200000000000000000000000000000000E\\+6144"
|
|
|
|
# GDB used to get this wrong.
|
|
gdb_test "printf \"%Hf %Hf\\n\",1.2df,1.3df" "1.2 1.3"
|
|
}
|
|
|
|
proc test_print_symbol {} {
|
|
gdb_test_no_output "set print symbol on"
|
|
|
|
gdb_test "print &three" " = .* <three>"
|
|
gdb_test "print parrays" " = .* <arrays>"
|
|
|
|
# In case somebody adds tests after this.
|
|
gdb_test_no_output "set print symbol off"
|
|
}
|
|
|
|
# Escape a left curly brace to prevent it from being interpreted as
|
|
# the beginning of a bound
|
|
proc gdb_test_escape_braces { args } {
|
|
|
|
set pattern [lindex $args 1]
|
|
regsub -all {\{[0-9]} $pattern {\\&} esc_pattern
|
|
gdb_test [lindex $args 0] $esc_pattern [lindex $args 2]
|
|
}
|
|
|
|
proc test_repeat_bytes {} {
|
|
set start(E) {}
|
|
set start(S) {a}
|
|
set start(L) {abaabbaaabbb}
|
|
set start(R) {'a' <repeats 20 times>}
|
|
set end(E) {}
|
|
set end(S) {c}
|
|
set end(L) {cdccddcccddd}
|
|
set end(R) {'c' <repeats 20 times>}
|
|
set invalid(S) {\\240}
|
|
set invalid(L) {\\240\\240\\240\\240}
|
|
set invalid(R) {'\\240' <repeats 20 times>}
|
|
|
|
set fmt(SSS) "\"%s%s%s\""
|
|
set fmt(SSR) "\"%s%s\", %s"
|
|
set fmt(SRS) "\"%s\", %s, \"%s\""
|
|
set fmt(RSS) "%s, \"%s%s\""
|
|
set fmt(RSR) "%s, \"%s\", %s"
|
|
set fmt(SRR) "\"%s\", %s, %s"
|
|
set fmt(RRS) "%s, %s, \"%s\""
|
|
set fmt(RRR) "%s, %s, %s"
|
|
|
|
set fmt(RS) "%s, \"%s\""
|
|
set fmt(RR) "%s, %s"
|
|
set fmt(SR) "\"%s\", %s"
|
|
set fmt(SS) "\"%s%s\""
|
|
|
|
# Set the target-charset to ASCII, because the output varies from
|
|
# different charset.
|
|
with_target_charset "ASCII" {
|
|
# Test the various permutations of invalid characters
|
|
foreach i [array names invalid] {
|
|
set I $i
|
|
|
|
if {$i == "L"} {
|
|
set i "S"
|
|
}
|
|
|
|
foreach s [array names start] {
|
|
set S $s
|
|
|
|
if {$s == "L"} {
|
|
set s "S"
|
|
}
|
|
|
|
|
|
foreach e [array names end] {
|
|
set E $e
|
|
|
|
if {$e == "L"} {
|
|
set e "S"
|
|
}
|
|
|
|
# Skip E*E.
|
|
if {$s == "E" && $e == "E"} { continue }
|
|
|
|
# Special cases...
|
|
if {$s == "E"} {
|
|
set result [format $fmt($i$e) $invalid($I) $end($E)]
|
|
} elseif {$e == "E"} {
|
|
set result [format $fmt($s$i) $start($S) $invalid($I)]
|
|
} else {
|
|
set result [format $fmt($s$i$e) \
|
|
$start($S) $invalid($I) $end($E)]
|
|
}
|
|
|
|
send_log "expecting: = $result\n"
|
|
gdb_test "print invalid_$S$I$E" "= $result"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
# Start with a fresh gdb.
|
|
|
|
gdb_exit
|
|
gdb_start
|
|
gdb_reinitialize_dir $srcdir/$subdir
|
|
|
|
gdb_test "print \$pc" "No registers\\."
|
|
|
|
# Some simple operations on strings should work even without a target
|
|
# (and therefore without calling malloc).
|
|
gdb_test "print \"abc\"" " = \"abc\""
|
|
gdb_test "print sizeof (\"abc\")" " = 4"
|
|
gdb_test "ptype \"abc\"" " = char \\\[4\\\]"
|
|
gdb_test "print \$cvar = \"abc\"" " = \"abc\""
|
|
gdb_test "print sizeof (\$cvar)" " = 4"
|
|
|
|
gdb_file_cmd ${binfile}
|
|
|
|
gdb_test "print \$pc" "No registers\\." "print \$pc (with file)"
|
|
|
|
gdb_test_no_output "set print sevenbit-strings"
|
|
gdb_test_no_output "set print address off"
|
|
gdb_test_no_output "set width 0"
|
|
|
|
if { [test_compiler_info "armcc-*"] } {
|
|
# ARM RealView compresses large arrays in the data segment.
|
|
# Before the program starts, we can not read them. There is
|
|
# nothing in the file to indicate that data is compressed.
|
|
setup_xfail "arm*-*-eabi"
|
|
}
|
|
gdb_test "p ctable1\[120\]" "120 'x'" "p ctable1\[120\] #1"
|
|
|
|
gdb_load ${binfile}
|
|
|
|
if ![runto_main] then {
|
|
fail "Can't run to main"
|
|
return 0
|
|
}
|
|
|
|
test_integer_literals_accepted
|
|
test_integer_literals_rejected
|
|
test_float_accepted
|
|
test_float_rejected
|
|
test_character_literals_accepted
|
|
test_print_all_chars
|
|
test_print_repeats_10
|
|
test_print_repeats_embedded_array
|
|
test_print_strings
|
|
test_print_int_arrays
|
|
test_print_typedef_arrays
|
|
test_artificial_arrays
|
|
test_print_char_arrays
|
|
# We used to do the runto main here.
|
|
test_print_string_constants
|
|
test_print_array_constants
|
|
test_print_enums
|
|
test_printf
|
|
test_printf_with_dfp
|
|
test_print_symbol
|
|
test_repeat_bytes
|