home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 August - Disc 3 / chip_20018103_hu.iso / amiga / chiputil / wipeout.lha / source / segtracker.c < prev    next >
C/C++ Source or Header  |  1998-05-31  |  1KB  |  63 lines

  1. /*
  2.  * $Id: segtracker.c 1.5 1998/05/31 10:11:16 olsen Exp olsen $
  3.  *
  4.  * :ts=4
  5.  *
  6.  * Wipeout -- Traces and munges memory and detects memory trashing
  7.  *
  8.  * Written by Olaf `Olsen' Barthel <olsen@sourcery.han.de>
  9.  * Public Domain
  10.  */
  11.  
  12. #ifndef _GLOBAL_H
  13. #include "global.h"
  14. #endif    /* _GLOBAL_H */
  15.  
  16. /******************************************************************************/
  17.  
  18. typedef char (* ASM SegTrack(REG(a0) ULONG        Address,
  19.                              REG(a1) ULONG *    SegNum,
  20.                              REG(a2) ULONG *    Offset));
  21.  
  22. struct SegSem
  23. {
  24.     struct SignalSemaphore    seg_Semaphore;
  25.     SegTrack *                seg_Find;
  26. };
  27.  
  28. /******************************************************************************/
  29.  
  30. BOOL
  31. FindAddress(
  32.     ULONG    address,
  33.     LONG    nameLen,
  34.     STRPTR    nameBuffer,
  35.     ULONG *    segmentPtr,
  36.     ULONG *    offsetPtr)
  37. {
  38.     struct SegSem * SegTracker;
  39.     BOOL found = FALSE;
  40.  
  41.     Forbid();
  42.  
  43.     /* check whether SegTracker was loaded */
  44.     SegTracker = (struct SegSem *)FindSemaphore("SegTracker");
  45.     if(SegTracker != NULL)
  46.     {
  47.         STRPTR name;
  48.  
  49.         /* map the address to a name and a hunk/offset index */
  50.         name = (*SegTracker->seg_Find)(address,segmentPtr,offsetPtr);
  51.         if(name != NULL)
  52.         {
  53.             StrcpyN(nameLen,nameBuffer,name);
  54.  
  55.             found = TRUE;
  56.         }
  57.     }
  58.  
  59.     Permit();
  60.  
  61.     return(found);
  62. }
  63.