This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] target attributes [4/5] gdbserver target attributes support


I am sorry that this patch have something wrong.  So I post a new
version that fixed the bug now.

Thanks,
Hui


On Mon, Feb 18, 2013 at 6:50 PM, Hui Zhu <teawater@gmail.com> wrote:
> Post a new version make this patch can build with upstream.
>
> Thanks,
> Hui
>
> 2013-02-18  Hui Zhu  <hui_zhu@mentor.com>
>
>         * config.in (BREAK_COUNT): New macro.
>         * configure (--enable-break-count): New argument.
>         * configure.ac (--enable-break-count): New argument.
>         * inferiors.c (remove_process): Call break_count_list_remove_all.
>         * linux-low.c (linux_wait_1): Call break_count_increase.
>         * mem-break.c (break_count_s): New struct.
>         (raw_breakpoint): Add count.
>         (break_count_list_create, break_count_list_remove): New function.
>         (current_break_count): New static variable.
>         (gdb_condition_true_at_breakpoint): Set current_break_count.
>         (break_count_list_remove_all): New function.
>         (break_count_list_reset_s): New struct.
>         (break_count_list_reset_1, break_count_list_reset,
>         break_count_val, break_count_increase, get_target_attribute,
>         set_target_attribute): New function.
>         * mem-break.h (break_count_list_remove_all,
>         break_count_list_reset, break_count_val, break_count_increase,
>         get_target_attribute, set_target_attribute): New function.
>         * server.c (start_inferior): Call break_count_list_reset.
>         (handle_general_set): Call set_target_attribute.
>         (handle_qxfer_target_attributes): New function.
>         (qxfer_packets): Add "target-attributes".
>         (handle_query): Add ";qXfer:target-attributes:read+".
>         (handle_query): Call get_target_attribute.
>         (handle_v_cont): Call break_count_list_reset.
>         (myresume): Ditto.
>         (process_serial_event): Ditto.
>         (handle_target_event): Ditto.
>         * server.h (break_count_s): New struct.
>         (process_info): Add break_count_on, break_count_list
>         and break_count_select.
>         * tracepoint.c (get_trace_state_variable_value): Call
>         break_count_val.
>
> On Wed, Aug 29, 2012 at 4:12 PM, Hui Zhu <hui_zhu@mentor.com> wrote:
>> This patch add target attributes $break_count_on, $break_count_select and
>> $break_count_val.
>> They make gdbserver support a function that count how many times the
>> breakpoint is passed.
>>
>> $break_count_on is the switch of the breakpoint count function.
>> The default value of it is 0, the breakpoint count function is closed.
>> The default value of it is 1, function is opened and when inferior stop and
>> continue again.  The count value of all the breakpoints will reset to 0.
>> If it is set to 2, function is opened and the count value will not be reset.
>>
>> When count function is opened.  You can set the address of breakpoint to
>> $break_count_select to select which count value you want to access in
>> $break_count_val.
>>
>> $break_count_val can access to the value of a breakpoint count if you use
>> GDB access it.
>> And you can use it inside the condition of the breakpoint, its value is the
>> value of current breakpoint count.
>>
>> For example:
>> (gdb) target remote :1234
>> Remote debugging using :1234
>> Reading symbols from /lib64/ld-linux-x86-64.so.2...(no debugging symbols
>> found)...done.
>> Loaded symbols for /lib64/ld-linux-x86-64.so.2
>> 0x00007ffff7ddb6b0 in ?? () from /lib64/ld-linux-x86-64.so.2
>> (gdb) list
>> 1       int
>> 2       main()
>> 3       {
>> 4               while (1)
>> 5                       printf("123\n");
>> 6       }
>> (gdb) set $break_count_on=1
>> (gdb) b 5
>> Breakpoint 1 at 0x4004f8: file w.c, line 5.
>> (gdb) condition 1 ($break_count_val == 10)
>> (gdb) c
>> Continuing.
>>
>> Breakpoint 1, main () at w.c:5
>> 5                       printf("123\n");
>>
>> In gdbserver part, you can see that:
>> 123
>> 123
>> 123
>> 123
>> 123
>> 123
>> 123
>> 123
>> 123
>>
>> And you can use this function to count how many times the a address passed,
>> for example:
>> (gdb) set non-stop on
>> (gdb) set target-async on
>> (gdb) target remote :1234
>> Remote debugging using :1234
>> [New Thread 9363]
>> (gdb)
>> [Thread 9363] #1 stopped.
>> 0x00007ffff7ddb6b0 in ?? ()
>> set $break_count_on=2
>> (gdb) list
>> 1       int
>> 2       main()
>> 3       {
>> 4               while (1)
>> 5                       printf("123\n");
>> 6       }
>> (gdb) b 5
>> Breakpoint 1 at 0x4004f8: file w.c, line 5.
>> (gdb) condition 1 ($break_count_val == 0)
>> (gdb) c&
>> Continuing.
>> (gdb) p $break_count_val
>> $1 = 122472
>> (gdb) p $break_count_val
>> $2 = 136000
>>
>> PS, I didn't update doc for this function because I am not sure gdb doc want
>> introduce gdbserver function or not.
>>
>>
>> Thanks,
>> Hui
>>
>> 2012-08-29  Hui Zhu  <hui_zhu@mentor.com>
>>
>>         * config.in (BREAK_COUNT): New macro.
>>         * configure (--enable-break-count): New argument.
>>         * configure.ac (--enable-break-count): New argument.
>>         * inferiors.c (remove_process): Call break_count_list_remove_all.
>>         * linux-low.c (linux_wait_1): Call break_count_increase.
>>         * mem-break.c (break_count_s): New struct.
>>         (raw_breakpoint): Add count.
>>         (break_count_list_create, break_count_list_remove): New function.
>>         (current_break_count): New static variable.
>>         (gdb_condition_true_at_breakpoint): Set current_break_count.
>>         (break_count_list_remove_all): New function.
>>         (break_count_list_reset_s): New struct.
>>         (break_count_list_reset_1, break_count_list_reset,
>>         break_count_val, break_count_increase, get_target_attribute,
>>         set_target_attribute): New function.
>>         * mem-break.h (break_count_list_remove_all,
>>         break_count_list_reset, break_count_val, break_count_increase,
>>         get_target_attribute, set_target_attribute): New function.
>>         * server.c (start_inferior): Call break_count_list_reset.
>>         (handle_general_set): Call set_target_attribute.
>>         (handle_qxfer_target_attributes): New function.
>>         (qxfer_packets): Add "target-attributes".
>>         (handle_query): Add ";qXfer:target-attributes:read+".
>>         (handle_query): Call get_target_attribute.
>>         (handle_v_cont): Call break_count_list_reset.
>>         (myresume): Ditto.
>>         (process_serial_event): Ditto.
>>         (handle_target_event): Ditto.
>>         * server.h (break_count_s): New struct.
>>         (process_info): Add break_count_on, break_count_list
>>         and break_count_select.
>>         * tracepoint.c (get_trace_state_variable_value): Call
>>         break_count_val.

Attachment: target_attribute_server_count.txt
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]