moduleLib.h
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:7k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* moduleLib.h - symbol structure header */
  2. /* Copyright 1992 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01f,11sep96,pad  added MODULE_GROUP_MAX definition (SPR #7133).
  7. 01e,30oct92,jmm  added prototype for moduleCheck() - spr 1693
  8. 01d,22sep92,rrr  added support for c++
  9. 01c,27aug92,jmm  changed MODULE_SEG_INFO struct to always include TEXT/DATA/BSS
  10.                  changed symFlags to flags
  11.  added prototypes for moduleNameGet(), moduleFlagsGet()
  12.  changed type for ctors and dtors to VOIDFUNCPTR
  13. 01b,01aug92,srh  added lists for static constructors/destructors to
  14.  MODULE struct.
  15. 01a,09apr92,jmm  written
  16. */
  17. #ifndef __INCmoduleLibh
  18. #define __INCmoduleLibh
  19. #ifdef __cplusplus
  20. extern "C" {
  21. #endif
  22. #include "dllLib.h"
  23. #include "sllLib.h"
  24. #include "limits.h"
  25. #include "objLib.h"
  26. #include "private/objLibP.h"
  27. /* moduleLib Status Codes */
  28. #define S_moduleLib_MODULE_NOT_FOUND             (M_moduleLib | 1)
  29. #define S_moduleLib_HOOK_NOT_FOUND               (M_moduleLib | 2)
  30. #define S_moduleLib_BAD_CHECKSUM                 (M_moduleLib | 3)
  31. #define S_moduleLib_MAX_MODULES_LOADED           (M_moduleLib | 4)
  32. /* max number of module groups */
  33. #define MODULE_GROUP_MAX 65535
  34. /* Types of object module formats */
  35. #define MODULE_A_OUT 0 /* format is a.out */
  36. #define MODULE_B_OUT 1 /* format is b.out */
  37. #define MODULE_ECOFF 2 /* format is ECOFF */
  38. #define MODULE_ELF   3 /* format is ELF */
  39. /* Types of segments */
  40. /* Note - These are specific to a.out */
  41. #define SEGMENT_TEXT 2 /* text segment */
  42. #define SEGMENT_DATA 4 /* data segment */
  43. #define SEGMENT_BSS 8 /* bss segment */
  44. /* These are needed for the HP-PA SOM COFF */
  45. #define SEGMENT_UNWIND  0x10000
  46. #define SEGMENT_STUB    0x20000
  47. /* segment flag bits */
  48. #define SEG_FREE_MEMORY 1 /* Free memory when deleting this segment */
  49. #define SEG_WRITE_PROTECTION 2 /* Segment's memory is write-protected,
  50.    * need to call memory managment routines
  51.    * to unprotect when deleting */
  52. /* display options */
  53. #define MODDISPLAY_CODESIZE   1 /* Display size of the code segments */
  54. #define MODDISPLAY_IS_DLL_NODE  2 /* Display routine is being called with
  55.    * DLL_NODE instead of MODULE_ID -
  56.    * used by moduleShow() */
  57. #define MODDISPLAY_ALL   (MODDISPLAY_CODESIZE) /* Display all possible
  58.        * information */
  59. /* moduleCheck() options */
  60. #define MODCHECK_NOPRINT 1 /* Don't print module names during check */
  61. #define MODCHECK_TEXT (SEGMENT_TEXT) /* check text segment */
  62. #define MODCHECK_DATA (SEGMENT_DATA) /* check data segment */
  63. #define MODCHECK_BSS         (SEGMENT_BSS)  /* check bss segment */
  64. /* module status information */
  65. #define MODULE_REPLACED 0x00010000 /* set if the module is loaded twice */
  66. typedef struct
  67.     {
  68.     DL_NODE segmentNode; /* double-linked list node information*/
  69.     void * address; /* segment address */
  70.     int size; /* segment size */
  71.     int type; /* segment type*/
  72.     int flags; /* segment flags */
  73.     u_short checksum; /* segment checksum; u_short is returned by
  74.  * checksum() */
  75.     } SEGMENT;
  76. typedef SEGMENT *SEGMENT_ID;
  77. typedef struct
  78.     {
  79.     OBJ_CORE objCore; /* object management */
  80.     DL_NODE moduleNode; /* double-linked list node information */
  81.     char name [NAME_MAX]; /* module name */
  82.     char path [PATH_MAX]; /* module path */
  83.     int flags; /* symFlags as passed to the loader */
  84.     DL_LIST segmentList; /* list of segments */
  85.     int format; /* object module format */
  86.     UINT16 group; /* group number */
  87.     DL_LIST dependencies; /* list of modules that this depends on */
  88.     DL_LIST referents; /* list of modules that refer to this */
  89.     VOIDFUNCPTR * ctors; /* list of static constructor callsets */
  90.     VOIDFUNCPTR * dtors; /* list of static destructor callsets */
  91.     void * user1; /* reserved for use by end-user */
  92.     void * reserved1; /* reserved for use by WRS */
  93.     void * reserved2; /* reserved for use by WRS */
  94.     void * reserved3; /* reserved for use by WRS */
  95.     void * reserved4; /* reserved for use by WRS */
  96.     } MODULE;
  97. typedef MODULE *MODULE_ID;
  98. typedef struct
  99.     {
  100.     void * textAddr; /* address of text segment */
  101.     void * dataAddr; /* address of data segment */
  102.     void * bssAddr; /* address of bss segment */
  103.     int  textSize; /* size of text segment */
  104.     int  dataSize; /* size of data segment */
  105.     int  bssSize; /* size of bss segment */
  106.     } MODULE_SEG_INFO;
  107. typedef struct
  108.     {
  109.     char         name [NAME_MAX]; /* module name */
  110.     int          format;          /* object module format */
  111.     int group;  /* group number */
  112.     MODULE_SEG_INFO segInfo;   /* segment info */
  113.     } MODULE_INFO;
  114. /* function declarations */
  115. #if defined(__STDC__) || defined(__cplusplus)
  116. extern STATUS moduleLibInit (void);
  117. extern MODULE_ID moduleCreate (char *name, int format, int flags);
  118. extern STATUS moduleInit (MODULE_ID moduleId, char *name, int format,
  119.   int flags);
  120. extern STATUS moduleTerminate (MODULE_ID moduleId);
  121. extern STATUS moduleDelete (MODULE_ID moduleId);
  122. extern MODULE_ID moduleIdFigure (void *moduleNameOrId);
  123. extern STATUS moduleShow (char *moduleNameOrId, int options);
  124. extern STATUS moduleSegAdd (MODULE_ID moduleId, int type, void *location,
  125.     int length, int flags);
  126. extern SEGMENT_ID moduleSegGet (MODULE_ID moduleId);
  127. extern SEGMENT_ID moduleSegFirst (MODULE_ID moduleId);
  128. extern SEGMENT_ID moduleSegNext (SEGMENT_ID segmentId);
  129. extern SEGMENT_ID moduleSegEach (MODULE_ID moduleId, FUNCPTR routine,
  130.  int userArg);
  131. extern STATUS moduleCreateHookAdd (FUNCPTR moduleCreateHookRtn);
  132. extern STATUS moduleCreateHookDelete (FUNCPTR moduleCreateHookRtn);
  133. extern MODULE_ID moduleFindByName (char *moduleName);
  134. extern MODULE_ID moduleFindByNameAndPath (char *moduleName, char *pathName);
  135. extern MODULE_ID moduleFindByGroup (int groupNumber);
  136. extern MODULE_ID moduleEach (FUNCPTR routine, int userArg);
  137. extern int moduleIdListGet (MODULE_ID *idList, int maxModules);
  138. extern STATUS moduleInfoGet (MODULE_ID moduleId, MODULE_INFO *pModuleInfo);
  139. extern char * moduleNameGet (MODULE_ID moduleId);
  140. extern int moduleFlagsGet (MODULE_ID moduleId);
  141. STATUS moduleCheck (int options);
  142.  
  143. #else   /* __STDC__ */
  144. extern STATUS moduleLibInit ();
  145. extern MODULE_ID moduleCreate ();
  146. extern STATUS moduleInit ();
  147. extern STATUS moduleTerminate ();
  148. extern STATUS moduleDelete ();
  149. extern MODULE_ID moduleIdFigure ();
  150. extern STATUS moduleShow ();
  151. extern STATUS moduleSegAdd ();
  152. extern SEGMENT_ID moduleSegGet ();
  153. extern SEGMENT_ID moduleSegFirst ();
  154. extern SEGMENT_ID moduleSegNext ();
  155. extern SEGMENT_ID moduleSegEach ();
  156. extern STATUS moduleCreateHookAdd ();
  157. extern STATUS moduleCreateHookDelete ();
  158. extern MODULE_ID moduleFindByName ();
  159. extern MODULE_ID moduleFindByNameAndPath ();
  160. extern MODULE_ID moduleFindByGroup ();
  161. extern MODULE_ID moduleEach ();
  162. extern int moduleIdListGet ();
  163. extern STATUS moduleInfoGet ();
  164. STATUS moduleCheck ();
  165. #endif  /* __STDC__ */
  166. #ifdef __cplusplus
  167. }
  168. #endif
  169. #endif /* __INCmoduleLibh */