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]

[binutils-gdb] Fix M68HC11_NUM_REGS


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

commit a714b0d6928ba195623ec2825b00c446939f6e59
Author: Yao Qi <yao.qi@linaro.org>
Date:   Wed Nov 15 09:36:51 2017 +0000

    Fix M68HC11_NUM_REGS
    
    M68HC11_LAST_HARD_REG is 8, but m68hc11 register number is started from 0,
    so there are 9 raw registers, but M68HC11_NUM_REGS is 8 by mistake.
    
    My following unit test can find this issue (GDB is built with asan)
    
    =================================================================
    ==15555==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x602000113150 at pc 0x51393f bp 0x7fffcec36f60 sp 0x7fffcec36f58
    WRITE of size 2 at 0x602000113150 thread T0
        #0 0x51393e in m68hc11_pseudo_register_read gdb/m68hc11-tdep.c:320
        #1 0xc4b620 in gdbarch_pseudo_register_read(gdbarch*, regcache*, int, unsigned char*) gdb/gdbarch.c:1974
        #2 0xddad88 in regcache::cooked_read(int, unsigned char*) gdb/regcache.c:710
        #3 0xddff2b in cooked_read_test gdb/regcache.c:1850
        #4 0xdf8cfb in selftests::gdbarch_selftest::operator()() const gdb/selftest-arch.c:73
    
    gdb:
    
    2017-11-15  Yao Qi  <yao.qi@linaro.org>
    
    	* m68hc11-tdep.c (M68HC11_NUM_REGS): Change it to
    	M68HC11_LAST_HARD_REG + 1.

Diff:
---
 gdb/ChangeLog      | 5 +++++
 gdb/m68hc11-tdep.c | 2 +-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 6afec28..fe24318 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,8 @@
+2017-11-15  Yao Qi  <yao.qi@linaro.org>
+
+	* m68hc11-tdep.c (M68HC11_NUM_REGS): Change it to
+	M68HC11_LAST_HARD_REG + 1.
+
 2017-11-14  Paul Carroll  <pcarroll@codesourcery.com>
 
 	PR gdb/22388
diff --git a/gdb/m68hc11-tdep.c b/gdb/m68hc11-tdep.c
index b144d8b..9c2ecb0 100644
--- a/gdb/m68hc11-tdep.c
+++ b/gdb/m68hc11-tdep.c
@@ -112,7 +112,7 @@ enum insn_return_kind {
 #define SOFT_D32_REGNUM     (SOFT_D1_REGNUM+31)
 #define M68HC11_MAX_SOFT_REGS 32
 
-#define M68HC11_NUM_REGS        (8)
+#define M68HC11_NUM_REGS        (M68HC11_LAST_HARD_REG + 1)
 #define M68HC11_NUM_PSEUDO_REGS (M68HC11_MAX_SOFT_REGS+5)
 #define M68HC11_ALL_REGS        (M68HC11_NUM_REGS+M68HC11_NUM_PSEUDO_REGS)


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