116 lines
2.7 KiB
C
116 lines
2.7 KiB
C
/*
|
|
* lmf.h Load Module Format
|
|
*
|
|
* Copyright by QNX Software Systems Limited 1990-1993. All rights reserved.
|
|
*/
|
|
#ifndef __LMF_H_INCLUDED
|
|
#define __LMF_H_INCLUDED
|
|
#pragma pack(push, 1)
|
|
|
|
struct _lmf_header { /* This preceeds each record defined below */
|
|
char rec_type,
|
|
zero1;
|
|
short unsigned data_nbytes,
|
|
spare;
|
|
} ;
|
|
|
|
|
|
struct _lmf_definition { /* Must be first record in load file */
|
|
short unsigned version_no,
|
|
cflags,
|
|
cpu,
|
|
fpu,
|
|
code_index,
|
|
stack_index,
|
|
heap_index,
|
|
argv_index,
|
|
zero1[4];
|
|
int32 code_offset,
|
|
stack_nbytes,
|
|
heap_nbytes,
|
|
flat_offset,
|
|
unmapped_size,
|
|
zero2;
|
|
/* Variable length field of n longs starts here */
|
|
} ;
|
|
|
|
|
|
struct _lmf_data { /* Code or data record to load into memory */
|
|
short segment_index;
|
|
uint32 offset;
|
|
/* Variable length field of n bytes starts here */
|
|
} ;
|
|
|
|
|
|
struct _lmf_seg_fixup { /* Segment fixup record */
|
|
struct fixups {
|
|
short unsigned fixup_seg_index;
|
|
int32 fixup_offset;
|
|
} data[1]; /* May be n of these */
|
|
} ;
|
|
|
|
|
|
struct _lmf_linear_fixup { /* Segment fixup record */
|
|
short unsigned fixup_seg_index;
|
|
int32 fixup_offset[1];
|
|
} ;
|
|
|
|
|
|
struct _lmf_eof {
|
|
char zero[6];
|
|
} ;
|
|
|
|
|
|
struct _lmf_resource {
|
|
short unsigned resource_type; /* 0 - usage messages */
|
|
short unsigned zero[3];
|
|
} ;
|
|
|
|
|
|
/*
|
|
* Record types
|
|
*/
|
|
|
|
#define _LMF_DEFINITION_REC 0
|
|
#define _LMF_COMMENT_REC 1
|
|
#define _LMF_DATA_REC 2
|
|
#define _LMF_FIXUP_SEG_REC 3
|
|
#define _LMF_FIXUP_80X87_REC 4
|
|
#define _LMF_EOF_REC 5
|
|
#define _LMF_RESOURCE_REC 6
|
|
#define _LMF_ENDDATA_REC 7
|
|
#define _LMF_FIXUP_LINEAR_REC 8
|
|
#define _LMF_PHRESOURCE 9 // A widget resource for photon apps
|
|
|
|
|
|
/*
|
|
* Bit defitions for lh_code_flags
|
|
*/
|
|
|
|
#define _PCF_LONG_LIVED 0x0001
|
|
#define _PCF_32BIT 0x0002
|
|
#define _PCF_PRIVMASK 0x000c /* Two bits */
|
|
#define _PCF_FLAT 0x0010
|
|
#define _PCF_NOSHARE 0x0020
|
|
|
|
/*
|
|
* The top 4 bits of the segment sizes
|
|
*/
|
|
|
|
#define _LMF_CODE 0x2
|
|
|
|
|
|
#define MIN_SEGMENTS 1 // usually 2 or 4
|
|
#define MAX_SEGMENTS 4
|
|
|
|
|
|
struct ex_header {
|
|
struct _lmf_header lmf_header;
|
|
struct _lmf_definition lmf_definition;
|
|
uint32 segsizes[MAX_SEGMENTS];
|
|
};
|
|
|
|
|
|
#pragma pack(pop)
|
|
#endif
|