mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-08-06 06:45:56 +08:00
Fix passing of struct with bitfields on x86-64
Commit 4aa866af ("Fix AMD64 return value ABI in expression evaluation") introduced a regression when calling a function with a structure that contains bitfields. Because the caller of amd64_has_unaligned_fields handles bitfields already, it seemed to me that the simplest fix was to ignore bitfields here. gdb/ChangeLog 2019-04-24 Tom Tromey <tromey@adacore.com> * amd64-tdep.c (amd64_has_unaligned_fields): Ignore bitfields. gdb/testsuite/ChangeLog 2019-04-24 Tom Tromey <tromey@adacore.com> * gdb.arch/amd64-eval.exp: Test bitfield return. * gdb.arch/amd64-eval.cc (struct Bitfields): New. (class Foo) <return_bitfields>: New method. (main): Call it.
This commit is contained in:
@ -555,11 +555,13 @@ amd64_has_unaligned_fields (struct type *type)
|
||||
int bitpos = TYPE_FIELD_BITPOS (type, i);
|
||||
int align = type_align(subtype);
|
||||
|
||||
/* Ignore static fields, or empty fields, for example nested
|
||||
empty structures. */
|
||||
/* Ignore static fields, empty fields (for example nested
|
||||
empty structures), and bitfields (these are handled by
|
||||
the caller). */
|
||||
if (field_is_static (&TYPE_FIELD (type, i))
|
||||
|| (TYPE_FIELD_BITSIZE (type, i) == 0
|
||||
&& TYPE_LENGTH (subtype) == 0))
|
||||
&& TYPE_LENGTH (subtype) == 0)
|
||||
|| TYPE_FIELD_PACKED (type, i))
|
||||
continue;
|
||||
|
||||
if (bitpos % 8 != 0)
|
||||
@ -569,7 +571,7 @@ amd64_has_unaligned_fields (struct type *type)
|
||||
if (bytepos % align != 0)
|
||||
return true;
|
||||
|
||||
if (amd64_has_unaligned_fields(subtype))
|
||||
if (amd64_has_unaligned_fields (subtype))
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user