From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 23232 invoked by alias); 15 May 2011 20:12:16 -0000 Received: (qmail 23199 invoked by uid 22791); 15 May 2011 20:12:13 -0000 X-SWARE-Spam-Status: No, hits=-0.8 required=5.0 tests=AWL,BAYES_00,MIME_QP_LONG_LINE,RCVD_IN_DNSWL_NONE X-Spam-Check-By: sourceware.org Received: from mailrelay007.isp.belgacom.be (HELO mailrelay007.isp.belgacom.be) (195.238.6.173) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sun, 15 May 2011 20:11:58 +0000 X-Belgacom-Dynamic: yes X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Ag4FAMcx0E1tgDRo/2dsb2JhbACKJ5sGZniIaQe+Hg6GCwSfCA Received: from 104.52-128-109.adsl-dyn.isp.belgacom.be (HELO soleil) ([109.128.52.104]) by relay.skynet.be with SMTP; 15 May 2011 22:11:52 +0200 Message-ID: <6CA956FB8BFB4CAB823CD8593BA606B0@soleil> From: "Philippe Waroquiers" To: "Eli Zaretskii" Cc: References: <83vcxbeu07.fsf@gnu.org> Subject: Re: PATCH : allow to set length of hw watchpoints (e.g. for Valgrind gdbserver) Date: Sun, 15 May 2011 20:12:00 -0000 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_0006_01CC134D.19194DC0" Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2011-05/txt/msg00350.txt.bz2 This is a multi-part message in MIME format. ------=_NextPart_000_0006_01CC134D.19194DC0 Content-Type: text/plain; format=flowed; charset="iso-8859-1"; reply-type=original Content-Transfer-Encoding: 7bit Content-length: 5625 Thanks for the quick review. Find below a new version of the patch (also in attachment). > If this is accepted, I think this is NEWS worthy. Added a paragraph to describe this. > I think we should tell explicitly that the limit is in bytes. (Btw, > why the corresponding data types are `int' and not `ssize_t'?) Added 'in bytes' in the doc and in the on-line command description. Note that I have kept 'int' as all other similar variables are int, and an int will be large enough for any reasonable watchpoint. > Also, I think we also document the "show" counterpart of each "set" > command. Done. 2011-05-14 Philippe Waroquiers * remote.c (remote_region_ok_for_hw_watchpoint): New function. (remote_hw_watchpoint_length_limit): New variable. (_initialize_remote) add set,show cmds for this new variable. gdb.texinfo: document these new commands. NEWS: document the change. Index: gdb/NEWS =================================================================== RCS file: /cvs/src/src/gdb/NEWS,v retrieving revision 1.441 diff -c -p -r1.441 NEWS *** gdb/NEWS 13 May 2011 22:36:06 -0000 1.441 --- gdb/NEWS 15 May 2011 19:51:54 -0000 *************** *** 3,8 **** --- 3,18 ---- *** Changes since GDB 7.3 + * GDB has two new commands: "set remote hardware-watchpoint-length-limit" + and "show remote hardware-watchpoint-length-limit". These allows to + set or show the maximum length limit (in bytes) of a remote + target hardware watchpoint. + + This allows e.g. to use "unlimited" hardware watchpoints with the + gdbserver integrated in Valgrind version >= 3.7.0. Such Valgrind + watchpoints are slower than real hardware watchpoints but are + significantly faster than gdb software watchpoints. + * libthread-db-search-path now supports two special values: $sdir and $pdir. $sdir specifies the default system locations of shared libraries. $pdir specifies the directory where the libpthread used by the application Index: gdb/remote.c =================================================================== RCS file: /cvs/src/src/gdb/remote.c,v retrieving revision 1.446 diff -c -p -r1.446 remote.c *** gdb/remote.c 12 May 2011 12:09:16 -0000 1.446 --- gdb/remote.c 15 May 2011 19:52:00 -0000 *************** remote_remove_watchpoint (CORE_ADDR addr *** 7756,7764 **** --- 7756,7778 ---- int remote_hw_watchpoint_limit = -1; + int remote_hw_watchpoint_length_limit = -1; int remote_hw_breakpoint_limit = -1; static int + remote_region_ok_for_hw_watchpoint (CORE_ADDR addr, int len) + { + if (remote_hw_watchpoint_length_limit == 0) + return 0; + else if (remote_hw_watchpoint_length_limit < 0) + return 1; + else if (len <= remote_hw_watchpoint_length_limit) + return 1; + else + return 0; + } + + static int remote_check_watch_resources (int type, int cnt, int ot) { if (type == bp_hardware_breakpoint) *************** Specify the serial device it is connecte *** 10326,10331 **** --- 10340,10347 ---- remote_ops.to_can_use_hw_breakpoint = remote_check_watch_resources; remote_ops.to_insert_hw_breakpoint = remote_insert_hw_breakpoint; remote_ops.to_remove_hw_breakpoint = remote_remove_hw_breakpoint; + remote_ops.to_region_ok_for_hw_watchpoint + = remote_region_ok_for_hw_watchpoint; remote_ops.to_insert_watchpoint = remote_insert_watchpoint; remote_ops.to_remove_watchpoint = remote_remove_watchpoint; remote_ops.to_kill = remote_kill; *************** Specify a negative limit for unlimited." *** 10735,10740 **** --- 10751,10765 ---- number of target hardware watchpoints is %s. */ &remote_set_cmdlist, &remote_show_cmdlist); + add_setshow_zinteger_cmd ("hardware-watchpoint-length-limit", no_class, + &remote_hw_watchpoint_length_limit, _("\ + Set the maximum length (in bytes) of a target hardware watchpoint."), _("\ + Show the maximum length (in bytes) of a target hardware watchpoint."), _("\ + Specify a negative limit for unlimited."), + NULL, NULL, /* FIXME: i18n: The maximum + length (in bytes) of a target + hardware watchpoint is %s. */ + &remote_set_cmdlist, &remote_show_cmdlist); add_setshow_zinteger_cmd ("hardware-breakpoint-limit", no_class, &remote_hw_breakpoint_limit, _("\ Set the maximum number of target hardware breakpoints."), _("\ Index: gdb/doc/gdb.texinfo =================================================================== RCS file: /cvs/src/src/gdb/doc/gdb.texinfo,v retrieving revision 1.838 diff -c -p -r1.838 gdb.texinfo *** gdb/doc/gdb.texinfo 13 May 2011 22:36:07 -0000 1.838 --- gdb/doc/gdb.texinfo 15 May 2011 19:52:25 -0000 *************** responses. *** 16578,16583 **** --- 16578,16595 ---- Restrict @value{GDBN} to using @var{limit} remote hardware breakpoint or watchpoints. A limit of -1, the default, is treated as unlimited. + @cindex limit hardware watchpoints length + @cindex remote target, limit watchpoints length + @anchor{set remote hardware-watchpoint-length-limit} + @item set remote hardware-watchpoint-length-limit @var{limit} + Restrict @value{GDBN} to using @var{limit} bytes for the maximum length of + a remote hardware watchpoint. A limit of -1, the default, is treated + as unlimited. + + @item show remote hardware-watchpoint-length-limit + Show the current limit (in bytes) of the maximum length of + a remote hardware watchpoint. + @item set remote exec-file @var{filename} @itemx show remote exec-file @anchor{set remote exec-file} ------=_NextPart_000_0006_01CC134D.19194DC0 Content-Type: text/plain; format=flowed; name="set-length-limit-3.desc.txt"; reply-type=original Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="set-length-limit-3.desc.txt" Content-length: 5507 2011-05-14 Philippe Waroquiers * remote.c (remote_region_ok_for_hw_watchpoint): New function. (remote_hw_watchpoint_length_limit): New variable. (_initialize_remote) add set,show cmds for this new variable. gdb.texinfo: document these new commands. NEWS: document the change. Index: gdb/NEWS =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvs/src/src/gdb/NEWS,v retrieving revision 1.441 diff -c -p -r1.441 NEWS *** gdb/NEWS 13 May 2011 22:36:06 -0000 1.441 --- gdb/NEWS 15 May 2011 19:51:54 -0000 *************** *** 3,8 **** --- 3,18 ---- =20=20 *** Changes since GDB 7.3 =20=20 + * GDB has two new commands: "set remote hardware-watchpoint-length-limit" + and "show remote hardware-watchpoint-length-limit". These allows to + set or show the maximum length limit (in bytes) of a remote + target hardware watchpoint. +=20 + This allows e.g. to use "unlimited" hardware watchpoints with the + gdbserver integrated in Valgrind version >=3D 3.7.0. Such Valgrind + watchpoints are slower than real hardware watchpoints but are + significantly faster than gdb software watchpoints. +=20 * libthread-db-search-path now supports two special values: $sdir and $pd= ir. $sdir specifies the default system locations of shared libraries. $pdir specifies the directory where the libpthread used by the applicat= ion Index: gdb/remote.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvs/src/src/gdb/remote.c,v retrieving revision 1.446 diff -c -p -r1.446 remote.c *** gdb/remote.c 12 May 2011 12:09:16 -0000 1.446 --- gdb/remote.c 15 May 2011 19:52:00 -0000 *************** remote_remove_watchpoint (CORE_ADDR addr *** 7756,7764 **** --- 7756,7778 ---- =20=20 =20=20 int remote_hw_watchpoint_limit =3D -1; + int remote_hw_watchpoint_length_limit =3D -1; int remote_hw_breakpoint_limit =3D -1; =20=20 static int + remote_region_ok_for_hw_watchpoint (CORE_ADDR addr, int len) + { + if (remote_hw_watchpoint_length_limit =3D=3D 0) + return 0; + else if (remote_hw_watchpoint_length_limit < 0) + return 1; + else if (len <=3D remote_hw_watchpoint_length_limit) + return 1; + else + return 0; + } +=20 + static int remote_check_watch_resources (int type, int cnt, int ot) { if (type =3D=3D bp_hardware_breakpoint) *************** Specify the serial device it is connecte *** 10326,10331 **** --- 10340,10347 ---- remote_ops.to_can_use_hw_breakpoint =3D remote_check_watch_resources; remote_ops.to_insert_hw_breakpoint =3D remote_insert_hw_breakpoint; remote_ops.to_remove_hw_breakpoint =3D remote_remove_hw_breakpoint; + remote_ops.to_region_ok_for_hw_watchpoint + =3D remote_region_ok_for_hw_watchpoint; remote_ops.to_insert_watchpoint =3D remote_insert_watchpoint; remote_ops.to_remove_watchpoint =3D remote_remove_watchpoint; remote_ops.to_kill =3D remote_kill; *************** Specify a negative limit for unlimited." *** 10735,10740 **** --- 10751,10765 ---- number of target hardware watchpoints is %s. */ &remote_set_cmdlist, &remote_show_cmdlist); + add_setshow_zinteger_cmd ("hardware-watchpoint-length-limit", no_class, + &remote_hw_watchpoint_length_limit, _("\ + Set the maximum length (in bytes) of a target hardware watchpoint."), _("\ + Show the maximum length (in bytes) of a target hardware watchpoint."), _(= "\ + Specify a negative limit for unlimited."), + NULL, NULL, /* FIXME: i18n: The maximum + length (in bytes) of a target + hardware watchpoint is %s. */ + &remote_set_cmdlist, &remote_show_cmdlist); add_setshow_zinteger_cmd ("hardware-breakpoint-limit", no_class, &remote_hw_breakpoint_limit, _("\ Set the maximum number of target hardware breakpoints."), _("\ Index: gdb/doc/gdb.texinfo =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvs/src/src/gdb/doc/gdb.texinfo,v retrieving revision 1.838 diff -c -p -r1.838 gdb.texinfo *** gdb/doc/gdb.texinfo 13 May 2011 22:36:07 -0000 1.838 --- gdb/doc/gdb.texinfo 15 May 2011 19:52:25 -0000 *************** responses. *** 16578,16583 **** --- 16578,16595 ---- Restrict @value{GDBN} to using @var{limit} remote hardware breakpoint or watchpoints. A limit of -1, the default, is treated as unlimited. =20=20 + @cindex limit hardware watchpoints length + @cindex remote target, limit watchpoints length + @anchor{set remote hardware-watchpoint-length-limit} + @item set remote hardware-watchpoint-length-limit @var{limit} + Restrict @value{GDBN} to using @var{limit} bytes for the maximum length of + a remote hardware watchpoint. A limit of -1, the default, is treated + as unlimited. +=20 + @item show remote hardware-watchpoint-length-limit + Show the current limit (in bytes) of the maximum length of + a remote hardware watchpoint. +=20 @item set remote exec-file @var{filename} @itemx show remote exec-file @anchor{set remote exec-file} ------=_NextPart_000_0006_01CC134D.19194DC0--