Files
vxWorks/h/private/loadFileLibP.h
2025-08-20 18:25:46 +08:00

213 lines
7.3 KiB
C

/* loadFileLibP.h - header for utility func. lib. shared by loader libraries */
/*
* Copyright (c) 2004-2005 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
--------------------
01g,07mar05,v_r Included symbol.h
01f,01mar05,v_r Moved segment type enum to moduleLib.h.
01e,06oct04,jn Clean up comments
01d,17sep04,jn Move towards shared files
01c,08apr04,jn Adjustment needed in segment descriptor structure to handle
and track alignments correctly
01b,05apr04,jn Clean up development-related comments
01a,19feb04,jn Derived from AE's malLib.h
*/
#ifndef __INCloadFileLibPh
#define __INCloadFileLibPh
#ifdef __cplusplus
extern "C" {
#endif
/* Includes */
#ifdef HOST
#include "host.h"
#include "objLib.h"
#else
#include "vxWorks.h"
#include "errno.h"
#include "vwModNum.h"
#include "private/handleLibP.h"
#endif /* HOST */
#include "symbol.h"
#include "private/symbolP.h"
#include "dllLib.h"
/* Status codes */
/* Defines */
/*
* For internal use only, within load directives. Section names will
* be truncated to this number of characters when used in load
* directives.
*/
#define SEC_NAME_MAX 256
/* indexes into the array of segment descriptors */
#define TEXT_SEG_DESC_INDEX 0
#define DATA_SEG_DESC_INDEX 1
#define BSS_SEG_DESC_INDEX 2
#define NUM_KERNEL_MODULE_SEGS 3
/* Type definitions */
typedef unsigned int LOAD_FLAG_T; /* load flag type */
/* information associated with module while loading is in progress */
typedef enum module_source /* method file was specified by */
{
FROM_FD = 0, /* opened from file descriptor */
FROM_FILENAME = 1 /* opened from file name */
} MODULE_SOURCE;
typedef enum mseek_mode /* Module position mode flags */
{
MSEEK_SET = 0, /* Set pos. from the beginnning */
MSEEK_CUR = 1 /* Set pos. from the current loc. */
} MSEEK_MODE;
/* Types used throughout various loader header files */
typedef void * SYM_ADRS; /* symbol's address */
typedef void ** SYM_ADRS_TBL; /* table of symbol's addr */
typedef void * SCN_ADRS; /* section's address */
typedef void ** SCN_ADRS_TBL; /* table of section's addr */
typedef enum load_type /* type of load being performed */
{
LOAD_UNKNOWN = 0,
LOAD_SYS_SYM_TBL = 1, /* Load the system symbol table */
LOAD_VXWORKS_IMG = 2, /* Load vxWorks image (copy on host for tgtsvr) */
LOAD_STAT_EXE = 3, /* Load statically linked executable */
LOAD_DYN_EXE = 4, /* Load dynamically linked executable */
LOAD_KERNEL_MODULE = 5, /* Load relocatable module into kernel */
LOAD_SYMS_ONLY = 6 /* Load symbols only */
} LOAD_TYPE;
typedef struct load_module_info /* information about file to load */
{
int fd; /* file descriptor */
int options;
char * fileName;
MODULE_SOURCE moduleOpened; /* FROM_FD or FROM_FILENAME */
LOAD_TYPE loadType; /* relocatable, executable, ... */
} LOAD_MODULE_INFO;
typedef struct
{
SYM_ADRS pAddr; /* symbol's address */
SYM_TYPE type; /* symbol's type */
SYMBOL_ID symId; /* ID of the symbol */
} SYM_INFO;
typedef SYM_INFO * SYM_INFO_TBL; /* table of symbol address/type info */
typedef SYM_INFO_TBL * SYMINFO_REFS; /* table of ptr to symbol info tables */
/* section types */
typedef enum section_type /* Section types */
{
SECTION_UNKNOWN = 0,
SECTION_RODATA = 1, /* read-only data section */
SECTION_TEXT = 2, /* text section */
SECTION_DATA = 3, /* data section */
SECTION_BSS = 4 /* bss section */
} SECTION_TYPE;
typedef struct modListDesc * MODLIST_ID; /* module list ID */
typedef struct sectionDesc * SECTION_ID; /* section ID */
typedef enum section_type SECTION_T;
typedef struct sectionDesc /* module section descriptor */
{
#ifdef HOST
OBJ_CORE handle; /* handle management */
#else
HANDLE handle; /* handle management */
#endif /* HOST */
DL_NODE sectionNode; /* double-linked list node information*/ char * name; /* section name */
void * address; /* section address */
int size; /* section size */
enum section_type type; /* section type */
int flags; /* section flags */
u_short checksum; /* section cksum; u_short is returned by * checksum() */
} SECTION_DESC;
typedef struct section_info_desc /* Info about a loadable section */
{
SL_NODE scnInfoNode; /* Point to next node in list */
char * name; /* Section's name */
enum section_type type; /* Section's type */
UINT offset; /* Offset of section in object module*/
UINT size; /* Section's size */
UINT alignment; /* Section's alignment */
UINT flags; /* Section's flags */
void * address; /* Section's address */
UINT offsetInSeg; /* Section's offset in segment */
UINT directiveIdx; /* Index of the related load directive*/
#ifdef HOST
BOOL scnIsCached;
#endif
SECTION_ID sectionId;
} SECTION_INFO_DESC;
typedef struct
{
char * addrText; /* text segment address */
char * addrData; /* data segment address */
char * addrBss; /* bss segment address */
UINT sizeText; /* text segment size */
UINT sizeProtectedText; /* protected text segment size */
UINT sizeData; /* data segment size */
UINT sizeBss; /* bss segment size */
int flagsText; /* text flags for module */
int flagsData; /* data flags for module */
int flagsBss; /* bss flags for module */
} SEG_INFO;
typedef struct load_segment_directive
{
UINT32 type; /* type of the segment */
void * address; /* address of the segment */
BOOL memAllocatedByCaller; /* True iff the caller allocated mem. */
} LOAD_SEGMENT_DIRECTIVE;
/* declarations */
extern void loadFileLibInit (void);
extern STATUS loadModuleInfoFromFd (int fd,
LOAD_MODULE_INFO * pLoadModuleInfo);
extern STATUS loadModuleInfoFromFilenameOpen (char * fileName,
LOAD_MODULE_INFO * pLoadModuleInfo);
extern STATUS loadModuleInfoRelease (LOAD_MODULE_INFO loadModuleInfo);
extern STATUS loadModuleSeek (LOAD_MODULE_INFO * pLoadModuleInfo,
int offset, MSEEK_MODE mode);
extern STATUS loadModuleStringRead (LOAD_MODULE_INFO * pLoadModuleInfo,
char * buffer, UINT32 nBytes);
extern STATUS loadModuleValueRead (LOAD_MODULE_INFO * pLoadModuleInfo,
void * buffer, UINT32 nBytes);
#ifdef __cplusplus
}
#endif
#endif /* __INCloadFileLibPh */