From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9263 invoked by alias); 31 Jul 2002 23:27:33 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 9256 invoked from network); 31 Jul 2002 23:27:32 -0000 Received: from unknown (HELO mx1.redhat.com) (66.187.233.31) by sources.redhat.com with SMTP; 31 Jul 2002 23:27:32 -0000 Received: from int-mx2.corp.redhat.com (nat-pool-rdu.redhat.com [172.16.52.200] (may be forged)) by mx1.redhat.com (8.11.6/8.11.6) with ESMTP id g6VNF8l19717 for ; Wed, 31 Jul 2002 19:15:08 -0400 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id g6VNRUu03004 for ; Wed, 31 Jul 2002 19:27:30 -0400 Received: from romulus.sfbay.redhat.com (IDENT:UXTg7+hRltx7k/9ZUjTSywnU3WS6EH4R@romulus.sfbay.redhat.com [172.16.27.251]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id g6VNRTm01937 for ; Wed, 31 Jul 2002 16:27:29 -0700 Received: (from kev@localhost) by romulus.sfbay.redhat.com (8.11.6/8.11.6) id g6VNRSt24329 for gdb-patches@sources.redhat.com; Wed, 31 Jul 2002 16:27:28 -0700 Date: Wed, 31 Jul 2002 16:32:00 -0000 From: Kevin Buettner Message-Id: <1020731232727.ZM24328@localhost.localdomain> To: gdb-patches@sources.redhat.com Subject: [RFA] mips_push_arguments: N32/N64 struct arguments MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-SW-Source: 2002-07/txt/msg00644.txt.bz2 The patch below addresses some details in how N32 and N64 struct and union arguments are passed. When using the SGI compiler, I'm seeing the following failures fixed with this patch: FAIL: gdb.base/call-ar-st.exp: print sum_array_print(10, *list1, *list2, *list3, *list4) FAIL: gdb.base/call-ar-st.exp: print print_long_arg_list, pattern 12 For N32, this patch depends upon my previous patch: [RFA] mips-tdep.c: Set mips_default_saved_regsize to 8 for N32 Okay to commit? * mips-tdep.c (mips_push_arguments): For N32 and N64 ABIs, don't write odd sized struct arguments living in registers to the stack. For small struct and union arguments not living in registers, don't shift the struct when writing to the stack. Index: mips-tdep.c =================================================================== RCS file: /cvs/src/src/gdb/mips-tdep.c,v retrieving revision 1.85 diff -u -p -r1.85 mips-tdep.c --- mips-tdep.c 31 Jul 2002 20:26:49 -0000 1.85 +++ mips-tdep.c 31 Jul 2002 23:07:27 -0000 @@ -2536,7 +2536,9 @@ mips_push_arguments (int nargs, /* Write this portion of the argument to the stack. */ if (argreg > MIPS_LAST_ARG_REGNUM - || odd_sized_struct + || (odd_sized_struct + && tdep->mips_abi != MIPS_ABI_N32 + && tdep->mips_abi != MIPS_ABI_N64) || fp_register_arg_p (typecode, arg_type)) { /* Should shorter than int integer values be @@ -2552,8 +2554,10 @@ mips_push_arguments (int nargs, typecode == TYPE_CODE_FLT) && len <= 4) longword_offset = MIPS_STACK_ARGSIZE - len; else if ((typecode == TYPE_CODE_STRUCT || - typecode == TYPE_CODE_UNION) && - TYPE_LENGTH (arg_type) < MIPS_STACK_ARGSIZE) + typecode == TYPE_CODE_UNION) + && TYPE_LENGTH (arg_type) < MIPS_STACK_ARGSIZE + && tdep->mips_abi != MIPS_ABI_N32 + && tdep->mips_abi != MIPS_ABI_N64) longword_offset = MIPS_STACK_ARGSIZE - len; }