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. 5caa2f0b272d2a6edf56571fd0c59f922f26eb41


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  5caa2f0b272d2a6edf56571fd0c59f922f26eb41 (commit)
       via  76fd5f745a0ba0b163fada011bece5084b3079c7 (commit)
      from  8f0084065d30812b428df35a82f5edb51e92460d (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=5caa2f0b272d2a6edf56571fd0c59f922f26eb41

commit 5caa2f0b272d2a6edf56571fd0c59f922f26eb41
Author: Pedro Alves <palves@redhat.com>
Date:   Wed Feb 12 12:27:50 2014 +0000

    H8/300: Fix pseudo registers reads/writes.
    
    'info registers ccr' corrupts memory.
    
    Debugging gdb under Valgrind, we see:
    
     (gdb) info registers ccr
     ==23225== Invalid write of size 1
     ==23225==    at 0x4A0A308: memcpy@@GLIBC_2.14 (mc_replace_strmem.c:881)
     ==23225==    by 0x52D334: regcache_raw_read (regcache.c:625)
     ==23225==    by 0x45E4D8: h8300_pseudo_register_read (h8300-tdep.c:1171)
     ==23225==    by 0x5B694B: gdbarch_pseudo_register_read (gdbarch.c:1926)
     ==23225==    by 0x52DADB: regcache_cooked_read (regcache.c:740)
     ==23225==    by 0x52DC10: regcache_cooked_read_value (regcache.c:765)
     ==23225==    by 0x68CA41: sentinel_frame_prev_register (sentinel-frame.c:52)
     ==23225==    by 0x6B80CB: frame_unwind_register_value (frame.c:1105)
     ==23225==    by 0x6B7C97: frame_register_unwind (frame.c:1010)
     ==23225==    by 0x6B7F73: frame_unwind_register (frame.c:1064)
     ==23225==    by 0x6B8359: frame_unwind_register_signed (frame.c:1162)
     ==23225==    by 0x6B8396: get_frame_register_signed (frame.c:1169)
     ==23225==  Address 0x4f7b031 is 0 bytes after a block of size 1 alloc'd
     ==23225==    at 0x4A06B0F: calloc (vg_replace_malloc.c:593)
     ==23225==    by 0x6EB754: xcalloc (common-utils.c:91)
     ==23225==    by 0x6EB793: xzalloc (common-utils.c:101)
     ==23225==    by 0x53A782: allocate_value_contents (value.c:854)
     ==23225==    by 0x53A7B4: allocate_value (value.c:864)
     ==23225==    by 0x52DBC8: regcache_cooked_read_value (regcache.c:757)
     ==23225==    by 0x68CA41: sentinel_frame_prev_register (sentinel-frame.c:52)
     ==23225==    by 0x6B80CB: frame_unwind_register_value (frame.c:1105)
     ==23225==    by 0x6B7C97: frame_register_unwind (frame.c:1010)
     ==23225==    by 0x6B7F73: frame_unwind_register (frame.c:1064)
     ==23225==    by 0x6B8359: frame_unwind_register_signed (frame.c:1162)
     ==23225==    by 0x6B8396: get_frame_register_signed (frame.c:1169)
     ==23225==
     ccr            0x00        0    I-0 UI-0 H-0 U-0 N-0 Z-0 V-0 C-0 u> u>= != >= >
     (gdb)
    
    This bit:
    
     ==23225== Invalid write of size 1
     ==23225==    at 0x4A0A308: memcpy@@GLIBC_2.14 (mc_replace_strmem.c:881)
     ==23225==    by 0x52D334: regcache_raw_read (regcache.c:625)
     ==23225==    by 0x45E4D8: h8300_pseudo_register_read (h8300-tdep.c:1171)
    
    shows the problem.  The CCR pseudo register has type length of 1,
    while the corresponding CCR raw register has a length of 2 or 4
    (depending on mode).  In
    sim/h8300/compile.c:sim_{fetch|store}_register we see that the sim
    also treats those raw registers (CCR/EXR) as 2 or 4 bytes length.
    
    gdb/
    2014-02-12  Pedro Alves  <palves@redhat.com>
    
    	* h8300-tdep.c (pseudo_from_raw_register)
    	(raw_from_pseudo_register): New functions.
    	(h8300_pseudo_register_read, h8300_pseudo_register_write): Use
    	them.

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=76fd5f745a0ba0b163fada011bece5084b3079c7

commit 76fd5f745a0ba0b163fada011bece5084b3079c7
Author: Pedro Alves <palves@redhat.com>
Date:   Wed Feb 12 12:27:49 2014 +0000

    H8/300: Fix gdb<->sim register mapping.
    
    Currently, printing the H8/300 ccr register when debugging with the
    sim is broken:
    
     (gdb) target sim
     ...
     (gdb) load
     ...
     (gdb) start
     ...
     Breakpoint 1, foo (i=0x0 <foo>) at main.c:4
     4       {
     (gdb) info registers ccr
     Register 13 is not available
    
    '13' is the ccr pseudo-register.  This pseudo-register provides an
    8-bit view into the raw ccr register (regno=8).
    
    The problem is that the H8/300 port does not define a
    register_sim_regno gdbarch hook, and thus when fetching the raw
    register off of the sim, we end up in legacy_register_sim_regno trying
    to figure out the sim register number for the raw CCR register:
    
     int
     legacy_register_sim_regno (struct gdbarch *gdbarch, int regnum)
     {
       /* Only makes sense to supply raw registers.  */
       gdb_assert (regnum >= 0 && regnum < gdbarch_num_regs (gdbarch));
       /* NOTE: cagney/2002-05-13: The old code did it this way and it is
          suspected that some GDB/SIM combinations may rely on this
          behavour.  The default should be one2one_register_sim_regno
          (below).  */
       if (gdbarch_register_name (gdbarch, regnum) != NULL
           && gdbarch_register_name (gdbarch, regnum)[0] != '\0')
         return regnum;
       else
         return LEGACY_SIM_REGNO_IGNORE;
     }
    
    Because the raw ccr register does not have a name (so that it is
    hidden from the user), that returns LEGACY_SIM_REGNO_IGNORE.  That
    means that we never actually read the value of the raw ccr register.
    
    Before the <unavailable> support, this must have meant that ccr was
    _always_ read as 0...  At least, I'm not seeing how this ever worked.
    
    The fix for that is adding a gdbarch_register_sim_regno hook that maps
    all raw registers.  Looking at sim/h8300/sim-main.h, I believe the
    sim's register numbers are compatible with gdb's, so no actual
    convertion is necessary.
    
    gdb/
    2014-02-12  Pedro Alves  <palves@redhat.com>
    
    	* h8300-tdep.c (h8300_register_sim_regno): New function.
    	(h8300_gdbarch_init): Install h8300_register_sim_regno as
    	gdbarch_register_sim_regno hook.

-----------------------------------------------------------------------

Summary of changes:
 gdb/ChangeLog    |   13 ++++++++++
 gdb/h8300-tdep.c |   66 ++++++++++++++++++++++++++++++++++++++++++++++++++---
 2 files changed, 75 insertions(+), 4 deletions(-)


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]