mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-07-15 05:01:13 +08:00
gdb/amd64: Ignore zero sized fields when calling functions
In some cases passing an argument to a function on amd64, or attempting to fetch the return value, can trigger an assertion failure within GDB. An example of a type that would trigger such an error is: struct foo_t { long double a; struct { struct { /* Empty. */ } es1; } s1; }; GCC does permit empty structures, so we should probably support this. The test that exposes this bug is in the next commit along with the RiscV support. gdb/ChangeLog: * amd64-tdep.c (amd64_classify_aggregate): Ignore zero sized fields within aggregates.
This commit is contained in:
@ -1,3 +1,8 @@
|
||||
2018-03-06 Andrew Burgess <andrew.burgess@embecosm.com>
|
||||
|
||||
* amd64-tdep.c (amd64_classify_aggregate): Ignore zero sized
|
||||
fields within aggregates.
|
||||
|
||||
2018-03-04 Simon Marchi <simon.marchi@polymtl.ca>
|
||||
|
||||
* record-btrace.c (btrace_print_lines): Change type of flags to
|
||||
|
@ -601,8 +601,9 @@ amd64_classify_aggregate (struct type *type, enum amd64_reg_class theclass[2])
|
||||
bitsize = TYPE_LENGTH (subtype) * 8;
|
||||
endpos = (TYPE_FIELD_BITPOS (type, i) + bitsize - 1) / 64;
|
||||
|
||||
/* Ignore static fields. */
|
||||
if (field_is_static (&TYPE_FIELD (type, i)))
|
||||
/* Ignore static fields, or empty fields, for example nested
|
||||
empty structures.*/
|
||||
if (field_is_static (&TYPE_FIELD (type, i)) || bitsize == 0)
|
||||
continue;
|
||||
|
||||
gdb_assert (pos == 0 || pos == 1);
|
||||
|
Reference in New Issue
Block a user