Subject: truss for Netbsd.
To: None <tech-kern@NetBSD.ORG>
From: Darren Reed <darrenr@cyber.com.au>
List: tech-kern
Date: 03/06/1998 14:16:20
In the last couple of days I've done a bit of hacking on the kernel,
implemented an fktrace(2), and hacked up a truss-like program which
I've called "ktruss" (for now)..
Below is result of that work, 2 diffs (one for the kernel and one
for the krace(2) man page), along with ktruss. the current version
of ktruss is very much just a hack - I call fktrace(2) using syscall()
as I've not been real keen on building a new libc just to test this
with. The patches make it syscall 241, and it's called that way from
ktruss.
ktruss is a complete hack still, and is currently just a merge of
kdump/ktrace. I plan on hacking it some more to allow some of the
features found on Solaris such as selection of system calls, signals,
etc. Because ktruss still works with ktrace records, it can read
files written by ktrace (i.e. alternative output to kdump's) as well
as generate files readable by kdump. ktruss does decode the ktrace
records differently to kdump...more like what you'd see elsehere :)
Amongst the many different things the patches change, is ktrsetemul()
calling. For some bizarre reason, 'emul' is used as a "marker" record
by ktrace. if you've ever looked at kern_ktrace.c, you'll notice a lot of
"struct proc *p = curproc;' assignments. However, when ktrace'ing another
process via -p, the first marker call is made for the 'wrong process'.
I'm not sure if I've made the right changes, but it does at least
avoid a panic now.
Darren
p.s. If the name ktruss is hard to swallow, calling it truss is fine.
it doesn't really make any difference to me.
p.p.s. this tgz is built from /usr/src/usr.bin and I tested and made
patches using 1.2G.
begin 600 ktruss.tgz
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
2E5S)E5S)-?WZ?\X9PAP`&`$`
`
end