Fix call functions command bug in 64 bits programs for AIX

In AIX for 64 bit programs we need to zero extend variables
of integer or enum or char data type.

Otherwise a zero will get dumped in the register as we memset
our word to 0 and we copy non zero extended contents to the cache.
This commit is contained in:
Aditya Vidyadhar Kamath 2022-11-17 13:50:35 +01:00 committed by Ulrich Weigand
parent 1c01b23603
commit 7aae1a86b3

View File

@ -400,7 +400,15 @@ rs6000_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
gdb_byte word[PPC_MAX_REGISTER_SIZE];
memset (word, 0, reg_size);
memcpy (word, value_contents (arg).data (), len);
if (type->code () == TYPE_CODE_INT
|| type->code () == TYPE_CODE_ENUM
|| type->code () == TYPE_CODE_BOOL
|| type->code () == TYPE_CODE_CHAR)
/* Sign or zero extend the "int" into a "word". */
store_unsigned_integer (word, reg_size, byte_order,
unpack_long (type, value_contents (arg).data ()));
else
memcpy (word, value_contents (arg).data (), len);
regcache->cooked_write (tdep->ppc_gp0_regnum + 3 +ii, word);
}
++argno;