From 6e778545110c1609b262e37ece4875a4e5eef46c Mon Sep 17 00:00:00 2001 From: Peter Schauer Date: Mon, 20 Nov 2000 20:33:53 +0000 Subject: [PATCH] * 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. --- gdb/ChangeLog | 8 ++++++++ gdb/c-valprint.c | 26 +++++++++++++++++++++++--- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 84f6155..064218f 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,11 @@ +2000-11-20 Peter Schauer + + * 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. + 2000-11-20 J.T. Conklin * gdbserver/low-nbsd.c: Fix typos. diff --git a/gdb/c-valprint.c b/gdb/c-valprint.c index 784cbc8..b6e761a 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, -- 2.7.4