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]