From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 1094 invoked by alias); 18 Jan 2013 09:23:42 -0000 Received: (qmail 1081 invoked by uid 22791); 18 Jan 2013 09:23:41 -0000 X-SWARE-Spam-Status: No, hits=-2.1 required=5.0 tests=AWL,BAYES_00,RP_MATCHES_RCVD,TW_CP,TW_EG X-Spam-Check-By: sourceware.org Received: from usmamail.tilera.com (HELO USMAMAIL.TILERA.COM) (12.216.194.151) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 18 Jan 2013 09:23:35 +0000 Received: from localhost.localdomain (124.207.145.166) by USMAExch2.tad.internal.tilera.com (10.3.0.33) with Microsoft SMTP Server (TLS) id 14.0.694.0; Fri, 18 Jan 2013 04:23:34 -0500 Message-ID: <50F9148F.3010602@tilera.com> Date: Fri, 18 Jan 2013 09:23:00 -0000 From: Jiong Wang User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:13.0) Gecko/20120615 Thunderbird/13.0.1 MIME-Version: 1.0 To: CC: Walter Lee Subject: [RFC/TileGX 1/6] fix args alignment bug Content-Type: multipart/mixed; boundary="------------080203030702090708060904" Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2013-01/txt/msg00405.txt.bz2 --------------080203030702090708060904 Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit Content-length: 243 for tilegx, args pushed on stack should be aligned to 64bit. gdb/ChangeLog: * tilegx-tdep.c (tilegx_push_dummy_call): args pushed on stack should be aligned to 64bit. please review. --- Regards, Jiong Tilera Corporation. --------------080203030702090708060904 Content-Type: text/x-patch; name="0001-tilegx-tdep.c-tilegx_push_dummy_call-stack-alignment.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename*0="0001-tilegx-tdep.c-tilegx_push_dummy_call-stack-alignment.pa"; filename*1="tch" Content-length: 2034 --- gdb/tilegx-tdep.c | 20 ++++---------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/gdb/tilegx-tdep.c b/gdb/tilegx-tdep.c index 0c560ba..2f1d824 100644 --- a/gdb/tilegx-tdep.c +++ b/gdb/tilegx-tdep.c @@ -292,7 +292,7 @@ tilegx_push_dummy_call (struct gdbarch *gdbarch, int argreg = TILEGX_R0_REGNUM; int i, j; int typelen, slacklen, alignlen; - static const gdb_byte two_zero_words[8] = { 0 }; + static const gdb_byte four_zero_words[16] = { 0 }; /* If struct_return is 1, then the struct return address will consume one argument-passing register. */ @@ -326,18 +326,6 @@ tilegx_push_dummy_call (struct gdbarch *gdbarch, /* Align SP. */ stack_dest = tilegx_frame_align (gdbarch, stack_dest); - /* Loop backwards through arguments to determine stack alignment. */ - alignlen = 0; - - for (j = nargs - 1; j >= i; j--) - { - typelen = TYPE_LENGTH (value_enclosing_type (args[j])); - alignlen += (typelen + 3) & (~3); - } - - if (alignlen & 0x4) - stack_dest -= 4; - /* Loop backwards through remaining arguments and push them on the stack, word aligned. */ for (j = nargs - 1; j >= i; j--) @@ -347,7 +335,7 @@ tilegx_push_dummy_call (struct gdbarch *gdbarch, const gdb_byte *contents = value_contents (args[j]); typelen = TYPE_LENGTH (value_enclosing_type (args[j])); - slacklen = ((typelen + 3) & (~3)) - typelen; + slacklen = ((typelen + 7) & (~7)) - typelen; val = xmalloc (typelen + slacklen); back_to = make_cleanup (xfree, val); memcpy (val, contents, typelen); @@ -360,8 +348,8 @@ tilegx_push_dummy_call (struct gdbarch *gdbarch, } /* Add 2 words for linkage space to the stack. */ - stack_dest = stack_dest - 8; - write_memory (stack_dest, two_zero_words, 8); + stack_dest = stack_dest - 16; + write_memory (stack_dest, four_zero_words, 16); /* Update stack pointer. */ regcache_cooked_write_unsigned (regcache, TILEGX_SP_REGNUM, stack_dest); -- 1.7.10.3 --------------080203030702090708060904--