home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 August - Disc 3 / chip_20018103_hu.iso / amiga / chiputil / wipeout.lha / source / installpatches.c < prev    next >
C/C++ Source or Header  |  1998-04-12  |  4KB  |  110 lines

  1. /*
  2.  * $Id: installpatches.c 1.6 1998/04/12 17:39:51 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 (* FPTR)();
  19.  
  20. /******************************************************************************/
  21.  
  22. /* library vector offsets from amiga.lib */
  23. extern ULONG FAR LVOAllocMem;
  24. extern ULONG FAR LVOFreeMem;
  25. extern ULONG FAR LVOAllocVec;
  26. extern ULONG FAR LVOFreeVec;
  27. extern ULONG FAR LVOCreatePool;
  28. extern ULONG FAR LVODeletePool;
  29. extern ULONG FAR LVOAllocPooled;
  30. extern ULONG FAR LVOFreePooled;
  31.  
  32. /******************************************************************************/
  33.  
  34. /* these are in patches.asm */
  35. extern APTR ASM NewAllocMemFrontEnd(REG(d0) ULONG    byteSize,
  36.                                     REG(d1) ULONG    attributes);
  37.  
  38. extern VOID ASM NewFreeMemFrontEnd(REG(a1) APTR        memoryBlock,
  39.                                    REG(d0) ULONG    byteSize);
  40.  
  41. extern APTR ASM NewAllocVecFrontEnd(REG(d0) ULONG    byteSize,
  42.                                     REG(d1) ULONG    attributes);
  43.  
  44. extern VOID ASM NewFreeVecFrontEnd(REG(a1) APTR    memoryBlock);
  45.  
  46. extern APTR ASM NewCreatePoolFrontEnd(REG(d0) ULONG    memFlags,
  47.                                       REG(d1) ULONG    puddleSize,
  48.                                       REG(d2) ULONG    threshSize);
  49.  
  50. extern VOID ASM NewDeletePoolFrontEnd(REG(a0) APTR poolHeader);
  51.  
  52. extern APTR ASM NewAllocPooledFrontEnd(REG(a0) APTR        poolHeader,
  53.                                        REG(d0) ULONG    memSize);
  54.  
  55. extern VOID ASM NewFreePooledFrontEnd(REG(a0) APTR    poolHeader,
  56.                                       REG(a1) APTR    memoryBlock,
  57.                                       REG(d0) ULONG    memSize);
  58.  
  59. /******************************************************************************/
  60.  
  61. #undef global
  62. #define global
  63.  
  64. /* declare the vector stubs */
  65. #include "installpatches.h"
  66.  
  67. /******************************************************************************/
  68.  
  69. VOID
  70. InstallPatches(VOID)
  71. {
  72.     Forbid();
  73.  
  74.     /* the function pointers returned by SetFunction() do not exactly match
  75.      * the pointer types they are assigned to; I hate to typedef them all,
  76.      * so I just tell the compiler not show warning messages for this kind
  77.      * of problem
  78.      */
  79.     #ifdef __SASC
  80.     {
  81.         #pragma msg 225 ignore push
  82.     }
  83.     #endif /* __SASC */
  84.  
  85.     /* redirect all these memory allocation routines to our monitoring code */
  86.     OldAllocMem        = (FPTR)SetFunction((struct Library *)SysBase,(LONG)&LVOAllocMem,        (ULONG (*)())NewAllocMemFrontEnd);
  87.     OldFreeMem        = (FPTR)SetFunction((struct Library *)SysBase,(LONG)&LVOFreeMem,        (ULONG (*)())NewFreeMemFrontEnd);
  88.  
  89.     OldAllocVec        = (FPTR)SetFunction((struct Library *)SysBase,(LONG)&LVOAllocVec,        (ULONG (*)())NewAllocVecFrontEnd);
  90.     OldFreeVec        = (FPTR)SetFunction((struct Library *)SysBase,(LONG)&LVOFreeVec,        (ULONG (*)())NewFreeVecFrontEnd);
  91.  
  92.     /* the following do not exist in Kickstart 2.04 */
  93.     if(SysBase->LibNode.lib_Version >= 39)
  94.     {
  95.         OldCreatePool    = (FPTR)SetFunction((struct Library *)SysBase,(LONG)&LVOCreatePool,        (ULONG (*)())NewCreatePoolFrontEnd);
  96.         OldDeletePool    = (FPTR)SetFunction((struct Library *)SysBase,(LONG)&LVODeletePool,        (ULONG (*)())NewDeletePoolFrontEnd);
  97.  
  98.         OldAllocPooled    = (FPTR)SetFunction((struct Library *)SysBase,(LONG)&LVOAllocPooled,    (ULONG (*)())NewAllocPooledFrontEnd);
  99.         OldFreePooled    = (FPTR)SetFunction((struct Library *)SysBase,(LONG)&LVOFreePooled,        (ULONG (*)())NewFreePooledFrontEnd);
  100.     }
  101.  
  102.     #ifdef __SASC
  103.     {
  104.         #pragma msg 225 pop
  105.     }
  106.     #endif /* __SASC */
  107.  
  108.     Permit();
  109. }
  110.