From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 10094 invoked by alias); 16 Sep 2014 16:42:03 -0000 Mailing-List: contact gdb-prs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-prs-owner@sourceware.org Received: (qmail 10061 invoked by uid 55); 16 Sep 2014 16:42:02 -0000 From: "cvs-commit at gcc dot gnu.org" To: gdb-prs@sourceware.org Subject: [Bug breakpoints/12526] watch -location false positives on bitfields Date: Tue, 16 Sep 2014 16:42:00 -0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gdb X-Bugzilla-Component: breakpoints X-Bugzilla-Version: HEAD X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: cvs-commit at gcc dot gnu.org X-Bugzilla-Status: NEW X-Bugzilla-Priority: P2 X-Bugzilla-Assigned-To: unassigned at sourceware dot org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: Message-ID: In-Reply-To: References: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit X-Bugzilla-URL: http://sourceware.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 X-SW-Source: 2014-q3/txt/msg00612.txt.bz2 https://sourceware.org/bugzilla/show_bug.cgi?id=12526 --- Comment #1 from cvs-commit at gcc dot gnu.org --- This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "gdb and binutils". The branch, master has been updated via bb9d5f81c36ecc61e3d4a70ce7e41348c8b12fef (commit) from d3d3c6db1a3de87d5df6900f3be0557c33fa23b3 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=bb9d5f81c36ecc61e3d4a70ce7e41348c8b12fef commit bb9d5f81c36ecc61e3d4a70ce7e41348c8b12fef Author: Patrick Palka Date: Tue Sep 16 17:40:06 2014 +0100 Fix PR12526: -location watchpoints for bitfield arguments PR 12526 reports that -location watchpoints against bitfield arguments trigger false positives when bits around the bitfield, but not the bitfield itself, are modified. This happens because -location watchpoints naturally operate at the byte level, not at the bit level. When the address of a bitfield lvalue is taken, information about the bitfield (i.e. its offset and size) is lost in the process. This information must first be retained throughout the lifetime of the -location watchpoint. This patch achieves this by adding two new fields to the watchpoint struct: val_bitpos and val_bitsize. These fields are set when a watchpoint is first defined in watch_command_1. They are both equal to zero if the watchpoint is not a -location watchpoint or if the argument is not a bitfield. Then these bitfield parameters are used inside update_watchpoint and watchpoint_check to extract the actual value of the bitfield from the watchpoint address, with the help of a local helper function extract_bitfield_from_watchpoint_value. Finally when creating a HW breakpoint pointing to a bitfield, we optimize the address and length of the breakpoint. By skipping over the bytes that don't cover the bitfield, this step reduces the frequency at which a read watchpoint for the bitfield is triggered. It also reduces the number of times a false-positive call to check_watchpoint is triggered for a write watchpoint. gdb/ PR breakpoints/12526 * breakpoint.h (struct watchpoint): New fields val_bitpos and val_bitsize. * breakpoint.c (watch_command_1): Use these fields to retain bitfield information. (extract_bitfield_from_watchpoint_value): New function. (watchpoint_check): Use it. (update_watchpoint): Use it. Optimize the address and length of a HW watchpoint pointing to a bitfield. * value.h (unpack_value_bitfield): New prototype. * value.c (unpack_value_bitfield): Make extern. gdb/testsuite/ PR breakpoints/12526 * gdb.base/watch-bitfields.exp: New file. * gdb.base/watch-bitfields.c: New file. ----------------------------------------------------------------------- Summary of changes: gdb/ChangeLog | 14 +++++ gdb/breakpoint.c | 74 +++++++++++++++++++++++++++- gdb/breakpoint.h | 5 ++ gdb/testsuite/ChangeLog | 6 ++ gdb/testsuite/gdb.base/watch-bitfields.c | 54 ++++++++++++++++++++ gdb/testsuite/gdb.base/watch-bitfields.exp | 56 +++++++++++++++++++++ gdb/value.c | 2 +- gdb/value.h | 5 ++ 8 files changed, 214 insertions(+), 2 deletions(-) create mode 100644 gdb/testsuite/gdb.base/watch-bitfields.c create mode 100644 gdb/testsuite/gdb.base/watch-bitfields.exp -- You are receiving this mail because: You are on the CC list for the bug.