original files of m241

This commit is contained in:
neelimap
2026-07-30 11:19:44 +05:30
parent 170c2b3f3a
commit afc7070c1f
12254 changed files with 7655111 additions and 0 deletions
+301
View File
@@ -0,0 +1,301 @@
/* moduleLib.h - object module list management header */
/*
* Copyright (c) 1992, 1996, 2003-2005, 2009-2010,2013,2016
* Wind River Systems, Inc.
*
* The right to copy, distribute, modify or otherwise make use of this software
* may be licensed only pursuant to the terms of an applicable Wind River
* license agreement.
*/
/*
modification history
--------------------
01v,31may16,jmp Imported modifications from VxWorks 7 for WB4 debug support:
Added a field for module's modification time.
01u,11jun13,elp Prevent checking a module while loading (CQ:WIND00408631).
01t,17dec10,jmp Updated moduleEach() and moduleSegEach() to use fully
qualified function pointer instead of FUNCPTR
(CQ:WIND00246939).
01s,01apr10,pad Moved declaration of extern C block for C++ after the
inclusion of header files.
01r,22feb10,v_r LP64 TODOS cleanup.
01q,18jan10,rlp Added undefined and common symbol lists.
01p,16jun09,v_r LP64 adaptation: updated segment sizes to size_t.
01o,30apr09,v_r LP64 adaptation (phase #1) : updated code following code
adaptation guidelines (excepted FUNCPTR mods and struct reorg).
01n,14feb05,v_r Fixed SPR #98274 (loader errno review).
Moved private routines to moduleLibP.h
Added segment type for loadFileLibP.h
Cleanups.
01m,02feb05,v_r Fixed SPR #104657 (moduleShow() does not present display
options) by moving the now unsupported display options in
moduleShow.c and removing the unused ones.
Updated copyright notice to 2005.
01l,10jan05,v_r Fixed SPR #104659 (moduleShow now a separate component, need
to include moduleShow.h in moduleLib.h)
01k,21oct04,x_p Added moduleSectionDescFree() prototype.
01j,18sep04,jn Move towards shared code for host and target
01i,05apr04,jn Clean up - remove unused declarations and development-related
comments
01h,03apr03,jn merge from AE loader moduleLibh
01g,03apr03,to replaced OBJ_CORE with HANDLE in MODULE (de-classify).
01f,11sep96,pad added MODULE_GROUP_MAX definition (SPR #7133).
01e,30oct92,jmm added prototype for moduleCheck() - spr 1693
01d,22sep92,rrr added support for c++
01c,27aug92,jmm changed MODULE_SEG_INFO struct to always include TEXT/DATA/BSS
changed symFlags to flags
added prototypes for moduleNameGet(), moduleFlagsGet()
changed type for ctors and dtors to VOIDFUNCPTR
01b,01aug92,srh added lists for static constructors/destructors to
MODULE struct.
01a,09apr92,jmm written
*/
#ifndef __INCmoduleLibh
#define __INCmoduleLibh
/* includes */
#ifdef HOST
#include "host.h"
#include "tgtmem.h"
#include "pdLib.h"
#include "wtxtypes.h"
#include "dllLib.h"
#include "sllLib.h"
#else
#include "dllLib.h"
#include "sllLib.h"
#include "limits.h"
#include "private/handleLibP.h"
#include "memPartLib.h"
#include "moduleShow.h"
#endif /* HOST */
#ifdef __cplusplus
extern "C" {
#endif
/* moduleLib Status Codes */
#define S_moduleLib_MODULE_NOT_FOUND (M_moduleLib | 1)
#define S_moduleLib_HOOK_NOT_FOUND (M_moduleLib | 2)
#define S_moduleLib_BAD_CHECKSUM (M_moduleLib | 3)
#define S_moduleLib_MAX_MODULES_LOADED (M_moduleLib | 4)
#define S_moduleLib_INVALID_SECTION_ID (M_moduleLib | 5)
#define S_moduleLib_INVALID_MODULE_ID (M_moduleLib | 6)
/* max number of module groups */
#define MODULE_GROUP_MAX 65535
/* Types of object module formats - for backward compatibility */
#define MODULE_A_OUT 0 /* format is a.out */
#define MODULE_B_OUT 1 /* format is b.out */
#define MODULE_ECOFF 2 /* format is ECOFF */
#define MODULE_ELF 3 /* format is ELF */
/* Types of segments */
#define SEGMENT_UNKNOWN 0 /* unknown segment */
#define SEGMENT_TEXT 2 /* text segment */
#define SEGMENT_DATA 4 /* data segment */
#define SEGMENT_BSS 8 /* bss segment */
/* segment flag bits */
#define SEG_FREE_MEMORY 1 /* Free memory when deleting this segment */
#define SEG_WRITE_PROTECTION 2 /* Segment's memory is write-protected,
* need to call memory managment routines
* to unprotect when deleting */
/* section flag bits */
#define SCN_FREE_MEMORY 1 /* Free memory when deleting this section */
#define SCN_NO_CHECKSUM 2 /* do not perform checksum of this section */
/* moduleCheck() options */
#define MODCHECK_NOPRINT 0x1 /* Don't print module names during check */
#define MODCHECK_TEXT 0x2 /* check text sections */
#define MODCHECK_DATA 0x4 /* check data sections */
#define MODCHECK_BSS 0x8 /* check bss sections */
#define MODCHECK_RODATA 0x10 /* check read-only sections */
#define MODCHECK_ALL (MODCHECK_TEXT | \
MODCHECK_DATA | \
MODCHECK_BSS | \
MODCHECK_RODATA) /* check all sections */
/* module status information */
#define MODULE_REPLACED 0x00010000 /* set if the module is loaded twice */
#ifdef _WRS_CONFIG_LP64
typedef size_t SEG_SIZE;
#else /* _WRS_CONFIG_LP64 */
typedef int SEG_SIZE;
#endif /* !_WRS_CONFIG_LP64 */
/* Typedefs */
typedef struct
{
DL_NODE segmentNode; /* double-linked list node information*/
void * address; /* segment address */
SEG_SIZE size; /* segment size */
int type; /* segment type*/
int flags; /* segment flags */
} SEGMENT;
typedef SEGMENT * SEGMENT_ID; /* segment ID */
typedef struct
{
void * textAddr; /* address of text segment */
void * dataAddr; /* address of data segment */
void * bssAddr; /* address of bss segment */
SEG_SIZE textSize; /* size of text segment */
SEG_SIZE dataSize; /* size of data segment */
SEG_SIZE bssSize; /* size of bss segment */
int textFlags; /* flags for text segment */
int dataFlags; /* flags for data segment */
int bssFlags; /* flags for bss segment */
} MODULE_SEG_INFO;
typedef struct
{
char name [NAME_MAX];/* module name */
int format; /* object module format */
int group; /* group number */
MODULE_SEG_INFO segInfo; /* segment info */
} MODULE_INFO;
typedef UINT16 MOD_GROUP;
typedef struct module
{
#ifdef HOST
OBJ_CORE handle; /* handle management */
#else
HANDLE handle; /* handle management */
#endif /* HOST */
DL_NODE moduleNode; /* double-linked list node information */
/*
* nameWithPath is now the preferred field to use for name and
* path. The separate name and path fields are kept for backward
* compatibility, but they may not hold valid information, since
* they are of limited size.
*/
char * nameWithPath; /* module name and path */
char name [NAME_MAX]; /* module name */
char path [PATH_MAX]; /* module path */
int flags; /* symFlags as passed to the loader */
DL_LIST sectionList; /* list of section */
DL_LIST segmentList; /* list of segments */
int format; /* object module format. Only ELF now */
MOD_GROUP group; /* group number */
VOIDFUNCPTR * ctors; /* list of static constructor callsets */
VOIDFUNCPTR * dtors; /* list of static destructor callsets */
UINT commTotalSize; /* memory used by common symbols */
BOOL swapNeeded; /* TRUE if the headers need byte swap */
int undefSymCount; /* number of undefined symbols */
#ifdef HOST
DL_LIST undefSymList; /* list of undefined symbol names */
#else
SL_LIST undefSymList; /* list of undefined symbol names */
SL_LIST commonSymList; /* list of common symbol structures */
#endif
void * user1; /* reserved for use by end-user */
time_t mtime; /* time of modification time */
void * reserved2; /* reserved for use by WRS */
void * reserved3; /* reserved for use by WRS */
void * reserved4; /* reserved for use by WRS */
} MODULE;
typedef struct module * MODULE_ID; /* module ID */
/* function declarations */
extern STATUS moduleCheck (int options);
extern MODULE_ID moduleCreate (char * name, int format, int flags);
extern STATUS moduleCreateHookAdd (FUNCPTR moduleCreateHookRtn);
extern STATUS moduleCreateHookDelete (FUNCPTR moduleCreateHookRtn);
extern STATUS moduleDelete (MODULE_ID moduleId);
extern MODULE_ID moduleEach (BOOL (*routine) (MODULE_ID moduleId,
_Vx_usr_arg_t userArg),
_Vx_usr_arg_t userArg);
extern MODULE_ID moduleFindByGroup (int groupNumber);
extern MODULE_ID moduleFindByName (char * moduleName);
extern MODULE_ID moduleFindByNameAndPath (char * moduleName,
char * pathName);
extern int moduleFlagsGet (MODULE_ID moduleId);
extern MODULE_ID moduleIdFigure (void * moduleNameOrId);
extern int moduleIdListGet(MODULE_ID * idList, int maxModules);
extern STATUS moduleInfoGet (MODULE_ID moduleId,
MODULE_INFO * pModuleInfo);
extern STATUS moduleInit (MODULE_ID moduleId, char * name, int format,
int flags);
extern STATUS moduleLibInit (void);
extern char * moduleNameGet (MODULE_ID moduleId);
extern STATUS moduleSegAdd (MODULE_ID moduleId, int type, void * location,
size_t length, int flags);
extern SEGMENT_ID moduleSegEach (MODULE_ID moduleId,
BOOL (*routine) (SEGMENT_ID segmentId,
MODULE_ID moduleId,
_Vx_usr_arg_t userArg),
_Vx_usr_arg_t userArg);
extern SEGMENT_ID moduleSegFirst (MODULE_ID moduleId);
extern SEGMENT_ID moduleSegGet (MODULE_ID moduleId);
extern SEGMENT_ID moduleSegNext (SEGMENT_ID segmentId);
#ifdef __cplusplus
}
/*
* Inlined C++ wrappers for the old-style FUNCPTR based function
* prototypes.
*/
extern MODULE_ID moduleEach (FUNCPTR routine, _Vx_usr_arg_t userArg) \
_WRS_DEPRECATED ("please use fully qualified function pointer "
"version of API");
extern SEGMENT_ID moduleSegEach (MODULE_ID moduleId, FUNCPTR routine,
_Vx_usr_arg_t userArg) \
_WRS_DEPRECATED ("please use fully qualified function pointer "
"version of API");
inline MODULE_ID moduleEach
(
FUNCPTR routine,
_Vx_usr_arg_t userArg
)
{
return moduleEach ((BOOL (*)(MODULE_ID moduleId,
_Vx_usr_arg_t userArg))routine,
userArg);
}
inline SEGMENT_ID moduleSegEach
(
MODULE_ID moduleId,
FUNCPTR routine,
_Vx_usr_arg_t userArg
)
{
return moduleSegEach (moduleId,
(BOOL (*)(SEGMENT_ID segmentId,
MODULE_ID moduleId,
_Vx_usr_arg_t userArg))routine,
userArg);
}
#endif /* __cplusplus */
#endif /* __INCmoduleLibh */