blob: 2f6ff99001636d9c2342198f8f62596b47024629 [file] [log] [blame]
Date: Sun, 26 Sep 93 03:18:19 EDT
From: eric@tantalus.nrl.navy.mil (Eric Youngdale)
Message-Id: <9309260718.AA13966@tantalus.nrl.navy.mil>
To: bob@amscons.amscons.com
Cc: linux-activists@Niksula.hut.fi
In-Reply-To: Bob Amstadt's message of Sat, 25 Sep 1993 23:36:32 +0300
<m0oggMt-000CrhC@amscons.amscons.com>
X-Mn-Key: WABI
>I may just be dreaming, but I'm beginning to like the idea of a built
>in debugger.
So do I. I like it so much that I wrote one. It turns out that the
disassembly code in gdb is pretty much localized to one source file, and this
was easy to splice into a simple program. In addition, there are 2 variables
that you set if you are disassembling 16 bit code, so it makes it all the
better.
Anyway, there is a parser that understands a limited set of gdb
commands (very limited, but the 'x' command is pretty functional as long as you
stick to numeric rather than symbolic addresses). The parser understands $pc
and $sp for your convenience, and you can do things like "x/10i $pc" and "info
regs" to see what is going on. In principle you can do "x/x", "x/s", "x/d",
"x/w", "x/b", "x/i" and "x/c". I implemented an "info stack" command that
simply dumps a number of bytes from the stack onto the screen, but it currently
makes no attempt to actually interpret the stack frames.
This will probably not work on non-linux systems, and I have no idea
how much work it will be to fix it. To start with we need some simple macros
to determine (based upon a segment selector) whether we are in a 16 bit or a 32
bit segment, but this should be pretty easy to fix. I shamelessly ripped off a
bunch of files from gdb, and I obviously picked the ones for linux. For other
systems you may need to make adjustments to these files somehow. It is too
late in the evening to worry about this now.
It will probably be easy to modify the parser to allow you to change
memory locations and/or register values and then continue execution. Also,
some of the hooks for using readline with the parser are in place, but it does
not work reliably for some reason, so I left it out for now. Adding gnu
readline really would bloat the package a lot. Instead I could use Rich Salz's
editlib (the canonical test case for the DLL tools), which has a command line
history feature that could be an acceptable substitute - this is much smaller
than gnu readline, but I am not sure what features are present.
-Eric