From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 3787 invoked by alias); 22 Aug 2002 18:09:57 -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 3779 invoked from network); 22 Aug 2002 18:09:56 -0000 Received: from unknown (HELO cygnus.com) (205.180.83.203) by sources.redhat.com with SMTP; 22 Aug 2002 18:09:56 -0000 Received: from redhat.com (reddwarf.sfbay.redhat.com [172.16.24.50]) by runyon.cygnus.com (8.8.7-cygnus/8.8.7) with ESMTP id LAA03605; Thu, 22 Aug 2002 11:04:03 -0700 (PDT) Message-ID: <3D65250B.51A65480@redhat.com> Date: Thu, 22 Aug 2002 11:12:00 -0000 From: Michael Snyder Organization: Red Hat, Inc. X-Accept-Language: en MIME-Version: 1.0 To: Jim Blandy CC: gdb-patches@sources.redhat.com, kevinb@redhat.com, cagney@redhat.com Subject: Re: [RFC] fixing extract_struct_value_address References: <3D6418C5.FBF117D@redhat.com> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-SW-Source: 2002-08/txt/msg00700.txt.bz2 Jim Blandy wrote: > > Michael Snyder writes: > > Problem: Find a function's return value when it is a struct > > returned by reference (thru a pointer). > > > > Solution level one: Take the value of the register that was > > used by the caller to pass the struct return address. > > > > Shortcoming: that register isn't preserved, so may be clobbered. > > > > Solution level two: Save the struct_return address when it > > is passed to store_struct_return (or push_arguments), and > > recover it when it is needed by extract_struct_value_address. > > > > Shortcoming: Not reentrant. Nested function calls will clobber it. > > > > Proposed solution: create a stack structure, and "push" the > > struct_return address in store_struct_return, popping it in > > extract_return_address. If you can't find it on the stack, > > then use the value of the appropriate arg0 register. > > > > I think this should work for most targets, so the code for > > managing the stack can be shared. > > Doesn't this stack push and pop exactly as the generic dummy frame > stack does? Couldn't we just add a `struct_return_addr' field to > `struct dummy_frame'? Mmmmm, yes and no... the generic dummy frame's data structure is not implemented as a stack -- although now that you mention it, maybe it should be. Functionally it may act like one... Adding such a field to the generic dummy frame is a good idea -- but some architectures don't use the generic dummy frames.