aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog6
-rw-r--r--gdb/s390-tdep.c7
2 files changed, 11 insertions, 2 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 0f6c602..3e20ed5 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,9 @@
+2001-11-15 Jim Blandy <jimb@redhat.com>
+
+ * s390-tdep.c (is_simple_arg): Structs and unions exactly eight
+ bytes long should be handled as DOUBLE_ARGs; don't recognize them
+ as SIMPLE_ARGs.
+
2001-11-12 Andrew Cagney <ac131313@redhat.com>
* remote.c (struct packet_reg): Declare.
diff --git a/gdb/s390-tdep.c b/gdb/s390-tdep.c
index d2fa1a0..d79654d 100644
--- a/gdb/s390-tdep.c
+++ b/gdb/s390-tdep.c
@@ -1243,10 +1243,13 @@ is_simple_arg (struct type *type)
enum type_code code = TYPE_CODE (type);
unsigned length = TYPE_LENGTH (type);
+ /* This is almost a direct translation of the ABI's language, except
+ that we have to exclude 8-byte structs; those are DOUBLE_ARGs. */
return ((is_integer_like (type) && length <= 4)
|| is_pointer_like (type)
- || code == TYPE_CODE_STRUCT
- || code == TYPE_CODE_UNION
+ || ((code == TYPE_CODE_STRUCT
+ || code == TYPE_CODE_UNION)
+ && length != 8)
|| (code == TYPE_CODE_FLT && length == 16));
}