diff options
author | Peter Schauer <Peter.Schauer@mytum.de> | 2000-11-20 20:33:53 +0000 |
---|---|---|
committer | Peter Schauer <Peter.Schauer@mytum.de> | 2000-11-20 20:33:53 +0000 |
commit | 6e778545110c1609b262e37ece4875a4e5eef46c (patch) | |
tree | 43301ce47f6812afa25b66957a1229d9c6550b63 /gdb/c-valprint.c | |
parent | 0c9f8a6941a98973e090275669652653e6a78c8c (diff) | |
download | binutils-gdb-6e778545110c1609b262e37ece4875a4e5eef46c.tar.gz |
* c-valprint.c (print_function_pointer_address): New function
to automatically dereference a function pointer for printing
if necessary.
(c_val_print): Use print_function_pointer_address when printing
function pointer addresses.
Diffstat (limited to 'gdb/c-valprint.c')
-rw-r--r-- | gdb/c-valprint.c | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/gdb/c-valprint.c b/gdb/c-valprint.c index 784cbc8bbdc..b6e761ac3c2 100644 --- a/gdb/c-valprint.c +++ b/gdb/c-valprint.c @@ -30,6 +30,26 @@ #include "c-lang.h" +/* Print function pointer with inferior address ADDRESS onto stdio + stream STREAM. */ + +static void +print_function_pointer_address (CORE_ADDR address, struct ui_file *stream) +{ + CORE_ADDR func_addr = CONVERT_FROM_FUNC_PTR_ADDR (address); + + /* If the function pointer is represented by a description, print the + address of the description. */ + if (addressprint && func_addr != address) + { + fputs_filtered ("@", stream); + print_address_numeric (address, 1, stream); + fputs_filtered (": ", stream); + } + print_address_demangle (func_addr, stream, demangle); +} + + /* Print data of type TYPE located at VALADDR (within GDB), which came from the inferior at address ADDRESS, onto stdio stream STREAM according to FORMAT (a letter or 0 for natural format). The data at VALADDR is in @@ -129,7 +149,7 @@ c_val_print (struct type *type, char *valaddr, int embedded_offset, -fvtable_thunks. (Otherwise, look under TYPE_CODE_STRUCT.) */ CORE_ADDR addr = extract_typed_address (valaddr + embedded_offset, type); - print_address_demangle (addr, stream, demangle); + print_function_pointer_address (addr, stream); break; } elttype = check_typedef (TYPE_TARGET_TYPE (type)); @@ -152,7 +172,7 @@ c_val_print (struct type *type, char *valaddr, int embedded_offset, if (TYPE_CODE (elttype) == TYPE_CODE_FUNC) { /* Try to print what function it points to. */ - print_address_demangle (addr, stream, demangle); + print_function_pointer_address (addr, stream); /* Return value is irrelevant except for string pointers. */ return (0); } @@ -294,7 +314,7 @@ c_val_print (struct type *type, char *valaddr, int embedded_offset, CORE_ADDR addr = extract_typed_address (valaddr + offset, field_type); - print_address_demangle (addr, stream, demangle); + print_function_pointer_address (addr, stream); } else cp_print_value_fields (type, type, valaddr, embedded_offset, address, stream, format, |