aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Tromey <tromey@adacore.com>2022-09-06 08:44:52 -0600
committerTom Tromey <tromey@adacore.com>2023-01-03 08:45:00 -0700
commit862ebb27bbe30768356776a10827dd1c0824d405 (patch)
tree3e146ef24057421894d83c846f122f7d604925dc
parentb46632ca16021962c33c2ea32b8104fd258ef0af (diff)
downloadgdb-862ebb27bbe30768356776a10827dd1c0824d405.zip
gdb-862ebb27bbe30768356776a10827dd1c0824d405.tar.gz
gdb-862ebb27bbe30768356776a10827dd1c0824d405.tar.bz2
Fix crash in amd64-tdep.c
amd64-tdep.c could crash when 'finish'ing from a function whose return type had variable length. In this situation, the value will be passed by reference, and this patch avoids the crash. (Note that this does not fully fix the bug reported, but it does fix the crash, so it seems worthwhile to land independently.)
-rw-r--r--gdb/amd64-tdep.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/gdb/amd64-tdep.c b/gdb/amd64-tdep.c
index b8cd818..0f2dab8 100644
--- a/gdb/amd64-tdep.c
+++ b/gdb/amd64-tdep.c
@@ -666,7 +666,8 @@ amd64_classify_aggregate (struct type *type, enum amd64_reg_class theclass[2])
loc_bitpos attributes, which will cause an assert to trigger within
the unaligned field check. As classes with virtual bases are not
trivially copyable, checking that first avoids this problem. */
- if (type->length () > 16
+ if (TYPE_HAS_DYNAMIC_LENGTH (type)
+ || type->length () > 16
|| !language_pass_by_reference (type).trivially_copyable
|| amd64_has_unaligned_fields (type))
{