Re: RFA: move value_from_contents_and_address to value.c

Tom Tromey
2008-11-24T20:11:18Z

>>>>> "Joel" == Joel Brobecker <brobecker@adacore.com> writes:

Joel> I'm wondering whether the offset parameter is really necessary? Would it
Joel> be worse to call this function with valaddr+embedded_offset rather
Joel> than passing two arguments?

Here is an updated patch which dispenses with this argument.

Built and regtested on x86-64 (compile farm).

Ok?

Tom

2008-11-24 Tom Tromey <tromey@redhat.com>

* ada-lang.c (value_from_contents_and_address): Move...
* value.c: ... here.
* ada-lang.h (value_from_contents_and_address): Move
declaration...
* value.h: ... here.

diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c
index f92d23b..d27416f 100644
--- a/gdb/ada-lang.c
+++ b/gdb/ada-lang.c
@@ -465,26 +465,6 @@ is_suffix (const char *str, const char *suffix)
return (len1 >= len2 && strcmp (str + len1 - len2, suffix) == 0);
}

-/* Create a value of type TYPE whose contents come from VALADDR, if it
- is non-null, and whose memory address (in the inferior) is
- ADDRESS. */
-
-struct value *
-value_from_contents_and_address (struct type *type,
- const gdb_byte *valaddr,
- CORE_ADDR address)
-{
- struct value *v = allocate_value (type);
- if (valaddr == NULL)
- set_value_lazy (v, 1);
- else
- memcpy (value_contents_raw (v), valaddr, TYPE_LENGTH (type));
- VALUE_ADDRESS (v) = address;
- if (address != 0)
- VALUE_LVAL (v) = lval_memory;
- return v;
-}
-
/* The contents of value VAL, treated as a value of type TYPE. The
result is an lval in memory if VAL is. */

diff --git a/gdb/ada-lang.h b/gdb/ada-lang.h
index 562a867..440558c 100644
--- a/gdb/ada-lang.h
+++ b/gdb/ada-lang.h
@@ -257,10 +257,6 @@ extern int ada_value_print (struct value *, struct ui_file *,

/* Defined in ada-lang.c */

-extern struct value *value_from_contents_and_address (struct type *,
- const gdb_byte *,
- CORE_ADDR);
-
extern void ada_emit_char (int, struct ui_file *, int, int);

extern void ada_printchar (int, struct ui_file *);
diff --git a/gdb/value.c b/gdb/value.c
index 695aa33..03385f3 100644
--- a/gdb/value.c
+++ b/gdb/value.c
@@ -1686,6 +1686,26 @@ value_from_string (char *ptr)
return val;
}

+/* Create a value of type TYPE whose contents come from VALADDR, if it
+ is non-null, and whose memory address (in the inferior) is
+ ADDRESS. */
+
+struct value *
+value_from_contents_and_address (struct type *type,
+ const gdb_byte *valaddr,
+ CORE_ADDR address)
+{
+ struct value *v = allocate_value (type);
+ if (valaddr == NULL)
+ set_value_lazy (v, 1);
+ else
+ memcpy (value_contents_raw (v), valaddr, TYPE_LENGTH (type));
+ VALUE_ADDRESS (v) = address;
+ if (address != 0)
+ VALUE_LVAL (v) = lval_memory;
+ return v;
+}
+
struct value *
value_from_double (struct type *type, DOUBLEST num)
{
diff --git a/gdb/value.h b/gdb/value.h
index 65fea99..3e924cc 100644
--- a/gdb/value.h
+++ b/gdb/value.h
@@ -289,6 +289,10 @@ extern struct value *value_from_string (char *string);
extern struct value *value_at (struct type *type, CORE_ADDR addr);
extern struct value *value_at_lazy (struct type *type, CORE_ADDR addr);

+extern struct value *value_from_contents_and_address (struct type *,
+ const gdb_byte *,
+ CORE_ADDR);
+
extern struct value *default_value_from_register (struct type *type,
int regnum,
struct frame_info *frame);