Re: [RFA] Implement support for PowerPC BookE ranged breakpoints

Ulrich Weigand
2011-03-29T12:23:51Z

Thiago Jung Bauermann wrote:

> In this patch I had to modify print_recreate_ranged_breakpoint to use
> addr_string_range_end since I don't use exp_string anymore. I could
> change print_mention_ranged_breakpoint to use it too, since it's
> formatted consistently. However, breakpoint.c:mention doesn't use
> b->addr_string and instead uses b->source_file and b->line_number, so
> I'm not sure if I should use b->addr_string_range_end. I left that out
> for now.

OK, that's fine with me.

> + /* We call decode_line_n1 directly here instead of using

Typo: decode_line_1

> + parse_breakpoint_sals because we need to specify the start location's
> + symtab and line as the default symtab and line for the end of the
> + range. This makes it possible to have ranges like "foo.c:27, +14",
> + where +14 means 14 lines from the start location. */
> + sals_end = decode_line_1 (&arg, 1, sal_start.symtab, sal_start.line,
> + &canonical_end, NULL);

> 2011-03-27 Thiago Jung Bauermann <bauerman@br.ibm.com>
> Sergio Durigan Junior <sergiodj@linux.vnet.ibm.com>
>
> Implement support for PowerPC BookE ranged breakpoints.
>
> gdb/
> * NEWS: Mention support for ranged breakpoints on embedded PowerPC.
> * breakpoint.h (struct bp_target_info) <length>: New member
> variable.
> (struct breakpoint_ops) <breakpoint_hit>: Take struct bp_location
> instead of struct breakpoint as argument, and also add ASPACE
> and BP_ADDR arguments. Update all callers.
> (struct breakpoint_ops) <print_one_detail>: New method.
> (struct breakpoint) <addr_string_range_end>: New member variable.
> * breakpoint.c (breakpoint_location_address_match): Add function
> prototype.
> (insert_bp_location): Set bl->target_info.length.
> (breakpoint_here_p): Call breakpoint_location_address_match.
> (moribund_breakpoint_here_p): Likewise.
> (regular_breakpoint_inserted_here_p): Likewise.
> (breakpoint_thread_match): Likewise.
> (bpstat_stop_status): Likewise.
> (bpstat_check_location): Move call to
> breakpoint_ops.breakpoint_hit to the top.
> (print_one_breakpoint_location): Call
> breakpoint_ops.print_one_detail if available.
> (breakpoint_address_match_range): New function.
> (breakpoint_location_address_match): Likewise.
> (breakpoint_locations_match): Compare the length field of the
> locations too.
> (hw_breakpoint_used_count): Count resources used by all locations
> in a breakpoint, and use breakpoint_ops.resources_needed if
> available.
> (breakpoint_hit_ranged_breakpoint): New function.
> (resources_needed_ranged_breakpoint): Likewise.
> (print_it_ranged_breakpoint): Likewise.
> (print_one_ranged_breakpoint): Likewise.
> (print_one_detail_ranged_breakpoint): Likewise.
> (print_mention_ranged_breakpoint): Likewise.
> (print_recreate_ranged_breakpoint): Likewise.
> (ranged_breakpoint_ops): New structure.
> (find_breakpoint_range_end): New function.
> (break_range_command): Likewise.
> (delete_breakpoint): Free addr_string_range_end.
> (update_breakpoint_locations): Add SALS_END argument. Calculate
> breakpoint length if a non-zero SALS_END is given. Call
> breakpoint_locations_match instead of breakpoint_address_match.
> (reset_breakpoint): Find SaL of the end of the range if B is a
> ranged breakpoint.
> (_initialize_breakpoint): Register break-range command.
> * defs.h (print_core_address): Add function prototype.
> * ppc-linux-nat.c (ppc_linux_ranged_break_num_registers): New
> function.
> (ppc_linux_insert_hw_breakpoint): Support ranged breakpoints.
> (ppc_linux_remove_hw_breakpoint): Likewise.
> (_initialize_ppc_linux_nat): Initialize
> to_ranged_break_num_registers.
> * target.c (update_current_target): Add comment about
> to_ranged_break_num_registers.
> (target_ranged_break_num_registers): New function.
> * target.h (struct target_ops) <to_ranged_break_num_registers>:
> New method.
> (target_ranged_break_num_registers): Add function prototype.
> * ui-out.c (ui_out_field_core_addr): Move address-printing logic to ...
> * utils.c (print_core_address): ... here.
>
> gdb/doc/
> * gdb.texinfo (PowerPC Embedded): Document ranged breakpoints.

Otherwise, this is OK.

Thanks,
Ulrich

--
Dr. Ulrich Weigand
GNU Toolchain for Linux on System z and Cell BE
Ulrich.Weigand@de.ibm.com