This is the mail archive of the gdb-cvs@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]

gdb and binutils branch master updated. bb9d5f81c36ecc61e3d4a70ce7e41348c8b12fef


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 <patrick@parcs.ath.cx>
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


hooks/post-receive
-- 
gdb and binutils


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