From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 7120 invoked by alias); 1 Oct 2014 00:42:23 -0000 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 Received: (qmail 7109 invoked by uid 89); 1 Oct 2014 00:42:22 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-3.2 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_LOW,RP_MATCHES_RCVD,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-oi0-f46.google.com Received: from mail-oi0-f46.google.com (HELO mail-oi0-f46.google.com) (209.85.218.46) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Wed, 01 Oct 2014 00:42:21 +0000 Received: by mail-oi0-f46.google.com with SMTP id h136so72705oig.33 for ; Tue, 30 Sep 2014 17:42:20 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:content-type; bh=rC7gZSNMbkHA+xMQT+6KfGkVpkeCNoL7rml/u4U30u8=; b=JwaqMmh4YUn891wl0Zx6+IuZis8M4Me+AMZCqK9/pe+u1y4d7ELrgw6AWx2//8ClE+ TInFKT3eLnNI+J8fh176VvdIh5PzfnEc3HVT5vucoqTqV9KiZCiTrtHHaTHPaPCk9/7C AuEWzs5IXqX3YOfSCoMbyRrveFEed/uD5WJIkFq90uQDc/a+cqY0MXfD7TcvtFOjIjwW u1MoAztcXNALse8XYJ9hw8X3D7j/0QgVsYXslMFHxBKhhv1AoYye2z8aVzW1vlLGTXe1 Vdgj1HXTn1iQr44St2MwmLfj2ilq7nBMbDmsVf2cJGN2SYNtxPqvNImTTfcONXDWDdG1 AaIg== X-Gm-Message-State: ALoCoQloqXNwondkFM90Rboe1/xc2iY5q4DMkW3nH5+6jzkpBUtK+bUvcOkWEJZA6HnGAKuSqDRJ MIME-Version: 1.0 X-Received: by 10.182.18.101 with SMTP id v5mr15896016obd.64.1412124139892; Tue, 30 Sep 2014 17:42:19 -0700 (PDT) Received: by 10.202.197.13 with HTTP; Tue, 30 Sep 2014 17:42:19 -0700 (PDT) In-Reply-To: References: Date: Wed, 01 Oct 2014 00:42:00 -0000 Message-ID: Subject: Re: [PATCH 0/2] Make chained function calls in expressions work From: Siva Chandra To: gdb-patches Content-Type: text/plain; charset=UTF-8 X-IsSubscribed: yes X-SW-Source: 2014-10/txt/msg00000.txt.bz2 On Fri, Sep 26, 2014 at 6:29 AM, Siva Chandra wrote: > This patch series enables having chained function calls in > expressions. An example of a chained function call is shown in PR > c++/11606. It has an example of a chain of two function calls. This > patch series enables chains of any number of function calls. > > Currently, an inferior function call is handled via > call_function_by_hand. The value returned by the inferior function is > copied into a GDB value whose lval_type is not_lval. Its contents are > stored within the value irrespective of whether the return value is in > inferior memory or in a register. Consequently, any subsequent > function call in the expression which requires this value's address as > an argument throws an error as the value is not in inferior memory. > > This patch series keeps most of the current flow intact, except that > the value returned by the inferior function is made to be a new > lval_type called lval_mirrored_on_inferior_stack. These values have a > mirrored value of lval_type lval_memory which reside on the inferior > stack. They reside on the stack only for the duration for which the > expression is evaluated. This enables value_address to return the > address of the stack mirror instead of throwing an error. > > Patch 1/2 - Adds new lval_type named lval_mirrored_on_inferior_stack. > Also adds support for values with this lval_type. > Patch 2/2 - Enables chained function calls by mirroring values > returned by inferior functions in the inferior stack. > > Patch 2/2 only targets values returned by call_function_by_hand. I > think similar things can done for call_internal_function and > call_xmethod. I will extend the idea to these functions as well after > this patch series is approved (if at all). I used global state in patch 2/2. I thought eliminating that would not be a straightforward task. However, I spent time looking into it and it turned out to be much simpler than I had anticipated. I have now updated both 1/2 and 2/2 to not use any global state. I have also regression tested and found that a known failure now passes. Will follow up with v2 of 1/2 and 2/2 both. Thanks, Siva Chandra