From: Keith Seitz <keiths@redhat.com>
To: Tom Tromey <tromey@redhat.com>
Cc: Pedro Alves <palves@redhat.com>,
"gdb-patches@sourceware.org ml"
<gdb-patches@sourceware.org>
Subject: Re: [RFA] "constify" parse_exp_1
Date: Mon, 11 Mar 2013 16:50:00 -0000 [thread overview]
Message-ID: <513E0B58.4090800@redhat.com> (raw)
In-Reply-To: <87obeuc58e.fsf@fleche.redhat.com>
On 03/08/2013 06:53 AM, Tom Tromey wrote:
>>>>>> "Keith" == Keith Seitz <keiths@redhat.com> writes:
> There is a deletable strdup in gdbpy_parse_and_eval.
> I don't know if there are others in the tree.
> I think you need to look at the indirect callers of parse_exp_1.
Ok, that strdup, while not necessary, is not yet ready to be removed
until parse_and_eval is const, which I did not do. I thought that might
be a much more involved patch, and planned to do that separately.
It turns out to be pretty simple, actually, so I'll include that in my
next revision (see my reply to Pedro).
Analyzing the call graph (by hand!?), I found one other place that
allocates a copy: mi_interpreter_exec. AFAICT, it is not needed. I will
submit a patch for that separately.
I'm including a list of the callgraphs I investigated. Each '-' refers
to a caller, e.g.:
- a
-- b
-- c
--- d
d calls c which calls a; b calls a. Anything marked with "X"s indicates
that an alloc appears to have been made explicitly to workaround
const-correctness. There are only two that I found (gdbpy_parse_and_eval
and mi_interpreter_exec).
parse_exp_1:
- parse_expression (parse.c)
-- execute_control_command (cli-script.c)
-- info_mach_region_command (darwin-nat-info.c)
-- parse_and_eval_address
--- ada_unhandled_exception_name_addr (ada-lang.c)
--- ada_unhandled_exception_name_addr_from_raise
--- ada_exception_name_addr_1
--- bsd_kvm_proc_cmd (bsd-kvm.c)
--- bsd_kvm_pcb_cmd
--- disassemble_command (cli-cmds.c)
--- dump_memory_to_file (cli-dump.c)
--- restore_command
--- set_section_command
--- set_task_exc_port_cmd (gnu-nat.c)
--- set_thread_exc_port_cmd
--- go32_pte_for_address (go32-nat.c)
--- unwind_command (hppa-tdep.c)
--- maintenance_translate_address (maint.c)
--- mem_command (memattr.c)
--- mi_cmd_disassemble (mi-cmd-disas.c)
--- mi_cmd_data_write_register_values (mi-main.c)
--- mi_cmd_data_read_memory
--- mi_cmd_data_read_memory_bytes
--- mi_cmd_data_write_memory
--- mi_cmd_data_write_memory_bytes
--- mi_cmd_trace_find
--- sym_info (printcmd.c)
--- add_symbol_file_command (symfile.c)
--- add_symbol_file_from_memory_command (symfile-mem.c)
--- trace_find_pc_command (tracepoint.c)
--- trace_find_range_command
--- trace_find_outside_command
-- parse_and_eval_long
--- breakpoint_1i (breakpoint.c)
---- breakpoints_info
---- watchpoints_info
---- maintenance_info_breakpoints
---- tracepoints_info
--- do_set_command (cli-setshow.c)
---- execute_command (top.c)
--- restore_command (cli-dump.c)
--- go32_sldt (go32-nat.c)
--- go32_sgdt
--- go32_sidt
--- go32_pde
--- go32_pte
--- continue_command (infcmd.c)
--- step_1
---- step_command
---- next_command
---- stepi_command
---- nexti_command
--- signal_command
--- inferior_command (inferior.c)
--- add_inferior_command
--- clone_inferior_command
--- signals_info (infrun.c)
--- call_lseek (linux-fork.c)
--- delete_checkpoint_command
--- detach_checkpoint_command
--- info_checkpoints_command
--- restart_command
--- maintenance_info_program_spaces_command (progspace.c)
--- cmd_record_goto (record.c)
---- record_goto_bookmark
----- target_goto_bookmark (target.h)
------ goto_bookmark_command (reverse.c)
--- backtrace_command_1 (stack.c)
---- backtrace_command
---- backtrace_full_command
--- up_silently_base
---- up_silently_command
---- up_command
--- down_silently_base
---- down_silently_command
---- down_command
--- show_commands (top.c)
--- trace_find_command (tracepoint.c)
---- trace_find_end_command
---- trace_find_start_command
---- tfind_1
--- trace_find_tracepoint_command
--- set_radix (valrpint.c)
--- show_values (value.c)
--- display_selectors (windows-nat.c)
-- parse_and_eval
--- print_ada_task_info (ada-tasks.c)
---- info_tasks_command
--- info_task
---- info_tasks_command
--- task_command_1
---- task_command
--- ignore_command (breakpoint.c)
--- dump_value_to_file (cli-dump.c)
---- dump_value_command
---- dump_srec_value
---- dump_ihex_value
---- dump_texhex_value
---- dump_binary_value
---- append_binary_value
--- info_vtbl_command (cp-support.c)
--- mi_cmd_trace_define_variable
XXX gdbpy_parse_and_eval (python.c)
--- parse_frame_specification_1 (stack.c)
---- parse_frame_specification
----- func_command
---- frame_info
---- select_frame_command
----- frame_command
------ return_command
----- return_command
--- do_captured_thread_select (thread.c)
---- gdb_thread_select
----- thread_command
--- quit_force (top.c)
---- quit_command (cli-cmds.c)
----- stdin_event_handler (event-top.c)
----- captured_command_loop (main.c)
---- handle_sigterm (event-top.c)
---- captured_main (main.c)
---- mi_cmd_gdb_exit (mi-main.c)
---- mi_execute_command (mi-main.c)
----- mi_execute_command_wrapper
------ mi_execute_command_input_handler
XXXXXX mi_interpreter_exec
--- trace_variable_command (tracepoint.c)
--- display_tob (windows-tdep.c)
-- parse_and_eval_type
---- safe_parse_type (gdbtypes.c)
----- check_stub_method
-- mi_cmd_data_evaluate_expression (mi-main.c)
-- print_object_command (objc-lang.c)
-- print_command_1 (printcmd.c)
--- print_command
--- call_command
-- output_command
--- trace_dump_actions (tracepoint.c)
-- set_command
-- x_command
-- display_command
-- doo_one_display
-- return_command (stack.c)
-- whatis_exp (typeprint.c)
-- maintenance_print_type
-- init_if_undefined_command (value.c)
- ada_read_renaming_var_value (ada-lang.c)
- create_excep_cond_exprs (ada-lang.c)
- agent_eval_command_one (ax-gdb.c)
- maint_agent_print_command (ax-gdb.c)
- set_breakpoint_condition (breakpoint.c)
- update_watchpoint
- parse_cmd_to_aexpr
X Why cmd1 = cmdrest, parse_exp_1 (&cmd1), cmdrest = cmd1?
- init_breakpoint_sal
- find_condition_and_thread
- watch_command_1
- update_breakpoint_locations
- parse_to_comma_and_eval (eval.c)
- validate_actionline (tracepoint.c)
-- check_tracepoint_command (breakpoint.c)
-- trace_dump_command
- varobj_create (varobj.c)
I have not attempted to constify the other parse_and_eval_* functions
yet. I leave that for a follow-on patch.
That's all of them AFAICT. Anything further you want wrt to analyzing
callers that I missed?
Keith
next prev parent reply other threads:[~2013-03-11 16:50 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-03-08 0:12 Keith Seitz
2013-03-08 0:22 ` Pedro Alves
2013-03-08 1:02 ` Keith Seitz
2013-03-08 12:27 ` Pedro Alves
2013-03-08 13:55 ` Pedro Alves
2013-03-09 1:00 ` Pedro Alves
2013-03-09 1:04 ` Keith Seitz
2013-03-11 22:09 ` Keith Seitz
2013-03-12 10:18 ` Pedro Alves
2013-03-12 17:40 ` Keith Seitz
2013-03-08 14:54 ` Tom Tromey
2013-03-11 16:50 ` Keith Seitz [this message]
2013-03-11 18:30 ` Tom Tromey
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=513E0B58.4090800@redhat.com \
--to=keiths@redhat.com \
--cc=gdb-patches@sourceware.org \
--cc=palves@redhat.com \
--cc=tromey@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox