From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1158) id 9B4E139960C0; Thu, 17 Nov 2022 12:51:52 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 9B4E139960C0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1668689512; bh=lfTh6s5cJJHHfeV+HQba0nbL5uVf6X1TlRPR8xeRPmU=; h=From:To:Subject:Date:From; b=rLx/1RqwFE0xFrbGyqzpyhMkYpaDkRuBKCVE3jXVAFbPUPdkWvQVQ4q7NzT7jGoh9 XjD9V9bJZ9rVo5Rx/BUK9/HEky2ZxUaiJ3ex+BqMW8nvvKOXmYH+sS6CFUta9xxNCK xEkqqtjf04IFGJt0219CGOXTqfjIV1RPS9D53l4k= Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: Ulrich Weigand To: gdb-cvs@sourceware.org Subject: [binutils-gdb] Fix call functions command bug in 64 bits programs for AIX X-Act-Checkin: binutils-gdb X-Git-Author: Aditya Vidyadhar Kamath X-Git-Refname: refs/heads/master X-Git-Oldrev: 1c01b23603766fbca4ed4dd12fdd710860e6038e X-Git-Newrev: 7aae1a86b30185224554d450e233ca967359b75d Message-Id: <20221117125152.9B4E139960C0@sourceware.org> Date: Thu, 17 Nov 2022 12:51:52 +0000 (GMT) List-Id: https://sourceware.org/git/gitweb.cgi?p=3Dbinutils-gdb.git;h=3D7aae1a86b301= 85224554d450e233ca967359b75d commit 7aae1a86b30185224554d450e233ca967359b75d Author: Aditya Vidyadhar Kamath Date: Thu Nov 17 13:50:35 2022 +0100 Fix call functions command bug in 64 bits programs for AIX =20 In AIX for 64 bit programs we need to zero extend variables of integer or enum or char data type. =20 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: --- gdb/rs6000-aix-tdep.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) 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, struc= t value *function, gdb_byte word[PPC_MAX_REGISTER_SIZE]; =20 memset (word, 0, reg_size); - memcpy (word, value_contents (arg).data (), len); + if (type->code () =3D=3D TYPE_CODE_INT + || type->code () =3D=3D TYPE_CODE_ENUM + || type->code () =3D=3D TYPE_CODE_BOOL + || type->code () =3D=3D 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;