[review] Add bit-field test for scalar_storage_order
Commit Message
Change URL: https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/731
......................................................................
Add bit-field test for scalar_storage_order
This adds a bit-field test for scalar_storage_order.
gdb/testsuite/ChangeLog
2019-11-27 Tom Tromey <tromey@adacore.com>
* gdb.base/endianity.c (struct other) <x>: New field.
(main): Initialize it.
* gdb.base/endianity.exp: Update.
Change-Id: I9e07d1b3e08e7c3384832b68ef286afe1d11479a
---
M gdb/testsuite/ChangeLog
M gdb/testsuite/gdb.base/endianity.c
M gdb/testsuite/gdb.base/endianity.exp
3 files changed, 11 insertions(+), 3 deletions(-)
Comments
Simon Marchi has posted comments on this change.
Change URL: https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/731
......................................................................
Patch Set 1: Code-Review+2
LGTM.
When reading this, I wondered if you could arbitrarily nest structures with big and little endianness. I tested with:
#include <stdio.h>
struct gros
{
unsigned int a;
} __attribute__((scalar_storage_order("big-endian")));
struct petit
{
struct gros g;
unsigned int b;
} __attribute__((scalar_storage_order("little-endian")));
struct gros2
{
struct petit p;
unsigned int c;
} __attribute__((scalar_storage_order("big-endian")));
int main() {
struct gros2 g2;
g2.c = 256;
g2.p.b = 257;
g2.p.g.a = 258;
printf("%d %d %d\n", g2.c, g2.p.b, g2.p.g.a);
return 0;
}
It correctly prints this when you run it:
$ /tmp/a.out
256 257 258
But GDB prints:
(gdb) p g2
$1 = {p = {g = {a = 258}, b = 16842752}, c = 256}
It's not really the point of this patch though.
Tom Tromey has posted comments on this change.
Change URL: https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/731
......................................................................
Patch Set 1:
[...]
> But GDB prints:
>
> (gdb) p g2
> $1 = {p = {g = {a = 258}, b = 16842752}, c = 256}
>
> It's not really the point of this patch though.
My feeling is that this has to be a GCC bug, and it should emit the DWARF
differently. However I didn't look into this case in detail.
Tom Tromey has posted comments on this change.
Change URL: https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/731
......................................................................
Patch Set 1:
> Patch Set 1: Code-Review+2
>
> LGTM.
>
> When reading this, I wondered if you could arbitrarily nest structures with big and little endianness. I tested with:
I looked at the DWARF for this test case, and it seems fine, so now I'm
debugging gdb to see if there's something wrong there.
Tom Tromey has posted comments on this change.
Change URL: https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/731
......................................................................
Patch Set 1:
> Patch Set 1:
>
> > Patch Set 1: Code-Review+2
> >
> > LGTM.
> >
> > When reading this, I wondered if you could arbitrarily nest structures with big and little endianness. I tested with:
>
> I looked at the DWARF for this test case, and it seems fine, so now I'm
> debugging gdb to see if there's something wrong there.
I guess I tried the wrong version of gdb, because this test case works fine
with this series.
Simon Marchi has posted comments on this change.
Change URL: https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/731
......................................................................
Patch Set 2: Code-Review+2
@@ -1,5 +1,11 @@
2019-11-27 Tom Tromey <tromey@adacore.com>
+ * gdb.base/endianity.c (struct other) <x>: New field.
+ (main): Initialize it.
+ * gdb.base/endianity.exp: Update.
+
+2019-11-27 Tom Tromey <tromey@adacore.com>
+
* gdb.base/endianity.c (struct otherendian) <f>: New field.
(main): Initialize it.
* gdb.base/endianity.exp: Update.
@@ -21,6 +21,7 @@
{
int v;
short w;
+ unsigned x : 3;
float f;
__complex__ float cplx;
}
@@ -41,7 +42,7 @@
int
main (void)
{
- struct otherendian o = {3, 2, 23.5, 1.25 + 7.25i};
+ struct otherendian o = {3, 2, 7, 23.5, 1.25 + 7.25i};
do_nothing (&o); /* START */
}
@@ -25,11 +25,12 @@
return -1
}
-gdb_test "print o" "= {v = 3, w = 2, f = 23.5, cplx = 1.25 \\+ 7.25 \\* I}" \
+gdb_test "print o" "= {v = 3, w = 2, x = 7, f = 23.5, cplx = 1.25 \\+ 7.25 \\* I}" \
"print o before assignment"
gdb_test "print o.v = 4" "= 4"
gdb_test "print o.w = 3" "= 3"
+gdb_test "print o.x = 2" "= 2"
gdb_test "print o.f = 1.5" "= 1.5"
# scalar_storage_order requires gcc >= 6
@@ -39,5 +40,5 @@
gdb_test "x/x &o.v" "0x04000000"
gdb_test "x/xh &o.w" "0x0300"
-gdb_test "print o" "= {v = 4, w = 3, f = 1.5, cplx = 1.25 \\+ 7.25 \\* I}" \
+gdb_test "print o" "= {v = 4, w = 3, x = 2, f = 1.5, cplx = 1.25 \\+ 7.25 \\* I}" \
"print o after assignment"