From: Philip Guenther Subject: Re: ddb disassembler call To: Alexander Bluhm Cc: tech@openbsd.org Date: Wed, 5 Jun 2024 18:34:07 -0700 On Wed, Jun 5, 2024 at 5:54 PM Alexander Bluhm wrote: > > On Wed, Jun 05, 2024 at 12:00:27PM -0700, Philip Guenther wrote: > > On Wed, Jun 5, 2024 at 8:37???AM Alexander Bluhm wrote: > > > -/*e8*/ { "call", 0, QUAD, op1(Dl), 0 }, > > > +/*e8*/ { "call", 0, LONG, op1(Dl), 0 }, > > > /*e9*/ { "jmp", 0, NONE, op1(Dl), 0 }, > > > > Shouldn't it be NONE like jmp? Or maybe > > "callq", 0, NONE > > to look better... > > NONE also works > > ddb> x/i explicit_bzero+0x14,8 > explicit_bzero+0x14: xorl %esi,%esi > explicit_bzero+0x16: movq %r14,%rdx > explicit_bzero+0x19: call memset > explicit_bzero+0x1e: movq %r15,%rdi > explicit_bzero+0x21: movq %r14,%rsi > explicit_bzero+0x24: popq %r14 > explicit_bzero+0x26: popq %r15 > explicit_bzero+0x28: leave > > objdump calls it callq, but the operand is only 4 bytes. > Why should there be a 'q' ? The address is a 64bit address, even if calculated from a rel32, just like "addq %rax,$123456" has a 'q' because it's a 64bit operation despite the immediate operand being a 32bit value. but mostly consistency with objdump. Don't care that much. > --- arch/amd64/amd64/db_disasm.c 22 Apr 2023 18:26:17 -0000 1.24 > +++ arch/amd64/amd64/db_disasm.c 6 Jun 2024 00:38:32 -0000 > @@ -793,7 +793,7 @@ struct inst db_inst_table[256] = { > /*e6*/ { "out", 0, BYTE, op2(A, Ib), 0 }, > /*e7*/ { "out", 0, LONG, op2(A, Ib) , 0 }, > > -/*e8*/ { "call", 0, QUAD, op1(Dl), 0 }, > +/*e8*/ { "call", 0, NONE, op1(Dl), 0 }, > /*e9*/ { "jmp", 0, NONE, op1(Dl), 0 }, > /*ea*/ { "", 0, NONE, op1(OS), 0 }, > /*eb*/ { "jmp", 0, NONE, op1(Db), 0 }, ok guenther@