diff options
author | Andrew Burgess <andrew.burgess@embecosm.com> | 2019-03-07 14:53:37 +0000 |
---|---|---|
committer | Andrew Burgess <andrew.burgess@embecosm.com> | 2019-03-07 14:53:37 +0000 |
commit | 7584bb30cf380cff9cc3914b1b523c5a1a5b4302 (patch) | |
tree | 6a6bf77b40345eadf32c168a602575d5ab347fcd | |
parent | 2c5ebf12393443eec1d666f613cbc70a6b72f49a (diff) | |
download | gdb-7584bb30cf380cff9cc3914b1b523c5a1a5b4302.zip gdb-7584bb30cf380cff9cc3914b1b523c5a1a5b4302.tar.gz gdb-7584bb30cf380cff9cc3914b1b523c5a1a5b4302.tar.bz2 |
gdb: Move value_from_host_double into value.c and make more use of it
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.
-rw-r--r-- | gdb/ChangeLog | 11 | ||||
-rw-r--r-- | gdb/f-lang.c | 14 | ||||
-rw-r--r-- | gdb/guile/scm-math.c | 16 | ||||
-rw-r--r-- | gdb/guile/scm-value.c | 3 | ||||
-rw-r--r-- | gdb/python/py-value.c | 6 | ||||
-rw-r--r-- | gdb/value.c | 13 | ||||
-rw-r--r-- | gdb/value.h | 1 |
7 files changed, 29 insertions, 35 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 9e03e85..d3d6e5b 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,14 @@ +2019-03-07 Andrew Burgess <andrew.burgess@embecosm.com> + + * 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. + 2019-03-06 Tom Tromey <tom@tromey.com> * gcore.c (write_gcore_file): Use SCOPE_EXIT. diff --git a/gdb/f-lang.c b/gdb/f-lang.c index 24f0e61..7bd1196 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 a31a145..d351ed0 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 294e3e7..658924b 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 63a9952..dd6a536 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 50e47a9..dc297df 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 1ca91e0..d3905cc 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); |