classShow.c
上传用户:nvosite88
上传日期:2007-01-17
资源大小:4983k
文件大小:4k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* classShow.c - class object show routines */
  2. /* Copyright 1992-2001 Wind River Systems, Inc. */
  3. #include "copyright_wrs.h"
  4. /*
  5. modification history
  6. --------------------
  7. 01c,12oct01,jn   use symFindSymbol for symbol lookups (SPR #7453)
  8. 01b,10dec93,smb  changed helpRtn to instRtn
  9. 01a,04jul92,jcf  created.
  10. */
  11. /*
  12. DESCRIPTION
  13. This library provides routines to show class related information.
  14. INCLUDE FILE: classLib.h
  15. SEE ALSO: classLib
  16. */
  17. #include "vxWorks.h"
  18. #include "string.h"
  19. #include "stdio.h"
  20. #include "a_out.h"
  21. #include "sysSymTbl.h"
  22. #include "symLib.h"
  23. #include "errno.h"
  24. #include "private/funcBindP.h"
  25. #include "private/classLibP.h"
  26. /* forward declarations */
  27. LOCAL void classShowSymbol (int value);
  28. /******************************************************************************
  29. *
  30. * classShowInit - initialize class show routine
  31. *
  32. * This routine links the class show routine into the VxWorks system.
  33. * These routines are included automatically by defining %INCLUDE_SHOW_RTNS
  34. * in configAll.h.
  35. *
  36. * RETURNS: N/A
  37. */
  38. void classShowInit (void)
  39.     {
  40.     classShowConnect (classClassId, (FUNCPTR)classShow);
  41.     }
  42. /*******************************************************************************
  43. *
  44. * classShow - show the information for the specified class
  45. *
  46. * This routine shows all information associated with the specified class.
  47. *
  48. * RETURNS: OK, or ERROR if invalid class id.
  49. *
  50. * SEE ALSO: symLib, symEach()
  51. */
  52. STATUS classShow
  53.     (
  54.     CLASS_ID classId,  /* object class to summarize */
  55.     int         level           /* 0 = summary, 1 = details */
  56.     )
  57.     {
  58.     if (OBJ_VERIFY (classId, classClassId) != OK)
  59. return (ERROR); /* invalid class object */
  60.     /* summarize information */
  61.     printf ("n");
  62.     printf ("%-20s: 0x%-10x", "Memory Partition Id", classId->objPartId);
  63.     classShowSymbol ((int)classId->objPartId);
  64.     printf ("%-20s: %-10dn", "Object Size", classId->objSize);
  65.     printf ("%-20s: %-10dn", "Objects Allocated", classId->objAllocCnt);
  66.     printf ("%-20s: %-10dn", "Objects Deallocated", classId->objFreeCnt);
  67.     printf ("%-20s: %-10dn", "Objects Initialized", classId->objInitCnt);
  68.     printf ("%-20s: %-10dn", "Objects Terminated", classId->objTerminateCnt);
  69.     printf ("%-20s: 0x%-10x", "Create Routine", classId->createRtn);
  70.     classShowSymbol ((int)classId->createRtn);
  71.     printf ("%-20s: 0x%-10x", "Init Routine", classId->initRtn);
  72.     classShowSymbol ((int)classId->initRtn);
  73.     printf ("%-20s: 0x%-10x", "Destroy Routine", classId->destroyRtn);
  74.     classShowSymbol ((int)classId->destroyRtn);
  75.     printf ("%-20s: 0x%-10x", "Show Routine", classId->showRtn);
  76.     classShowSymbol ((int)classId->showRtn);
  77.     printf ("%-20s: 0x%-10x", "Inst Routine", classId->instRtn);
  78.     classShowSymbol ((int)classId->instRtn);
  79.     return (OK);
  80.     }
  81. /*******************************************************************************
  82. *
  83. * classShowSymbol - print value symbolically if possible
  84. */
  85. LOCAL void classShowSymbol
  86.     (
  87.     int value /* value to find in symbol table */
  88.     )
  89.     {
  90.     char *    name = NULL;              /* actual symbol name (symTbl copy) */
  91.     void *    symValue = 0; /* actual symbol value */
  92.     SYMBOL_ID symId;                    /* symbol identifier */ 
  93.     if (value == 0)
  94. {
  95. printf ("No routine attached.n");
  96. return;
  97. }
  98.     /* 
  99.      * Only check one symLib function pointer (for performance's sake). 
  100.      * All symLib functions are provided by the same library, by convention.    
  101.      */
  102.     if ((_func_symFindSymbol != (FUNCPTR) NULL) && 
  103. (sysSymTbl != NULL))
  104.         {
  105. if ((((* _func_symFindSymbol) (sysSymTbl, NULL, (char *)value,
  106.        N_EXT | N_TEXT, 
  107.        N_EXT | N_TEXT, &symId)) == OK) &&
  108.     ((* _func_symNameGet) (symId, &name) == OK) &&
  109.     ((* _func_symValueGet) (symId, &symValue) == OK) &&
  110.     (symValue == (void *)value)) 
  111.     {
  112.     /* address and type match exactly */
  113.     printf (" (%s)", name);
  114.     }
  115. }
  116.     printf ("n");
  117.     }