This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[rfc] Ada simplification: ada_val_print_1
- From: "Ulrich Weigand" <uweigand at de dot ibm dot com>
- To: gdb-patches at sourceware dot org, brobecker at adacore dot com
- Date: Thu, 14 May 2009 13:36:54 +0200 (CEST)
- Subject: [rfc] Ada simplification: ada_val_print_1
Hello,
another problematic Ada case: ada_val_print_1 initializes a static type
variable to the result of "make_pointer_type" -- which (implicitly today,
but explicitly in the future) depends on an architecture to determine
the size of a pointer. This could break in a multi-arch scenario.
The whole logic there seems to have the sole purpose of printing a
character string stored at some memory location as a result of an
inferior call. We do have a routine val_print_string that should be
able to do just that, without the need to create a dummy type ...
Joel, is this OK?
Bye,
Ulrich
ChangeLog:
* ada-valprint.c (ada_val_print_1): Use val_print_string to print
result of ada_vax_float_print_function inferior call.
Index: gdb-head/gdb/ada-valprint.c
===================================================================
--- gdb-head.orig/gdb/ada-valprint.c
+++ gdb-head/gdb/ada-valprint.c
@@ -739,22 +739,10 @@ ada_val_print_1 (struct type *type, cons
struct value *func = ada_vax_float_print_function (type);
if (func != 0)
{
- static struct type *parray_of_char = NULL;
- struct value *printable_val;
-
- if (parray_of_char == NULL)
- parray_of_char =
- make_pointer_type
- (create_array_type
- (NULL, builtin_type_true_char,
- create_range_type (NULL, builtin_type_int32, 0, 32)), NULL);
-
- printable_val =
- value_ind (value_cast (parray_of_char,
- call_function_by_hand (func, 1,
- &val)));
-
- fprintf_filtered (stream, "%s", value_contents (printable_val));
+ CORE_ADDR addr;
+ addr = value_as_address (call_function_by_hand (func, 1, &val));
+ val_print_string (builtin_type_true_char,
+ addr, -1, stream, options);
return 0;
}
/* No special printing function. Do as best we can. */
--
Dr. Ulrich Weigand
GNU Toolchain for Linux on System z and Cell BE
Ulrich.Weigand@de.ibm.com