Re: [RFC][patch] Allow to disassemble line.

Daniel Jacobowitz
2009-10-19T18:49:00Z

On Mon, Oct 19, 2009 at 11:09:44AM -0700, Paul Pluzhnikov wrote:
> I've also changed the "current PC marker" from "* " to "=> " (as Eli
> suggested), so the output looks like this:
>
> (top) disas
> Dump of assembler code for function gdb_main:
> 0x0000000000454c9e <gdb_main+0>: push %rbp
> 0x0000000000454c9f <gdb_main+1>: mov %rsp,%rbp
> 0x0000000000454ca2 <gdb_main+4>: sub $0x10,%rsp
> 0x0000000000454ca6 <gdb_main+8>: mov %rdi,-0x8(%rbp)
> => 0x0000000000454caa <gdb_main+12>: mov -0x8(%rbp),%rax
> 0x0000000000454cae <gdb_main+16>: mov 0x10(%rax),%eax
> 0x0000000000454cb1 <gdb_main+19>: mov %eax,0x678475(%rip) #
> 0xacd12c <use_windows>

For whatever it's worth, I miss the extra screen real estate stolen by
the enlarged prompt (or even the narrower prompt). I use a wider than
average terminal and most of the times I use disassemble it still runs
off the right and wraps unreadably. It's fine in examples because
they have names like "gdb_main" or "bar"...

We've got this layout here with nicely aligned columns but tons of
whitespace. In a halfway modern world we could do this with color.
Or bold the address of the current instruction. This would be a real
interface departure for GDB so I'm curious what others think of it.
(Yes, I'm thinking of Tufte, why do you ask?)

Another possibility would be to factor out the name of the function.
Something like this:

(top) disas
Dump of assembler code for function gdb_main:
0x0000000000454c9e (+0): push %rbp
0x0000000000454c9f (+1): mov %rsp,%rbp
0x0000000000454ca2 (+4): sub $0x10,%rsp
0x0000000000454ca6 (+8): mov %rdi,-0x8(%rbp)
=> 0x0000000000454caa (+12): mov -0x8(%rbp),%rax
0x0000000000454cae (+16): mov 0x10(%rax),%eax

Or for x, current version:

(gdb) x/2i main
0x44cce0 : sub $0x28,%rsp
0x44cce4 <main+4>: movq $0x0,(%rsp)
(gdb) <enter>
0x44ccec <main+12>: mov %edi,(%rsp)
0x44ccef <main+15>: mov %rsp,%rdi

After:

(gdb) x/2i main
Dump of assembler code for function main:
0x44cce0 (+0): sub $0x28,%rsp
0x44cce4 (+4): movq $0x0,(%rsp)
(gdb) <enter>
0x44ccec (+12): mov %edi,(%rsp)
0x44ccef (+15): mov %rsp,%rdi
...
(gdb) <enter>
0x44cd1a (+58): retq
0x44cd1b: nop
...
(gdb) <enter>
0x44cd1f: nop
Dump of assembler code for function gdb_main:
0x44cd20 (+0): sub $0x8,%rsp

Anyway, I just made that all up. I'm not asking for anyone to work on
it but I'd like to know what ways we have to reclaim some of this
space before we eat up more of it.

I do observe that disassemble prints leading zeros and examine strips them.

--
Daniel Jacobowitz
CodeSourcery