This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[RFC PATCH 2/2] fix py-value-cc.exp test for big endian target
- From: Victor Kamensky <victor dot kamensky at linaro dot org>
- To: gdb-patches at sourceware dot org, Yao Qi <yao at codesourcery dot com>
- Cc: Andrew Pinski <pinskia at gmail dot com>, victor dot kamensky at linaro dot org
- Date: Sun, 26 Oct 2014 20:16:18 -0700
- Subject: [RFC PATCH 2/2] fix py-value-cc.exp test for big endian target
- Authentication-results: sourceware.org; auth=none
- References: <1414379778-5478-1-git-send-email-victor dot kamensky at linaro dot org>
On any big endian target py-value-cc.exp fails like this:
FAIL: gdb.python/py-value-cc.exp: u's second field via field
python print(u[u_fields[1]])
0 '\000'
(gdb) FAIL: gdb.python/py-value-cc.exp: u's second field via field
The reason is that test case is not endian agnostic.
Test program variable 'u' has type of 'union U { int a;
char c; };'. Test program writes 99 into u.a and expects to see
it in field 'u.c'. But it would only work on little endian
system where 'c' field of U union conicide with least
significant byte of 'a' field.
Proposed fix stores "symetric" value into 'a' field of 'u',
so most siginificant byte and least siginifican byte of
are the same, so 'c' field would have the same value
regardless whether test runs on big endian or little endian
system.
gdb/testsuite/ChangeLog:
2014-10-24 Victor Kamensky <victor.kamensky@linaro.org>
* gdb.python/py-value-cc.cc (func): Store in u.a value
with same most and least significant bytes.
* gdb.python/py-value-cc.exp: Fix test for big endian
target.
---
gdb/testsuite/gdb.python/py-value-cc.cc | 2 +-
gdb/testsuite/gdb.python/py-value-cc.exp | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/gdb/testsuite/gdb.python/py-value-cc.cc b/gdb/testsuite/gdb.python/py-value-cc.cc
index 7ea4f5d..d6d4d35 100644
--- a/gdb/testsuite/gdb.python/py-value-cc.cc
+++ b/gdb/testsuite/gdb.python/py-value-cc.cc
@@ -77,7 +77,7 @@ func (const A &a)
Btd &b_td = b1;
U u;
- u.a = 99;
+ u.a = 0x55000055; /* c is the same for big and little endian */
X x;
x.x = 101;
diff --git a/gdb/testsuite/gdb.python/py-value-cc.exp b/gdb/testsuite/gdb.python/py-value-cc.exp
index 949f04f..56003c3 100644
--- a/gdb/testsuite/gdb.python/py-value-cc.exp
+++ b/gdb/testsuite/gdb.python/py-value-cc.exp
@@ -85,8 +85,8 @@ gdb_test "python print(b_td\[b_fields\[0\]\].type.target())" "A" \
gdb_test "python print(b_td\[b_fields\[0\]\]\['a'\])" "100" \
"b_td.A::a via field"
-gdb_test "python print(u\[u_fields\[0\]\])" "99.*" "u's first field via field"
-gdb_test "python print(u\[u_fields\[1\]\])" "99.*" "u's second field via field"
+gdb_test "python print(u\[u_fields\[0\]\])" "1426063445.*" "u's first field via field"
+gdb_test "python print(u\[u_fields\[1\]\])" "85.*" "u's second field via field"
gdb_test "python print len(x_fields)" "2" "number for fields in u"
gdb_test "python print x\[x_fields\[0\]\]\['x'\]" "101" "x.x via field"
--
1.8.1.4