From patchwork Thu Mar 7 15:23:28 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Burgess X-Patchwork-Id: 31767 Received: (qmail 105022 invoked by alias); 7 Mar 2019 15:23:37 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 104770 invoked by uid 89); 7 Mar 2019 15:23:37 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-15.1 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.1 spammy=24120, tracker, Moved, scm X-HELO: mail-wm1-f51.google.com Received: from mail-wm1-f51.google.com (HELO mail-wm1-f51.google.com) (209.85.128.51) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 07 Mar 2019 15:23:35 +0000 Received: by mail-wm1-f51.google.com with SMTP id a188so9572743wmf.3 for ; Thu, 07 Mar 2019 07:23:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=4jf2NTNNc5c7rGuo2Nh1eSKirmmaBBOUXrKel0dS/7Q=; b=J57XrhonrmBuAWVYn0RvIbhzUfIANWdAp1ZVNGTOLyZduTBu8zaYwXFHPNh0sx7e3J JW6C8OEhwdREGVBLZfwk6L4ovx5mdeq5C0c6D0OZFBcsLJbqihHk9rxmfv+aUaHFCyK6 zn/uqkvGUcvKMj+Hfgyztm9+Xl1dDig5ZGWduKamwpPmCSL3vF+3REQRf3wl8VMm4WBD GRhbDDEYjah4B36AsadB3OfMOFFiTNdy1Zu8v3uxaeyPenewf7fKADcx5492SCwzQfhB clUWi49bn3ZjG0b9t1zK14y5qKimk9Z5KwbPn6/6X66r+Et6OBxcvwYpwSNv8TKpz8+s nfUw== Return-Path: Received: from localhost (host86-142-70-198.range86-142.btcentralplus.com. [86.142.70.198]) by smtp.gmail.com with ESMTPSA id c18sm8041480wre.88.2019.03.07.07.23.31 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 07 Mar 2019 07:23:31 -0800 (PST) From: Andrew Burgess To: gdb-patches@sourceware.org Cc: Tom Tromey , Andrew Burgess Subject: [PATCH] gdb: Move value_from_host_double into value.c and make more use of it Date: Thu, 7 Mar 2019 15:23:28 +0000 Message-Id: <20190307152328.12891-1-andrew.burgess@embecosm.com> In-Reply-To: <87y35rom1h.fsf@tromey.com> References: <87y35rom1h.fsf@tromey.com> X-IsSubscribed: yes Something like this? --- The function value_from_host_double can be moved from f-lang.c into value.c as a generally useful function, and then used more widely. Tested on X86-64/GNU Linux with no regressions. gdb/ChangeLog: * f-lang.c (value_from_host_double): Moved to... * value.c (value_from_host_double): ...here. * value.h (value_from_host_double): Declare. * guile/scm-math.c (vlscm_convert_typed_number): Use value_from_host_double. (vlscm_convert_number): Likewise. * guile/scm-value.c (gdbscm_value_to_real): Likewise. * python/py-value.c (convert_value_from_python): Likewise. --- gdb/ChangeLog | 11 +++++++++++ gdb/f-lang.c | 14 -------------- gdb/guile/scm-math.c | 16 ++-------------- gdb/guile/scm-value.c | 3 +-- gdb/python/py-value.c | 6 +----- gdb/value.c | 13 +++++++++++++ gdb/value.h | 1 + 7 files changed, 29 insertions(+), 35 deletions(-) diff --git a/gdb/f-lang.c b/gdb/f-lang.c index 24f0e61a46b..7bd119690b4 100644 --- a/gdb/f-lang.c +++ b/gdb/f-lang.c @@ -241,20 +241,6 @@ f_collect_symbol_completion_matches (completion_tracker &tracker, text, word, ":", code); } -/* Create and return a value object of TYPE containing the value D. The - TYPE must be of TYPE_CODE_FLT, and must be large enough to hold D once - it is converted to target format. */ - -static struct value * -value_from_host_double (struct type *type, double d) -{ - struct value *value = allocate_value (type); - gdb_assert (TYPE_CODE (type) == TYPE_CODE_FLT); - target_float_from_host_double (value_contents_raw (value), - value_type (value), d); - return value; -} - /* Special expression evaluation cases for Fortran. */ struct value * evaluate_subexp_f (struct type *expect_type, struct expression *exp, diff --git a/gdb/guile/scm-math.c b/gdb/guile/scm-math.c index a31a1455487..d351ed0522c 100644 --- a/gdb/guile/scm-math.c +++ b/gdb/guile/scm-math.c @@ -559,13 +559,7 @@ vlscm_convert_typed_number (const char *func_name, int obj_arg_pos, SCM obj, } } else if (TYPE_CODE (type) == TYPE_CODE_FLT) - { - struct value *value = allocate_value (type); - target_float_from_host_double (value_contents_raw (value), - value_type (value), - scm_to_double (obj)); - return value; - } + return value_from_host_double (type, scm_to_double (obj)); else { *except_scmp = gdbscm_make_type_error (func_name, obj_arg_pos, obj, @@ -645,13 +639,7 @@ vlscm_convert_number (const char *func_name, int obj_arg_pos, SCM obj, gdbscm_scm_to_ulongest (obj)); } else if (scm_is_real (obj)) - { - struct value *value = allocate_value (bt->builtin_double); - target_float_from_host_double (value_contents_raw (value), - value_type (value), - scm_to_double (obj)); - return value; - } + return value_from_host_double (bt->builtin_double, scm_to_double (obj)); *except_scmp = gdbscm_make_out_of_range_error (func_name, obj_arg_pos, obj, _("value not a number representable on the target")); diff --git a/gdb/guile/scm-value.c b/gdb/guile/scm-value.c index 294e3e7cafc..658924b1197 100644 --- a/gdb/guile/scm-value.c +++ b/gdb/guile/scm-value.c @@ -903,8 +903,7 @@ gdbscm_value_to_real (SCM self) if (is_floating_value (value)) { d = target_float_to_host_double (value_contents (value), type); - check = allocate_value (type); - target_float_from_host_double (value_contents_raw (check), type, d); + check = value_from_host_double (type, d); } else if (TYPE_UNSIGNED (type)) { diff --git a/gdb/python/py-value.c b/gdb/python/py-value.c index 63a9952e513..dd6a536b6ad 100644 --- a/gdb/python/py-value.c +++ b/gdb/python/py-value.c @@ -1739,11 +1739,7 @@ convert_value_from_python (PyObject *obj) double d = PyFloat_AsDouble (obj); if (! PyErr_Occurred ()) - { - value = allocate_value (builtin_type_pyfloat); - target_float_from_host_double (value_contents_raw (value), - value_type (value), d); - } + value = value_from_host_double (builtin_type_pyfloat, d); } else if (gdbpy_is_string (obj)) { diff --git a/gdb/value.c b/gdb/value.c index 50e47a936aa..dc297dfe0f9 100644 --- a/gdb/value.c +++ b/gdb/value.c @@ -3430,6 +3430,19 @@ value_from_pointer (struct type *type, CORE_ADDR addr) return val; } +/* Create and return a value object of TYPE containing the value D. The + TYPE must be of TYPE_CODE_FLT, and must be large enough to hold D once + it is converted to target format. */ + +struct value * +value_from_host_double (struct type *type, double d) +{ + struct value *value = allocate_value (type); + gdb_assert (TYPE_CODE (type) == TYPE_CODE_FLT); + target_float_from_host_double (value_contents_raw (value), + value_type (value), d); + return value; +} /* Create a value of type TYPE whose contents come from VALADDR, if it is non-null, and whose memory address (in the inferior) is diff --git a/gdb/value.h b/gdb/value.h index 1ca91e041a1..d3905cc354a 100644 --- a/gdb/value.h +++ b/gdb/value.h @@ -669,6 +669,7 @@ extern void pack_long (gdb_byte *buf, struct type *type, LONGEST num); extern struct value *value_from_longest (struct type *type, LONGEST num); extern struct value *value_from_ulongest (struct type *type, ULONGEST num); extern struct value *value_from_pointer (struct type *type, CORE_ADDR addr); +extern struct value *value_from_host_double (struct type *type, double d); extern struct value *value_from_history_ref (const char *, const char **); extern struct value *value_from_component (struct value *, struct type *, LONGEST);