diff options
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/NEWS | 6 | ||||
-rw-r--r-- | gdb/arch-utils.c | 2 | ||||
-rw-r--r-- | gdb/doc/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/doc/gdb.texinfo | 9 | ||||
-rw-r--r-- | gdb/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/endian.c | 22 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/endian.exp | 94 |
8 files changed, 149 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index eaf0ce1..c6c862f 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2018-05-31 Maciej W. Rozycki <macro@mips.com> + + * arch-utils.c (gdbarch_info_fill): Set `default_byte_order' to + the endianness selected. + * NEWS: Document `set endian auto' mode operation update. + 2018-05-31 Alan Hayward <alan.hayward@arm.com> * Makefile.in: Add new header. @@ -3,6 +3,12 @@ *** Changes since GDB 8.1 +* The endianness used with the 'set endian auto' mode in the absence of + an executable selected for debugging is now the last endianness chosen + either by one of the 'set endian big' and 'set endian little' commands + or by inferring from the last executable used, rather than the startup + default. + * The commands 'info variables/functions/types' now show the source line numbers of symbol definitions when available. diff --git a/gdb/arch-utils.c b/gdb/arch-utils.c index b3169ca..76bc16f 100644 --- a/gdb/arch-utils.c +++ b/gdb/arch-utils.c @@ -768,6 +768,8 @@ gdbarch_info_fill (struct gdbarch_info *info) if (info->byte_order == BFD_ENDIAN_UNKNOWN) info->byte_order = default_byte_order; info->byte_order_for_code = info->byte_order; + /* Wire the default to the last selected byte order. */ + default_byte_order = info->byte_order; /* "(gdb) set osabi ...". Handled by gdbarch_lookup_osabi. */ /* From the manual override, or from file. */ diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog index 798ff37..1689e89 100644 --- a/gdb/doc/ChangeLog +++ b/gdb/doc/ChangeLog @@ -1,3 +1,8 @@ +2018-05-31 Maciej W. Rozycki <macro@mips.com> + + * gdb.texinfo (Choosing Target Byte Order): Document endianness + selection details with the `set endian auto' mode. + 2018-05-04 Tom Tromey <tom@tromey.com> PR python/22731: diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 305f21a..2920022 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -20308,6 +20308,15 @@ Display @value{GDBN}'s current idea of the target byte order. @end table +If the @code{set endian auto} mode is in effect and no executable has +been selected, then the endianness used is the last one chosen either +by one of the @code{set endian big} and @code{set endian little} +commands or by inferring from the last executable used. If no +endianness has been previously chosen, then the default for this mode +is inferred from the target @value{GDBN} has been built for, and is +@code{little} if the name of the target CPU has an @code{el} suffix +and @code{big} otherwise. + Note that these commands merely adjust interpretation of symbolic data on the host, and that they have absolutely no effect on the target system. diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index b2938b1..c303d80 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-05-31 Maciej W. Rozycki <macro@mips.com> + + * gdb.base/endian.exp: New test. + * gdb.base/endian.c: New test source. + 2018-05-24 Andrew Burgess <andrew.burgess@embecosm.com> PR gdb/23203 diff --git a/gdb/testsuite/gdb.base/endian.c b/gdb/testsuite/gdb.base/endian.c new file mode 100644 index 0000000..867440c --- /dev/null +++ b/gdb/testsuite/gdb.base/endian.c @@ -0,0 +1,22 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright (C) 2018 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/>. */ + +int +main (void) +{ + return 0; +} diff --git a/gdb/testsuite/gdb.base/endian.exp b/gdb/testsuite/gdb.base/endian.exp new file mode 100644 index 0000000..f6682cd --- /dev/null +++ b/gdb/testsuite/gdb.base/endian.exp @@ -0,0 +1,94 @@ +# Copyright (C) 2018 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/>. + +# Test automatic endianness selection. + +standard_testfile + +set en_auto "The target endianness is set automatically" +set en_set "The target is assumed to be" + +clean_restart + +# First check that the automatic endianness is updated +# with the `set endian' command. +gdb_test "set endian auto" \ + "$en_auto \\\(currently \(\?:big\|little\) endian\\\)" \ + "default target endianness" +gdb_test "set endian big" "$en_set big endian" \ + "set target endianness" +gdb_test "set endian auto" "$en_auto \\\(currently big endian\\\)" \ + "auto target endianness" +gdb_test "set endian little" "$en_set little endian" \ + "set target endianness little" +gdb_test "set endian auto" "$en_auto \\\(currently little endian\\\)" \ + "auto target endianness little" +gdb_test "set endian big" "$en_set big endian" \ + "set target endianness big" +gdb_test "set endian auto" "$en_auto \\\(currently big endian\\\)" \ + "auto target endianness big" + +if { [build_executable ${testfile}.exp $testfile] } { + gdb_suppress_entire_file "$pf_prefix cannot build executable" +} + +if { [gdb_file_cmd $binfile] } { + gdb_suppress_entire_file "$pf_prefix cannot select executable" +} +set test "get target endianness" +if { [gdb_test_multiple "show endian" "$test" { + -re "$en_auto \\\(currently \(big\|little\) endian\\\).*$gdb_prompt" { + set endian $expect_out(1,string) + pass "$test" + } +}] } { + gdb_suppress_entire_file \ + "$pf_prefix cannot determine executable endianness" + set endian "" +} + +# Now check that the automatic endianness is updated +# according to the executable selected. +if { [gdb_unload] } { + gdb_suppress_entire_file "$pf_prefix cannot unselect executable" +} +gdb_test "set endian big" "$en_set big endian" \ + "override target endianness big" +gdb_test "set endian auto" "$en_auto \\\(currently big endian\\\)" \ + "override auto target endianness big" +if { [gdb_file_cmd $binfile] } { + gdb_suppress_entire_file "$pf_prefix cannot select executable" +} +gdb_test "show endian" "$en_auto \\\(currently $endian endian\\\)" \ + "previously big default executable endianness" +if { [gdb_unload] } { + gdb_suppress_entire_file "$pf_prefix cannot unselect executable" +} +gdb_test "show endian" "$en_auto \\\(currently $endian endian\\\)" \ + "previously big default no executable endianness" +gdb_test "set endian little" "$en_set little endian" \ + "override target endianness little" +gdb_test "set endian auto" "$en_auto \\\(currently little endian\\\)" \ + "override auto target endianness little" +if { [gdb_file_cmd $binfile] } { + gdb_suppress_entire_file "$pf_prefix cannot select executable" +} +gdb_test "show endian" "$en_auto \\\(currently $endian endian\\\)" \ + "previously little default executable endianness" +if { [gdb_unload] } { + gdb_suppress_entire_file "$pf_prefix cannot unselect executable" +} +gdb_test "show endian" "$en_auto \\\(currently $endian endian\\\)" \ + "previously little default no executable endianness" |