OpenCores
URL https://opencores.org/ocsvn/openmsp430/openmsp430/trunk

Subversion Repositories openmsp430

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /openmsp430
    from Rev 216 to Rev 217
    Reverse comparison

Rev 216 → Rev 217

/trunk/tools/openmsp430-gdbproxy/commands.tcl
22,9 → 22,9
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
#
#------------------------------------------------------------------------------
#
#
# File Name: commands.tcl
#
#
# Author(s):
# - Olivier Girard, olgirard@gmail.com
#
97,7 → 97,9
# Read CPU registers #
#-----------------------------------------------------------------------------#
proc rsp_g {CpuNr} {
 
global mspgcc_compat_mode
 
# Read register value
set reg_val [ReadRegAll $CpuNr]
 
104,9 → 106,12
# Format answer
set rsp_answer ""
for {set i 0} {$i < [llength $reg_val]} {incr i} {
 
regexp {0x(..)(..)} [lindex $reg_val $i] match msb lsb
append rsp_answer "$lsb$msb"
if {$mspgcc_compat_mode} {
append rsp_answer "$lsb$msb"
} else {
append rsp_answer "$lsb${msb}0000"
}
}
 
return $rsp_answer
116,15 → 121,24
# Write CPU registers #
#-----------------------------------------------------------------------------#
proc rsp_G {CpuNr cmd} {
 
global mspgcc_compat_mode
 
# Format register value
set num_reg [expr [string length $cmd]/4]
 
if {$mspgcc_compat_mode} {
set num_reg [expr [string length $cmd]/4]
} else {
set num_reg [expr [string length $cmd]/8]
}
set reg_val ""
for {set i 0} {$i < $num_reg} {incr i} {
 
set lsb "[string index $cmd [expr $i*4+0]][string index $cmd [expr $i*4+1]]"
set msb "[string index $cmd [expr $i*4+2]][string index $cmd [expr $i*4+3]]"
if {$mspgcc_compat_mode} {
set lsb "[string index $cmd [expr $i*4+0]][string index $cmd [expr $i*4+1]]"
set msb "[string index $cmd [expr $i*4+2]][string index $cmd [expr $i*4+3]]"
} else {
set lsb "[string index $cmd [expr $i*8+0]][string index $cmd [expr $i*8+1]]"
set msb "[string index $cmd [expr $i*8+2]][string index $cmd [expr $i*8+3]]"
}
lappend reg_val "0x$msb$lsb"
}
 
134,14 → 148,15
return "OK"
}
 
 
#-----------------------------------------------------------------------------#
# Kill request. #
#-----------------------------------------------------------------------------#
proc rsp_k {CpuNr cmd} {
 
# Reset & Stop CPU
ExecutePOR_Halt $CpuNr
 
return "-1"
}
 
149,16 → 164,16
# Write length bytes of memory. #
#-----------------------------------------------------------------------------#
proc rsp_M {CpuNr cmd} {
 
global mem_breakpoint
global mem_mapping
global breakSelect
 
# Parse command
regexp {(.*),(.*):(.*)} $cmd match addr length data
set addr [format %04x "0x$addr"]
set length [format %d "0x$length"]
 
# Format data
set mem_val ""
for {set i 0} {$i<$length} {incr i} {
175,18 → 190,18
 
# Eventually re-set the software breakpoints in case they have been overwritten
if {$breakSelect==0} {
set addr_start [format %d "0x$addr"]
foreach {brk_addr brk_val} [array get mem_breakpoint] {
regsub {,} $brk_addr { } brk_addr_lst
if {[lindex $brk_addr_lst 0]==$mem_mapping($CpuNr)} {
set brk_addr_dec [format %d "0x[lindex $brk_addr_lst 1]"]
set brk_addr_offset [expr $brk_addr_dec-$addr_start]
if {(0<=$brk_addr_offset) && ($brk_addr_offset<=$length)} {
set mem_breakpoint($brk_addr) [lindex $mem_val $brk_addr_offset]
WriteMem $CpuNr 0 "0x[lindex $brk_addr 1]" 0x4343
}
}
}
set addr_start [format %d "0x$addr"]
foreach {brk_addr brk_val} [array get mem_breakpoint] {
regsub {,} $brk_addr { } brk_addr_lst
if {[lindex $brk_addr_lst 0]==$mem_mapping($CpuNr)} {
set brk_addr_dec [format %d "0x[lindex $brk_addr_lst 1]"]
set brk_addr_offset [expr $brk_addr_dec-$addr_start]
if {(0<=$brk_addr_offset) && ($brk_addr_offset<=$length)} {
set mem_breakpoint($brk_addr) [lindex $mem_val $brk_addr_offset]
WriteMem $CpuNr 0 "0x[lindex $brk_addr 1]" 0x4343
}
}
}
}
 
return "OK"
197,7 → 212,7
# Read length bytes from memory. #
#-----------------------------------------------------------------------------#
proc rsp_m {CpuNr cmd} {
 
global mem_breakpoint
global mem_mapping
global breakSelect
209,21 → 224,21
 
# Read memory
set data [ReadMemQuick8 $CpuNr "0x$addr" $length]
 
 
# Eventually replace read data by the original software breakpoint value
if {$breakSelect==0} {
set addr_start [format %d "0x$addr"]
foreach {brk_addr brk_val} [array get mem_breakpoint] {
regsub {,} $brk_addr { } brk_addr_lst
if {[lindex $brk_addr_lst 0]==$mem_mapping($CpuNr)} {
set brk_addr_dec [format %d "0x[lindex $brk_addr_lst 1]"]
set brk_addr_offset [expr $brk_addr_dec-$addr_start]
if {(0<=$brk_addr_offset) && ($brk_addr_offset<=$length)} {
set data [lreplace $data $brk_addr_offset $brk_addr_offset "0x$mem_breakpoint($brk_addr)"]
}
}
}
set addr_start [format %d "0x$addr"]
foreach {brk_addr brk_val} [array get mem_breakpoint] {
regsub {,} $brk_addr { } brk_addr_lst
if {[lindex $brk_addr_lst 0]==$mem_mapping($CpuNr)} {
set brk_addr_dec [format %d "0x[lindex $brk_addr_lst 1]"]
set brk_addr_offset [expr $brk_addr_dec-$addr_start]
if {(0<=$brk_addr_offset) && ($brk_addr_offset<=$length)} {
set data [lreplace $data $brk_addr_offset $brk_addr_offset "0x$mem_breakpoint($brk_addr)"]
}
}
}
}
 
# Format data
250,19 → 265,19
switch -exact -- $type {
"0" {# Soft Memory breakpoint
if {$breakSelect==0} {
if {![info exists mem_breakpoint($mem_mapping($CpuNr),$addr)]} {
set mem_breakpoint($mem_mapping($CpuNr),$addr) [ReadMem $CpuNr 0 "0x$addr"]
WriteMem $CpuNr 0 "0x$addr" 0x4343
}
return "OK"
if {![info exists mem_breakpoint($mem_mapping($CpuNr),$addr)]} {
set mem_breakpoint($mem_mapping($CpuNr),$addr) [ReadMem $CpuNr 0 "0x$addr"]
WriteMem $CpuNr 0 "0x$addr" 0x4343
}
return "OK"
 
# Hard Memory breakpoint
} else {
if {[SetHWBreak $CpuNr 1 [format "0x%04x" 0x$addr] 1 0]} {
#putsLog "CORE $CpuNr: --- INFO --- SET HARDWARE MEMORY BREAKPOINT. "
#putsLog "CORE $CpuNr: --- INFO --- SET HARDWARE MEMORY BREAKPOINT. "
return "OK"
}
putsLog "CORE $CpuNr: --- ERROR --- NO MORE HARDWARE MEMORY BREAKPOINT AVAILABLE. "
putsLog "CORE $CpuNr: --- ERROR --- NO MORE HARDWARE MEMORY BREAKPOINT AVAILABLE. "
return ""
}
}
271,7 → 286,7
if {[SetHWBreak $CpuNr 1 [format "0x%04x" 0x$addr] 1 0]} {
return "OK"
}
putsLog "CORE $CpuNr: --- ERROR --- NO MORE HARDWARE BREAKPOINT AVAILABLE. "
putsLog "CORE $CpuNr: --- ERROR --- NO MORE HARDWARE BREAKPOINT AVAILABLE. "
return ""
}
 
279,7 → 294,7
if {[SetHWBreak $CpuNr 0 [format "0x%04x" 0x$addr] 0 1]} {
return "OK"
}
putsLog "CORE $CpuNr: --- ERROR --- NO MORE WRITE WATCHPOINT AVAILABLE. "
putsLog "CORE $CpuNr: --- ERROR --- NO MORE WRITE WATCHPOINT AVAILABLE. "
return ""
}
 
287,7 → 302,7
if {[SetHWBreak $CpuNr 0 [format "0x%04x" 0x$addr] 1 0]} {
return "OK"
}
putsLog "CORE $CpuNr: --- ERROR --- NO MORE READ WATCHPOINT AVAILABLE. "
putsLog "CORE $CpuNr: --- ERROR --- NO MORE READ WATCHPOINT AVAILABLE. "
return ""
}
 
295,7 → 310,7
if {[SetHWBreak $CpuNr 0 [format "0x%04x" 0x$addr] 1 1]} {
return "OK"
}
putsLog "CORE $CpuNr: --- ERROR --- NO MORE ACCESS WATCHPOINT AVAILABLE. "
putsLog "CORE $CpuNr: --- ERROR --- NO MORE ACCESS WATCHPOINT AVAILABLE. "
return ""
}
 
319,19 → 334,19
switch -exact -- $type {
"0" {# Soft Memory breakpoint
if {$breakSelect==0} {
if {[info exists mem_breakpoint($mem_mapping($CpuNr),$addr)]} {
WriteMem $CpuNr 0 "0x$addr" $mem_breakpoint($mem_mapping($CpuNr),$addr)
unset mem_breakpoint($mem_mapping($CpuNr),$addr)
}
if {[info exists mem_breakpoint($mem_mapping($CpuNr),$addr)]} {
WriteMem $CpuNr 0 "0x$addr" $mem_breakpoint($mem_mapping($CpuNr),$addr)
unset mem_breakpoint($mem_mapping($CpuNr),$addr)
}
return "OK"
 
# Hard Memory breakpoint
} else {
if {[ClearHWBreak $CpuNr 1 [format "0x%04x" 0x$addr]]} {
#putsLog "CORE $CpuNr: --- INFO --- RELEASE HARDWARE MEMORY BREAKPOINT. "
#putsLog "CORE $CpuNr: --- INFO --- RELEASE HARDWARE MEMORY BREAKPOINT. "
return "OK"
}
putsLog "CORE $CpuNr: --- ERROR --- COULD NOT REMOVE HARDWARE MEMORY BREAKPOINT. "
putsLog "CORE $CpuNr: --- ERROR --- COULD NOT REMOVE HARDWARE MEMORY BREAKPOINT. "
return ""
}
}
372,7 → 387,7
# Continue. #
#-----------------------------------------------------------------------------#
proc rsp_c {CpuNr sock cmd} {
 
# Set address if required
if {$cmd!=""} {
set cmd [format %04x "0x$cmd"]
393,7 → 408,7
# Step. #
#-----------------------------------------------------------------------------#
proc rsp_s {CpuNr sock cmd} {
 
# Set address if required
if {$cmd!=""} {
set cmd [format %04x "0x$cmd"]
450,15 → 465,15
# value changes. If not, return an error otherwise GDB will
# end-up in an infinite loop.
if {$cmd == "s"} {
if {$opt_val == $pc} {
return "E05"
}
if {$opt_val == $pc} {
return "E05"
}
}
 
if {$mspgcc_compat_mode} {
return "T0500:$pc_lo$pc_hi;04:$r4_lo$r4_hi;" ;# 16bit word Response for older MSPGCC versions
return "T0500:$pc_lo$pc_hi;04:$r4_lo$r4_hi;" ;# 16bit word Response for older MSPGCC versions
} else {
return "T0500:$pc_lo${pc_hi}0000;04:$r4_lo${r4_hi}0000;" ;# 32bit word Response starting with TI/RedHat GCC port
return "T0500:$pc_lo${pc_hi}0000;04:$r4_lo${r4_hi}0000;" ;# 32bit word Response starting with TI/RedHat GCC port
}
}
 
467,7 → 482,7
# #
#-----------------------------------------------------------------------------#
proc rsp_q {CpuNr sock cmd} {
 
switch -regexp -- $cmd {
 
"C" {set rsp_answer ""}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.