Mercurial > hg > Members > kono > nitros9-code
view scripts/os9.gdb @ 3001:8e1891c6cc4a
level3 makefiles: Lots of whitespace fixes, no code changes
author | Gene Heskett <gheskett@wdtv.com> |
---|---|
date | Sun, 26 Oct 2014 12:41:21 +0100 |
parents | a0b770fab355 |
children | e3e858889ab6 |
line wrap: on
line source
# gdb scripts for NitrOS-9 (or OS-9) # Copyright 2014 Tormod Volden # os9_mdir prints out registered modules, like os9 mdir command # pretty-print of registers on every halt, # and update external source code window define hook-stop printf "S=%04x X=%04x Y=%04x U=%04x A=%02x B=%02x CC=%02x PC=%04x ", $s, $x, $y, $u, $a, $b, $cc , $pc os9_mwhere end # print name of module at given address define os9_mname set $mname = (char*)$arg0 + *((int*)$arg0 + 2) while 1 if (*$mname < 0x80) printf "%c", *$mname else printf "%c", *$mname-0x80 loop_break end set $mname += 1 end end # print details of module at given address define os9_mident set $m = (int*)$arg0 set $msize = *($m + 1) set $mtype = *((char*) $m + 6) set $mexec = *(int*)((char*) $m + 9) printf "%04x %4x %2X ", $m, $msize, $mtype os9_mname $m if ($mtype & 0xf) printf "\t[exec %04x] ", (char*)$m + $mexec end printf "\n" end # list all registered modules define os9_mdir printf "addr size ty name\n" set $mt = 0x300 while ($mt < 0x400) if ((int*)*$mt) os9_mident (int*)*$mt end set $mt += 4 end end # finds module at given address, sets $mstart define os9_mwhich set $pc_reg = $arg0 set $mt = 0x300 while ($mt < 0x400) if ((int*)*$mt) set $mstart = (int*)*$mt set $mend = (char*)$mstart + *($mstart + 1) if ($pc_reg >= $mstart && $pc_reg < $mend) loop_break end end set $mt += 4 end if ($mt == 0x400) set $mstart = 0 end end # Look up source code line for given address. # Requires assembly list files named by CRC in current directory # and "gvim" to display listing and highlight line. define os9_mwhere if ($argc == 1) set $pc_reg = $arg0 else set $pc_reg = $pc end os9_mwhich $pc_reg if ($mstart) printf "inside " os9_mname $mstart printf "\n" eval "!gvim --remote %02X%02X%02X.crc && gvim --remote-send \":set cursorline<CR>\" && gvim --remote-send \"/^%04X<CR>\"", *((char*)$mend-3), *((char*)$mend-2), *((char*)$mend-1), (char*)$pc_reg - (char*)$mstart else printf "no module\n" end end # Set breakpoint in current module, at given offset define b9 os9_mwhich $pc eval "hbreak *0x%x", (int)$mstart + $arg0 end