public inbox for gdb-cvs@sourceware.org
help / color / mirror / Atom feed
* [binutils-gdb] gdb/testsuite: Fix py-format-string.exp on big-endian platforms
@ 2019-10-02 18:02 Andreas Arnez
  0 siblings, 0 replies; only message in thread
From: Andreas Arnez @ 2019-10-02 18:02 UTC (permalink / raw)
  To: gdb-cvs

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=9ef62df072d85d9cd0fadc90a3bd7f05e32ba9fd

commit 9ef62df072d85d9cd0fadc90a3bd7f05e32ba9fd
Author: Andreas Arnez <arnez@linux.ibm.com>
Date:   Wed Oct 2 20:01:44 2019 +0200

    gdb/testsuite: Fix py-format-string.exp on big-endian platforms
    
    GDB's py-format-string test case depends on endianness.  In particular it
    relies on the first byte of the machine representation of 42 (as an int)
    to be 42 as well.  While this is indeed the case for little-endian
    machines, big-endian machines store a zero in the first byte instead.  The
    wrong assumption leads to lots of FAILs on such architectures.
    
    Fix this by filling the affected union with bytes of the same value, such
    that endianness does not matter.  Use the value 42, to keep the character
    in the first byte unchanged.
    
    gdb/testsuite/ChangeLog:
    
    	* gdb.python/py-format-string.c (string.h): New include.
    	(main): Fill a_struct_with_union.the_union.an_int with bytes of
    	the same value, for endianness-independence.
    	* gdb.python/py-format-string.exp (default_regexp_dict)
    	(test_pretty_structs, test_format): Adjust expected output to the
    	changed initialization.

Diff:
---
 gdb/testsuite/ChangeLog                       | 9 +++++++++
 gdb/testsuite/gdb.python/py-format-string.c   | 6 +++++-
 gdb/testsuite/gdb.python/py-format-string.exp | 8 ++++----
 3 files changed, 18 insertions(+), 5 deletions(-)

diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index b6667f0..8f01b87 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,12 @@
+2019-10-02  Andreas Arnez  <arnez@linux.ibm.com>
+
+	* gdb.python/py-format-string.c (string.h): New include.
+	(main): Fill a_struct_with_union.the_union.an_int with bytes of
+	the same value, for endianness-independence.
+	* gdb.python/py-format-string.exp (default_regexp_dict)
+	(test_pretty_structs, test_format): Adjust expected output to the
+	changed initialization.
+
 2019-10-02  Tom Tromey  <tromey@adacore.com>
 
 	* gdb.ada/catch_ex_std.exp: Add $_ada_exception test.
diff --git a/gdb/testsuite/gdb.python/py-format-string.c b/gdb/testsuite/gdb.python/py-format-string.c
index 120ecce..017f920 100644
--- a/gdb/testsuite/gdb.python/py-format-string.c
+++ b/gdb/testsuite/gdb.python/py-format-string.c
@@ -15,6 +15,8 @@
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
+#include <string.h>
+
 typedef struct point
 {
   int x;
@@ -84,7 +86,9 @@ main ()
   struct point another_point = { 123, 456 };
 
   struct_union_t a_struct_with_union;
-  a_struct_with_union.the_union.an_int = 42;
+  /* Fill the union in an endianness-independent way.  */
+  memset (&a_struct_with_union.the_union, 42,
+	  sizeof (a_struct_with_union.the_union));
 
   enum_t an_enum = ENUM_BAR;
 
diff --git a/gdb/testsuite/gdb.python/py-format-string.exp b/gdb/testsuite/gdb.python/py-format-string.exp
index ebb2074..ad71fe0 100644
--- a/gdb/testsuite/gdb.python/py-format-string.exp
+++ b/gdb/testsuite/gdb.python/py-format-string.exp
@@ -124,7 +124,7 @@ set default_regexp_dict [dict create \
   "a_point_t_pointer"		$default_pointer_regexp \
   "a_point_t_ref"		"Pretty Point \\(42, 12\\)" \
   "another_point"		"Pretty Point \\(123, 456\\)" \
-  "a_struct_with_union"		"\\{the_union = \\{an_int = 42, a_char = 42 '\\*'\\}\\}" \
+  "a_struct_with_union"		"\\{the_union = \\{an_int = 707406378, a_char = 42 '\\*'\\}\\}" \
   "an_enum"			"ENUM_BAR" \
   "a_string"			"${default_pointer_regexp} \"hello world\"" \
   "a_binary_string"		"${default_pointer_regexp} \"hello\"" \
@@ -333,7 +333,7 @@ proc test_pretty_structs {} {
   global current_lang
 
   set a_struct_with_union_pretty \
-    "\\{\[\r\n\]+  the_union = \\{\[\r\n\]+    an_int = 42,\[\r\n\]+    a_char = 42 '\\*'\[\r\n\]+  \\}\[\r\n\]+\\}"
+    "\\{\[\r\n\]+  the_union = \\{\[\r\n\]+    an_int = 707406378,\[\r\n\]+    a_char = 42 '\\*'\[\r\n\]+  \\}\[\r\n\]+\\}"
 
   check_var_with_bool_opt "pretty_structs" "a_point_t"
   check_var_with_bool_opt "pretty_structs" "a_point_t_pointer"
@@ -814,7 +814,7 @@ proc test_format {} {
     check_format_string "a_point_t_pointer" $opts
     check_format_string "another_point" $opts
     check_format_string "a_struct_with_union" $opts \
-      "\\{the_union = \\{an_int = 0x2a, a_char = 0x2a\\}\\}"
+      "\\{the_union = \\{an_int = 0x2a2a2a2a, a_char = 0x2a\\}\\}"
     check_format_string "an_enum" $opts \
       "0x1"
     check_format_string "a_string" $opts \
@@ -851,7 +851,7 @@ proc test_format {} {
       $decimal_pointer_regexp
     check_format_string "another_point" $opts
     check_format_string "a_struct_with_union" $opts \
-      "\\{the_union = \\{an_int = 42, a_char = 42\\}\\}"
+      "\\{the_union = \\{an_int = 707406378, a_char = 42\\}\\}"
     check_format_string "an_enum" $opts \
       "1"
     check_format_string "a_string" $opts \


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2019-10-02 18:02 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-10-02 18:02 [binutils-gdb] gdb/testsuite: Fix py-format-string.exp on big-endian platforms Andreas Arnez

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).