122 lines
2.7 KiB
Plaintext
122 lines
2.7 KiB
Plaintext
# This file is part of Jehanne.
|
|
#
|
|
# Copyright (C) 2016-2017 Giacomo Tesio <giacomo@tesio.it>
|
|
|
|
set $__pendingUserBreak = 0
|
|
|
|
define jhn-print-with-context
|
|
if up != 0
|
|
printf "%s %d ", up->text, up->pid
|
|
end
|
|
if m != 0
|
|
printf "(mach %d) ", m->machno
|
|
end
|
|
if $argc == 1
|
|
p $arg0
|
|
end
|
|
if $argc == 2
|
|
printf $arg0, $arg1
|
|
end
|
|
if $argc == 3
|
|
printf $arg0, $arg1, $arg2
|
|
end
|
|
if $argc == 4
|
|
printf $arg0, $arg1, $arg2, $arg3
|
|
end
|
|
printf "\n"
|
|
end
|
|
|
|
define jhn-log-syscalls
|
|
if $argc == 0
|
|
b syscall
|
|
end
|
|
if $argc == 1
|
|
b syscall if up != 0 && $_streq(up->text, $arg0)
|
|
end
|
|
commands
|
|
jhn-print-with-context " pc = 0x%x " ureg->ip
|
|
c
|
|
end
|
|
end
|
|
|
|
define jhn-log-errors
|
|
b errorl
|
|
commands
|
|
jhn-print-with-context
|
|
bt 4
|
|
c
|
|
end
|
|
end
|
|
|
|
define jhn-break-cmd
|
|
if $argc < 2 || $argc > 3
|
|
printf "usage: jhn-break-cmd symbol/path \"programName\" [address]\n"
|
|
else
|
|
if $__pendingUserBreak > 0
|
|
printf "jhn-break-cmd: cannot set a new breakpoint in user space until the previous one is recorded at\n "
|
|
info line *$__breakAddr
|
|
else
|
|
add-symbol-file $arg0 0x4000c0
|
|
set __onExecFaultBreakForCMD = $arg1
|
|
set $__breakAddr = (uintptr_t)0x4000c0
|
|
set $__breakPageStart = (uintptr_t)0x400000
|
|
set $__breakPageEnd = (uintptr_t)0x401000
|
|
if $argc == 3
|
|
set $__breakAddr = (uintptr_t)$arg2
|
|
set $__breakPageStart = (uintptr_t)($__breakAddr & ~(0x1000-1))
|
|
set $__breakPageEnd = (uintptr_t)($__breakAddr + 0x1000)
|
|
end
|
|
b *peekAtExecFaults+114 if addr >= $__breakPageStart && addr < $__breakPageEnd
|
|
set $__pendingUserBreak = $bpnum
|
|
commands
|
|
d $__pendingUserBreak
|
|
set $__pendingUserBreak = 0
|
|
b *$__breakAddr
|
|
c
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
define jhn-break-pid
|
|
if $argc < 2 || $argc > 3
|
|
printf "usage: jhn-break-pid symbol/path pid [address]\n"
|
|
else
|
|
if $__pendingUserBreak > 0
|
|
printf "jhn-break-pid: cannot set a new breakpoint in user space until the previous one is recorded at\n "
|
|
info line *$__breakAddr
|
|
else
|
|
add-symbol-file $arg0 0x4000c0
|
|
set __onExecFaultBreakForPID = $arg1
|
|
set $__breakAddr = (uintptr_t)0x4000c0
|
|
set $__breakPageStart = (uintptr_t)0x400000
|
|
set $__breakPageEnd = (uintptr_t)0x401000
|
|
if $argc == 3
|
|
set $__breakAddr = (uintptr_t)$arg2
|
|
set $__breakPageStart = (uintptr_t)($__breakAddr & ~(0x1000-1))
|
|
set $__breakPageEnd = (uintptr_t)($__breakAddr + 0x1000)
|
|
end
|
|
b *peekAtExecFaults+64 if addr >= $__breakPageStart && addr < $__breakPageEnd
|
|
set $__pendingUserBreak = $bpnum
|
|
commands
|
|
d $__pendingUserBreak
|
|
set $__pendingUserBreak = 0
|
|
b *$__breakAddr
|
|
c
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
define jhn-connect
|
|
if $argc == 1
|
|
target remote $arg0
|
|
else
|
|
target remote :1234
|
|
end
|
|
printf "connected to QEMU\n"
|
|
if $pc == waitdebugger+22
|
|
set var c = 1
|
|
end
|
|
end
|