Example of using PMON for Assembly-level debugging

This page shows an annotated example of using PMON to download, and then debug a sample application.


Load the application program l4003.rec (bubble sort).

PMON> load
Downloading from ethernet, ^C to abort
Entry address is 80000200
total = 0x1280 bytes

Disassemble the program.

PMON> l
      _start        0c0001ba jal     CpuInit                # 0x800006e8
      _start+0x4    00000000 nop
      _start+0x8    3c01a000 lui     at,0xa000              # 40960
      _start+0xc    02018025 or      s0,s0,at
      _start+0x10   0200f809 jalr    s0
      _start+0x14   24040003 addiu   a0,zero,0x3
      _start+0x18   0200f809 jalr    s0
      _start+0x1c   24040004 addiu   a0,zero,0x4
      _start+0x20   0c0002a4 jal     clrbss                 # 0x80000a90
      _start+0x24   00000000 nop
more... q

Go from here to 'main'. Go must only be used once, from then on
you must use the 'c' (continue) command.

PMON> g . main
        main        27bdffe0 addiu   sp,sp,0xffe0           # -32

Disassemble but only show calls.

PMON> l -c
        main+0xc    0c00014f jal     _puts                  # 0x8000053c
        main+0x14   0c0000bf jal     init                   # 0x800002fc
        main+0x1c   0c0000f8 jal     sort                   # 0x800003e0
        main+0x24   0c00014f jal     _puts                  # 0x8000053c
        init+0x14   0c000140 jal     malloc                 # 0x80000500
        init+0x74   0c0000e8 jal     insert                 # 0x800003a0
        sort+0x58   0c00011e jal     swap                   # 0x80000478
       _puts+0x38   0c00018b jal     sio_putc               # 0x8000062c
       _puts+0x4c   0c00018b jal     sio_putc               # 0x8000062c
    sio_putc+0x14   0c000170 jal     sio_init               # 0x800005c0
more... q

Continue until the function init.

PMON> c init 
        init        27bdffe0 addiu   sp,sp,0xffe0           # -32

Continue until the address in register ra, 
i.e., until this function returns.

PMON> c @ra
        main+0x1c   0c0000f8 jal     sort                   # 0x800003e0

Single step into the function sort.

PMON> t
        sort        8f8e8028 lw      t6,-32728(gp)          # 0xffff8028

Disassemble.

PMON> l
        sort        8f8e8028 lw      t6,-32728(gp)          # 0xffff8028
        sort+0x4    27bdffd8 addiu   sp,sp,0xffd8           # -40
        sort+0x8    11c0001f beq     t6,zero,sort+0x88      # 0x80000468
        sort+0xc    afbf0014 sw      ra,20(sp)              # 0x14
        sort+0x10   8f8f8028 lw      t7,-32728(gp)          # 0xffff8028
        sort+0x14   afa00024 sw      zero,36(sp)            # 0x24
        sort+0x18   afaf0020 sw      t7,32(sp)              # 0x20
        sort+0x1c   8fb80020 lw      t8,32(sp)              # 0x20
        sort+0x20   00000000 nop
        sort+0x24   8f190000 lw      t9,0(t8)
more... q

Single step.

PMON> t 
        sort+0x4    27bdffd8 addiu   sp,sp,0xffd8           # -40

Single step by pressing the return key (repeat last command).

PMON> 
        sort+0x8    11c0001f beq     t6,zero,sort+0x88      # 0x80000468
PMON> 
        sort+0x10   8f8f8028 lw      t7,-32728(gp)          # 0xffff8028
PMON> 
        sort+0x14   afa00024 sw      zero,36(sp)            # 0x24
PMON> 
        sort+0x18   afaf0020 sw      t7,32(sp)              # 0x20
PMON> 
        sort+0x1c   8fb80020 lw      t8,32(sp)              # 0x20
PMON> 
        sort+0x20   00000000 nop
PMON> 
        sort+0x24   8f190000 lw      t9,0(t8)
PMON> 
        sort+0x28   00000000 nop

Disassemble.

PMON> l
        sort+0x28   00000000 nop
        sort+0x2c   13200012 beq     t9,zero,sort+0x78      # 0x80000458
        sort+0x30   afb9001c sw      t9,28(sp)              # 0x1c
        sort+0x34   8fa80020 lw      t0,32(sp)              # 0x20
        sort+0x38   8faa001c lw      t2,28(sp)              # 0x1c
        sort+0x3c   9509000a lhu     t1,10(t0)              # 0xa
        sort+0x40   954b000a lhu     t3,10(t2)              # 0xa
        sort+0x44   00000000 nop
        sort+0x48   0169082b sltu    at,t3,t1
        sort+0x4c   10200008 beq     at,zero,sort+0x70      # 0x80000450
more... q

Disassemble calls only.

PMON> l -c
        sort+0x58   0c00011e jal     swap                   # 0x80000478
       _puts+0x38   0c00018b jal     sio_putc               # 0x8000062c
       _puts+0x4c   0c00018b jal     sio_putc               # 0x8000062c
    sio_putc+0x14   0c000170 jal     sio_init               # 0x800005c0
     CpuInit+0x4    0c0000a8 jal     getmachtype            # 0x800002a0
     CpuInit+0x38   0100f809 jalr    t0
searching.. ^C-break!
        sort+0x28   00000000 nop

Continue until sort+58.

PMON> c sort+58
        sort+0x58   0c00011e jal     swap                   # 0x80000478

Single step over the function swap.

PMON> to
        sort+0x60   240c0001 addiu   t4,zero,0x1

Continue until the function swap.

PMON> c swap
        swap        8c8e0004 lw      t6,4(a0)


Navigation: Document Home | Document Contents | Document Index