From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 27303 invoked by alias); 26 Sep 2002 17:46:21 -0000 Mailing-List: contact gdb-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sources.redhat.com Received: (qmail 27296 invoked from network); 26 Sep 2002 17:46:20 -0000 Received: from unknown (HELO localhost.redhat.com) (66.30.197.194) by sources.redhat.com with SMTP; 26 Sep 2002 17:46:20 -0000 Received: by localhost.redhat.com (Postfix, from userid 469) id 21722FE71; Thu, 26 Sep 2002 13:43:18 -0400 (EDT) From: Elena Zannoni MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15763.18230.7231.652861@localhost.redhat.com> Date: Thu, 26 Sep 2002 10:46:00 -0000 To: "Clarke, Stephen" Cc: "Elena Zannoni" , Subject: RE: sh4 abi doc In-Reply-To: <287E4644B5249D449C56FA5409A874AE03EFB9@sh-us-ex01.us.w2k.superh.com> References: <287E4644B5249D449C56FA5409A874AE03EFB9@sh-us-ex01.us.w2k.superh.com> X-SW-Source: 2002-09/txt/msg00440.txt.bz2 Clarke, Stephen writes: > > > > From: Elena Zannoni [mailto:ezannoni@redhat.com] > > Sent: Thursday, September 26, 2002 9:51 AM > > > in the meantime, do you know what is the official rule for returning > > results on the stack, instead of in the return register? > > Seems that gdb and gcc are disagreeing on this. > > Gdb expects structs to be returned on the stack if their size is > 1. > > Here's what we have: > > "Aggregate types not bigger than 8 bytes that have the same size and > alignment as one of the integer scalar types are returned in the same > registers as the integer type they match. > > "For example, a 2-byte aligned structure with size 2 bytes has the > same size and alignment as a short int, and will be returned in R0. > A 4-byte aligned structure with size 8 bytes has the same size and > alignment as a long long int, and will be returned in R0 and R1. > > "When an aggregate type is returned in R0 and R1, R0 contains the first > four bytes of the aggregate, and R1 contains the remainder. If the size > of the aggregate type is not a multiple of 4 bytes, the aggregate is > tail-padded up to a multiple of 4 bytes. The value of the padding is > undefined. > > "All other aggregate types are returned by address. The caller function > passes the address of an area large enough to hold the aggregate value > in R2. The called function stores the result in this location." > Ah, so gdb is wrong. The cutoff is 8 bytes. > I hope that makes sense, it was difficult to describe both clearly and > accurately! > yes. except for BE/LE differences. But you clarified that already. > Actually, the SH-4 ABI documentation that Red Hat supplies with > the gnupro tools says the same thing in fewer words, but (IMO) > not as clearly. > Doh, I should have thought about that. Elena > Steve.