[Contents] [Index] [Help] [Retrace] [Browse <] [Browse >]

When Mungwall reports a hit, it lists:

The function that triggered the hit (either AllocMem() or FreeMem()).
It includes the functions arguments.

The name of the offending program (``attempted by `<program name>' '').

The address of the offending program's Task structure (``at 0x<task
address>'').

The address from which AllocMem()/FreeMem() was called.  Mungwall
reports two addresses: one labelled ``A:'' and one labelled ``C:''.
The ``A:'' address is the address if AllocMem()/FreeMem() was called
directly (i.e., using assembler or #pragmas) by the offending program.
The ``C:'' address is the address if AllocMem()/FreeMem() was called
from an amiga.lib C stub by the offending program.  Since Mungwall
patches the memory allocation functions, it can only guess the caller's
address based on the return address it finds on the stack.

The stack pointer at the time of the Mungwall hit.  It is labelled
``SP:''.

Note that Mungwall ignores the layers.library's partial deallocations.
If any other debugging tools patch AllocMem() or FreeMem(), Mungwall's
``A:'' and ``C:'' addresses may be thrown off by additional information
pushed on the stack, and Mungwall will also be unable to screen out the
layers.library's partial deallocations (which will often show up as
Mungwall hits on your task, CON:, or input.device).

Here are some sample Mungwall hits that were produced by a program
called mungwalltest.  As a reminder, the arguments for memory functions
are AllocMem(size,type) and FreeMem(address,size).

AllocMem(0x0,10000) attempted by `mungwalltest' (at 0x339590)
  from A:0x35C03A C:0x35677E SP:0x35CFC0         Tried to allocate 0 bytes
                                                 of memory.

FreeMem(0x0,16) attempted by `mungwalltest' (at 0x339590)
  from A:0x35C068 C:0x3567C4 SP:0x35CFB8         Tried to free memory with
                                                 a NULL pointer.

FreeMem(0x33BD10,0) attempted by `mungwalltest' (at 0x339590)
  from A:0x35C068 C:0x3567D4 SP:0x35CFB0         Tried to free 0 bytes of
                                                 memory.

Mis-aligned FreeMem(0x33BD14,16) attempted by `mungwalltest' (at 0x339590)
      from A:0x35C068 C:0x3567E2 SP:0x35CFA8     Deallocation address is
                                                 incorrect because it is
                                                 not aligned according to
                                                 AllocMem()'s lowest
                                                 memory chunk size.

Mismatched FreeMem size 14!
Original allocation: 16 bytes from A:0x35C03A C:0x3567A0 Task 0x339590
Testing with original size.                      Deallocation size does
                                                 not match the allocation
                                                 size.

19 byte(s) before allocation at 0x33BD10, size 16 were hit!
>$: BBBBBBBB BBBBBBBB BB536572 6765616E 74277320 50657070 65722000
                                                 Something wrote to the
                                                 bytes which precede the
                                                 allocation.

8 byte(s) after allocation at 0x33BD10, size 16 were hit!
>$: 75622042 616E6400 BBBBBBBB BBBBBBBB BBBBBBBB BBBBBBBB BBBBBBBBB
                                                 Something wrote to the
                                                 bytes which follow the
                                                 allocation.


[Back to Amiga Developer Docs]