From: Aditya Vidyadhar Kamath Date: Thu, 17 Nov 2022 12:50:35 +0000 (+0100) Subject: Fix call functions command bug in 64 bits programs for AIX X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=7aae1a86b30185224554d450e233ca967359b75d;p=binutils-gdb.git 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. --- diff --git a/gdb/rs6000-aix-tdep.c b/gdb/rs6000-aix-tdep.c index d47974b51d1..3efafbd10ab 100644 --- a/gdb/rs6000-aix-tdep.c +++ b/gdb/rs6000-aix-tdep.c @@ -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;