diff options
author | Tom Tromey <tom@tromey.com> | 2017-09-09 10:14:52 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2017-09-11 16:15:11 -0600 |
commit | c6dc63a16299e22fcb5bc13b34cb402a1bfcf6b9 (patch) | |
tree | ba6c7f5c359753ab3cc712e8e98d8211b9caecdd /gdb/stack.c | |
parent | d6b9b80f9483b6c1a3a018c0fcaf813ca098d8af (diff) | |
download | binutils-gdb-c6dc63a16299e22fcb5bc13b34cb402a1bfcf6b9.tar.gz |
Remove cleanups from find_frame_funname
This changes find_frame_funname to return a unique_xmalloc_ptr and
then fixes up the callers. This removes several cleanups.
ChangeLog
2017-09-11 Tom Tromey <tom@tromey.com>
* ada-lang.c (is_known_support_routine): Update.
(ada_unhandled_exception_name_addr_from_raise): Update.
* guile/scm-frame.c (gdbscm_frame_name): Update.
* python/py-frame.c (frapy_name): Update.
(frapy_function): Update.
* stack.h (find_frame_funname): Update.
* stack.c (find_frame_funname): Return unique_xmalloc_ptr.
(print_frame): Update.
Diffstat (limited to 'gdb/stack.c')
-rw-r--r-- | gdb/stack.c | 41 |
1 files changed, 19 insertions, 22 deletions
diff --git a/gdb/stack.c b/gdb/stack.c index f48fa1d884b..a00e0c529da 100644 --- a/gdb/stack.c +++ b/gdb/stack.c @@ -1032,16 +1032,16 @@ get_last_displayed_sal () } -/* Attempt to obtain the FUNNAME, FUNLANG and optionally FUNCP of the function - corresponding to FRAME. FUNNAME needs to be freed by the caller. */ +/* Attempt to obtain the name, FUNLANG and optionally FUNCP of the function + corresponding to FRAME. */ -void -find_frame_funname (struct frame_info *frame, char **funname, - enum language *funlang, struct symbol **funcp) +gdb::unique_xmalloc_ptr<char> +find_frame_funname (struct frame_info *frame, enum language *funlang, + struct symbol **funcp) { struct symbol *func; + gdb::unique_xmalloc_ptr<char> funname; - *funname = NULL; *funlang = language_unknown; if (funcp) *funcp = NULL; @@ -1084,7 +1084,7 @@ find_frame_funname (struct frame_info *frame, char **funname, /* We also don't know anything about the function besides its address and name. */ func = 0; - *funname = xstrdup (MSYMBOL_PRINT_NAME (msymbol.minsym)); + funname.reset (xstrdup (MSYMBOL_PRINT_NAME (msymbol.minsym))); *funlang = MSYMBOL_LANGUAGE (msymbol.minsym); } else @@ -1104,14 +1104,13 @@ find_frame_funname (struct frame_info *frame, char **funname, char *func_only = cp_remove_params (print_name); if (func_only) - *funname = func_only; + funname.reset (func_only); } - /* If we didn't hit the C++ case above, set *funname here. - This approach is taken to avoid having to install a - cleanup in case cp_remove_params can throw. */ - if (*funname == NULL) - *funname = xstrdup (print_name); + /* If we didn't hit the C++ case above, set *funname + here. */ + if (funname == NULL) + funname.reset (xstrdup (print_name)); } } else @@ -1120,15 +1119,17 @@ find_frame_funname (struct frame_info *frame, char **funname, CORE_ADDR pc; if (!get_frame_address_in_block_if_available (frame, &pc)) - return; + return funname; msymbol = lookup_minimal_symbol_by_pc (pc); if (msymbol.minsym != NULL) { - *funname = xstrdup (MSYMBOL_PRINT_NAME (msymbol.minsym)); + funname.reset (xstrdup (MSYMBOL_PRINT_NAME (msymbol.minsym))); *funlang = MSYMBOL_LANGUAGE (msymbol.minsym); } } + + return funname; } static void @@ -1138,9 +1139,7 @@ print_frame (struct frame_info *frame, int print_level, { struct gdbarch *gdbarch = get_frame_arch (frame); struct ui_out *uiout = current_uiout; - char *funname = NULL; enum language funlang = language_unknown; - struct cleanup *old_chain; struct value_print_options opts; struct symbol *func; CORE_ADDR pc = 0; @@ -1148,9 +1147,8 @@ print_frame (struct frame_info *frame, int print_level, pc_p = get_frame_pc_if_available (frame, &pc); - - find_frame_funname (frame, &funname, &funlang, &func); - old_chain = make_cleanup (xfree, funname); + gdb::unique_xmalloc_ptr<char> funname + = find_frame_funname (frame, &funlang, &func); annotate_frame_begin (print_level ? frame_relative_level (frame) : 0, gdbarch, pc); @@ -1181,7 +1179,7 @@ print_frame (struct frame_info *frame, int print_level, annotate_frame_function_name (); string_file stb; - fprintf_symbol_filtered (&stb, funname ? funname : "??", + fprintf_symbol_filtered (&stb, funname ? funname.get () : "??", funlang, DMGL_ANSI); uiout->field_stream ("func", stb); uiout->wrap_hint (" "); @@ -1257,7 +1255,6 @@ print_frame (struct frame_info *frame, int print_level, } uiout->text ("\n"); - do_cleanups (old_chain); } |