From 668e167446b2777869f413841ec05aed59473d9f Mon Sep 17 00:00:00 2001 From: Yao Qi Date: Fri, 11 Nov 2016 08:38:31 +0000 Subject: [PATCH 1/1] Remove apply_val_pretty_printer parameter valaddr This patch removes the parameter valaddr of extension_language_ops::apply_val_pretty_printer and remove const from "struct value *val". valaddr can be got in each extension language's implementation of apply_val_pretty_printer. gdb: 2016-11-11 Yao Qi * cp-valprint.c (cp_print_value): Remove local base_valaddr. * extension-priv.h (struct extension_language_ops) : Remove the second parameter. Remove const from "struct value *". Callers updated. * extension.c (apply_ext_lang_val_pretty_printer): Update comments. Remove parameter valaddr. Remove const from "struct value *". * extension.h (apply_ext_lang_val_pretty_printer): Update declaration. * guile/guile-internal.h (gdbscm_apply_val_pretty_printer): Update declaration. * guile/scm-pretty-print.c (gdbscm_apply_val_pretty_printer): Remove parameter valaddr. Remove const from "struct value *". * python/py-prettyprint.c (gdbpy_apply_val_pretty_printer): Likewise. * python/python-internal.h (gdbpy_apply_val_pretty_printer): Update declaration. --- gdb/ChangeLog | 20 ++++++++++++++++++++ gdb/cp-valprint.c | 6 +----- gdb/extension-priv.h | 14 +++++++------- gdb/extension.c | 16 ++++++++-------- gdb/extension.h | 4 ++-- gdb/guile/guile-internal.h | 4 ++-- gdb/guile/scm-pretty-print.c | 9 ++++----- gdb/python/py-prettyprint.c | 9 ++++----- gdb/python/python-internal.h | 4 ++-- gdb/valprint.c | 5 +---- 10 files changed, 51 insertions(+), 40 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 96e4f5fe58..7fc2b4a9fe 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,23 @@ +2016-11-11 Yao Qi + + * cp-valprint.c (cp_print_value): Remove local base_valaddr. + * extension-priv.h (struct extension_language_ops) + : Remove the second parameter. + Remove const from "struct value *". Callers updated. + * extension.c (apply_ext_lang_val_pretty_printer): Update + comments. Remove parameter valaddr. Remove const from + "struct value *". + * extension.h (apply_ext_lang_val_pretty_printer): Update + declaration. + * guile/guile-internal.h (gdbscm_apply_val_pretty_printer): + Update declaration. + * guile/scm-pretty-print.c (gdbscm_apply_val_pretty_printer): + Remove parameter valaddr. Remove const from "struct value *". + * python/py-prettyprint.c (gdbpy_apply_val_pretty_printer): + Likewise. + * python/python-internal.h (gdbpy_apply_val_pretty_printer): + Update declaration. + 2016-11-11 Yao Qi * c-lang.h (cp_print_value_fields): Update declaration. diff --git a/gdb/cp-valprint.c b/gdb/cp-valprint.c index 57d5d02a37..9432c8369b 100644 --- a/gdb/cp-valprint.c +++ b/gdb/cp-valprint.c @@ -490,7 +490,6 @@ cp_print_value (struct type *type, struct type *real_type, int skip = 0; struct type *baseclass = check_typedef (TYPE_BASECLASS (type, i)); const char *basename = TYPE_NAME (baseclass); - const gdb_byte *base_valaddr = NULL; struct value *base_val = NULL; if (BASETYPE_VIA_VIRTUAL (type, i)) @@ -551,18 +550,15 @@ cp_print_value (struct type *type, struct type *real_type, thisoffset = 0; boffset = 0; thistype = baseclass; - base_valaddr = value_contents_for_printing_const (base_val); do_cleanups (back_to); } else { - base_valaddr = valaddr; base_val = val; } } else { - base_valaddr = valaddr; base_val = val; } } @@ -591,7 +587,7 @@ cp_print_value (struct type *type, struct type *real_type, baseclass if possible. */ if (!options->raw) result - = apply_ext_lang_val_pretty_printer (baseclass, base_valaddr, + = apply_ext_lang_val_pretty_printer (baseclass, thisoffset + boffset, value_address (base_val), stream, recurse, diff --git a/gdb/extension-priv.h b/gdb/extension-priv.h index 26bd21ff36..161d99bba7 100644 --- a/gdb/extension-priv.h +++ b/gdb/extension-priv.h @@ -171,19 +171,19 @@ struct extension_language_ops void (*free_type_printers) (const struct extension_language_defn *, struct ext_lang_type_printers *); - /* Try to pretty-print a value of type TYPE located at VALADDR - + EMBEDDED_OFFSET, which came from the inferior at address ADDRESS - + EMBEDDED_OFFSET, onto stdio stream STREAM according to OPTIONS. - VAL is the whole object that came from ADDRESS. VALADDR must point to - the head of VAL's contents buffer. + /* Try to pretty-print a value of type TYPE located at VAL's contents + buffer + EMBEDDED_OFFSET, which came from the inferior at address + ADDRESS + EMBEDDED_OFFSET, onto stdio stream STREAM according to + OPTIONS. + VAL is the whole object that came from ADDRESS. Returns EXT_LANG_RC_OK upon success, EXT_LANG_RC_NOP if the value is not recognized, and EXT_LANG_RC_ERROR if an error was encountered. */ enum ext_lang_rc (*apply_val_pretty_printer) (const struct extension_language_defn *, - struct type *type, const gdb_byte *valaddr, + struct type *type, LONGEST embedded_offset, CORE_ADDR address, struct ui_file *stream, int recurse, - const struct value *val, const struct value_print_options *options, + struct value *val, const struct value_print_options *options, const struct language_defn *language); /* GDB access to the "frame filter" feature. diff --git a/gdb/extension.c b/gdb/extension.c index c9f5664806..40c63a69b5 100644 --- a/gdb/extension.c +++ b/gdb/extension.c @@ -478,11 +478,11 @@ free_ext_lang_type_printers (struct ext_lang_type_printers *printers) xfree (printers); } -/* Try to pretty-print a value of type TYPE located at VALADDR - + EMBEDDED_OFFSET, which came from the inferior at address ADDRESS - + EMBEDDED_OFFSET, onto stdio stream STREAM according to OPTIONS. - VAL is the whole object that came from ADDRESS. VALADDR must point to - the head of VAL's contents buffer. +/* Try to pretty-print a value of type TYPE located at VAL's contents + buffer + EMBEDDED_OFFSET, which came from the inferior at address + ADDRESS + EMBEDDED_OFFSET, onto stdio stream STREAM according to + OPTIONS. + VAL is the whole object that came from ADDRESS. Returns non-zero if the value was successfully pretty-printed. Extension languages are tried in the order specified by @@ -496,10 +496,10 @@ free_ext_lang_type_printers (struct ext_lang_type_printers *printers) errors that trigger an exception in the extension language. */ int -apply_ext_lang_val_pretty_printer (struct type *type, const gdb_byte *valaddr, +apply_ext_lang_val_pretty_printer (struct type *type, LONGEST embedded_offset, CORE_ADDR address, struct ui_file *stream, int recurse, - const struct value *val, + struct value *val, const struct value_print_options *options, const struct language_defn *language) { @@ -512,7 +512,7 @@ apply_ext_lang_val_pretty_printer (struct type *type, const gdb_byte *valaddr, if (extlang->ops->apply_val_pretty_printer == NULL) continue; - rc = extlang->ops->apply_val_pretty_printer (extlang, type, valaddr, + rc = extlang->ops->apply_val_pretty_printer (extlang, type, embedded_offset, address, stream, recurse, val, options, language); diff --git a/gdb/extension.h b/gdb/extension.h index fa11f25f49..66bcb03f8c 100644 --- a/gdb/extension.h +++ b/gdb/extension.h @@ -225,10 +225,10 @@ extern char *apply_ext_lang_type_printers (struct ext_lang_type_printers *, extern void free_ext_lang_type_printers (struct ext_lang_type_printers *); extern int apply_ext_lang_val_pretty_printer - (struct type *type, const gdb_byte *valaddr, + (struct type *type, LONGEST embedded_offset, CORE_ADDR address, struct ui_file *stream, int recurse, - const struct value *val, const struct value_print_options *options, + struct value *val, const struct value_print_options *options, const struct language_defn *language); extern enum ext_lang_bt_status apply_ext_lang_frame_filter diff --git a/gdb/guile/guile-internal.h b/gdb/guile/guile-internal.h index 5f819b8871..3865f7709f 100644 --- a/gdb/guile/guile-internal.h +++ b/gdb/guile/guile-internal.h @@ -597,10 +597,10 @@ extern void gdbscm_preserve_values extern enum ext_lang_rc gdbscm_apply_val_pretty_printer (const struct extension_language_defn *, - struct type *type, const gdb_byte *valaddr, + struct type *type, LONGEST embedded_offset, CORE_ADDR address, struct ui_file *stream, int recurse, - const struct value *val, + struct value *val, const struct value_print_options *options, const struct language_defn *language); diff --git a/gdb/guile/scm-pretty-print.c b/gdb/guile/scm-pretty-print.c index afdd0c71e0..5253defc1e 100644 --- a/gdb/guile/scm-pretty-print.c +++ b/gdb/guile/scm-pretty-print.c @@ -957,10 +957,10 @@ ppscm_print_children (SCM printer, enum display_hint hint, enum ext_lang_rc gdbscm_apply_val_pretty_printer (const struct extension_language_defn *extlang, - struct type *type, const gdb_byte *valaddr, + struct type *type, LONGEST embedded_offset, CORE_ADDR address, struct ui_file *stream, int recurse, - const struct value *val, + struct value *val, const struct value_print_options *options, const struct language_defn *language) { @@ -973,6 +973,7 @@ gdbscm_apply_val_pretty_printer (const struct extension_language_defn *extlang, struct cleanup *cleanups; enum ext_lang_rc result = EXT_LANG_RC_NOP; enum string_repr_result print_result; + const gdb_byte *valaddr = value_contents_for_printing (val); /* No pretty-printer support for unavailable values. */ if (!value_bytes_available (val, embedded_offset, TYPE_LENGTH (type))) @@ -984,9 +985,7 @@ gdbscm_apply_val_pretty_printer (const struct extension_language_defn *extlang, cleanups = make_cleanup (null_cleanup, NULL); /* Instantiate the printer. */ - if (valaddr) - valaddr += embedded_offset; - value = value_from_contents_and_address (type, valaddr, + value = value_from_contents_and_address (type, valaddr + embedded_offset, address + embedded_offset); set_value_component_location (value, val); diff --git a/gdb/python/py-prettyprint.c b/gdb/python/py-prettyprint.c index 3c6a5afe40..cbc168de4e 100644 --- a/gdb/python/py-prettyprint.c +++ b/gdb/python/py-prettyprint.c @@ -699,10 +699,10 @@ print_children (PyObject *printer, const char *hint, enum ext_lang_rc gdbpy_apply_val_pretty_printer (const struct extension_language_defn *extlang, - struct type *type, const gdb_byte *valaddr, + struct type *type, LONGEST embedded_offset, CORE_ADDR address, struct ui_file *stream, int recurse, - const struct value *val, + struct value *val, const struct value_print_options *options, const struct language_defn *language) { @@ -714,6 +714,7 @@ gdbpy_apply_val_pretty_printer (const struct extension_language_defn *extlang, struct cleanup *cleanups; enum ext_lang_rc result = EXT_LANG_RC_NOP; enum string_repr_result print_result; + const gdb_byte *valaddr = value_contents_for_printing (val); /* No pretty-printer support for unavailable values. */ if (!value_bytes_available (val, embedded_offset, TYPE_LENGTH (type))) @@ -725,9 +726,7 @@ gdbpy_apply_val_pretty_printer (const struct extension_language_defn *extlang, cleanups = ensure_python_env (gdbarch, language); /* Instantiate the printer. */ - if (valaddr) - valaddr += embedded_offset; - value = value_from_contents_and_address (type, valaddr, + value = value_from_contents_and_address (type, valaddr + embedded_offset, address + embedded_offset); set_value_component_location (value, val); diff --git a/gdb/python/python-internal.h b/gdb/python/python-internal.h index f3213bb82e..5f0abf8263 100644 --- a/gdb/python/python-internal.h +++ b/gdb/python/python-internal.h @@ -315,10 +315,10 @@ extern int gdbpy_auto_load_enabled (const struct extension_language_defn *); extern enum ext_lang_rc gdbpy_apply_val_pretty_printer (const struct extension_language_defn *, - struct type *type, const gdb_byte *valaddr, + struct type *type, LONGEST embedded_offset, CORE_ADDR address, struct ui_file *stream, int recurse, - const struct value *val, + struct value *val, const struct value_print_options *options, const struct language_defn *language); extern enum ext_lang_bt_status gdbpy_apply_frame_filter diff --git a/gdb/valprint.c b/gdb/valprint.c index b18ece371c..c0cdb34634 100644 --- a/gdb/valprint.c +++ b/gdb/valprint.c @@ -1098,9 +1098,7 @@ val_print (struct type *type, LONGEST embedded_offset, if (!options->raw) { - const gdb_byte *valaddr = value_contents_for_printing (val); - - ret = apply_ext_lang_val_pretty_printer (type, valaddr, embedded_offset, + ret = apply_ext_lang_val_pretty_printer (type, embedded_offset, address, stream, recurse, val, options, language); if (ret) @@ -1223,7 +1221,6 @@ value_print (struct value *val, struct ui_file *stream, { int r = apply_ext_lang_val_pretty_printer (value_type (val), - value_contents_for_printing (val), value_embedded_offset (val), value_address (val), stream, 0, -- 2.34.1