2020-09-30 17:12:29 +02:00

354 lines
9.2 KiB
C

/*++
Copyright (c) 1992 Digital Equipment Corporation
Module Name:
a2coff.h
Abstract:
Include file for a2coff.c
Author:
Wim Colgate 06-April-1992
--*/
#ifndef A2COFF_HEADER
#define A2COFF_HEADER
//
// define some missing NT-like types
//
#define INT int
#define UINT unsigned int
//
// Define constant values.
//
#define FILENAMELEN 256
#define FALSE 0
#define TRUE 1
#define NOTUSED FALSE
#define USED TRUE
#ifndef SEEK_SET
#define SEEK_SET 0
#endif
#ifndef SEEK_CUR
#define SEEK_CUR 1
#endif
#ifndef SEEK_END
#define SEEK_END 2
#endif
//
// Define Alpha Symbol Types
//
#define ST_ALPHA_NIL 0 // dummy entry
#define ST_ALPHA_GLOBAL 1 //
#define ST_ALPHA_STATIC 2
#define ST_ALPHA_PARAM 3
#define ST_ALPHA_LOCAL 4
#define ST_ALPHA_LABEL 5
#define ST_ALPHA_PROC 6
#define ST_ALPHA_BLOCK 7
#define ST_ALPHA_END 8
#define ST_ALPHA_MEMBER 9
#define ST_ALPHA_TYPEDEF 10
#define ST_ALPHA_FILE 11
#define ST_ALPHA_STATIC_PROC 14
#define ST_ALPHA_CONSTANT 15
//
// Define Alpha Storage Classes
//
#define SC_ALPHA_NIL 0
#define SC_ALPHA_TEXT 1
#define SC_ALPHA_DATA 2
#define SC_ALPHA_BSS 3
#define SC_ALPHA_REGISTER 4
#define SC_ALPHA_ABS 5
#define SC_ALPHA_UNDEFINED 6
// 7 is reserved
#define SC_ALPHA_BITS 8
#define SC_ALPHA_DBX 9
#define SC_ALPHA_REGIMAGE 10
#define SC_ALPHA_INFO 11
#define SC_ALPHA_USERSTRUCT 12
#define SC_ALPHA_SDATA 13
#define SC_ALPHA_SBSS 14
#define SC_ALPHA_RDATA 15
#define SC_ALPHA_VAR 16
#define SC_ALPHA_COMMON 17
#define SC_ALPHA_SCOMMON 18
#define SC_ALPHA_VARREGISTER 19
#define SC_ALPHA_VARIANT 20
#define SC_ALPHA_UNDEFSMALL 21
#define SC_ALPHA_INIT 22
// 23 is reserved
#define SC_ALPHA_XDATA 24
#define SC_ALPHA_PDATA 25
#define SC_ALPHA_FINI 26
#define SC_ALPHA_MAX 32
//
// Define Alpha relocation and symbol table structures.
//
typedef struct _ALPHARELOC { // from reloc.h
ULONG r_vaddr_lo ; // lo longword of 64 bit address
ULONG r_vaddr_hi ; // hi longword of 64 bit address
ULONG r_symindex ;
ULONG r_type: 8,
r_external: 1,
r_reserved: 23 ;
} ALPHARELOC;
typedef struct _ALPHA_SYML { // from sym.h
ULONG s_value_lo ; // lo longword of 64 bit value
ULONG s_value_hi ; // hi longword of 64 bit value
ULONG s_iss;
ULONG s_st:6,
s_sc:5,
s_reserved:1,
s_index:20;
} ALPHA_SYML;
typedef struct _ALPHA_SYME { // from sym.h
ALPHA_SYML e_asym ;
USHORT e_jmptbl: 1,
e_cobol_main: 1,
e_weakext: 1,
e_reserved: 13;
ULONG ifd;
} ALPHA_SYME;
typedef struct _ALPHA_SYMBOL_HEADER {
USHORT s_magic ;
USHORT s_vstamp ;
LONG s_ilineMax ;
LONG s_idnMax ;
LONG s_ipdMax ;
LONG s_isymMax ;
LONG s_ioptMax ;
LONG s_iauxMax ;
LONG s_issMax ;
LONG s_issExtMax ;
LONG s_ifdMax ;
LONG s_crfd ;
LONG s_iextMax ;
ULONG s_cbLine_lo ;
ULONG s_cbLine_hi ;
ULONG s_cbLineOffset_lo ;
ULONG s_cbLineOffset_hi ;
ULONG s_cbDnOffset_lo ;
ULONG s_cbDnOffset_hi ;
ULONG s_cbPdOffset_lo ;
ULONG s_cbPdOffset_hi ;
ULONG s_cbSymOffset_lo ;
ULONG s_cbSymOffset_hi ;
ULONG s_cbOptOffset_lo ;
ULONG s_cbOptOffset_hi ;
ULONG s_cbAuxOffset_lo ;
ULONG s_cbAuxOffset_hi ;
ULONG s_cbSsOffset_lo ;
ULONG s_cbSsOffset_hi ;
ULONG s_cbSsExtOffset_lo ;
ULONG s_cbSsExtOffset_hi ;
ULONG s_cbFdOffset_lo ;
ULONG s_cbFdOffset_hi ;
ULONG s_cbRfdOffset_lo ;
ULONG s_cbRfdOffset_hi ;
ULONG s_cbExtOffset_lo ;
ULONG s_cbExtOffset_hi ;
} ALPHA_SYMBOL_HEADER ;
typedef struct _ALPHA_PDES { // from sym.h
ULONG p_addr_lo; // lo longword of 64 bit address
ULONG p_addr_hi; // hi longword of 64 bit address
ULONG p_cbLineOffset_lo; // lo longword of 64 bit offset
ULONG p_cbLineOffset_hi; // hi longword of 64 bit offset
LONG p_isym;
LONG p_iline;
LONG p_regmask;
LONG p_regoffset;
LONG p_iopt;
LONG p_fregmask;
LONG p_fregoffset;
LONG p_frameoffset;
LONG p_lnLow;
LONG p_lnHigh;
ULONG p_gp_prologue: 8,
p_gp_used: 1,
p_reserved: 23 ;
SHORT p_framereg ;
SHORT p_pcreg ;
} ALPHA_PDES;
typedef struct _ALPHA_FDES { // from sym.h
ULONG f_addr_lo; // lo longword of 64 bit address
ULONG f_addr_hi; // hi longword of 64 bit address
ULONG f_cbLineOffset_lo; // lo longword of 64 bit offset
ULONG f_cbLineOffset_hi; // hi longword of 64 bit offset
ULONG f_cbLine_lo; // lo longword of 64 bit count
ULONG f_cbLine_hi; // hi longword of 64 bit count
ULONG f_cbSs_lo; // lo longword of 64 bit count
ULONG f_cbSs_hi; // hi longword of 64 bit count
LONG f_rss;
LONG f_issBase;
LONG f_isymBase;
LONG f_csym;
LONG f_ilineBase;
LONG f_cline;
LONG f_ioptBase;
LONG f_copt;
LONG f_ipdFirst;
LONG f_iauxBase;
LONG f_caux;
LONG f_rfdBase;
LONG f_cfd;
ULONG f_lan: 5,
f_fMerge: 1,
f_fReadin: 1,
f_fBigEndian: 1,
f_glevel: 2,
f_reserved: 22;
} ALPHA_FDES;
typedef struct _ALPHA_SECTION_HEADER { // from scnhdr.h
UCHAR s_name[8];
ULONG s_paddr_lo ; // lo longword of 64 bit physical address
ULONG s_paddr_hi ; // hi longword of 64 bit physical address
ULONG s_vaddr_lo ; // lo longword of 64 bit virtual address
ULONG s_vaddr_hi ; // hi longword of 64 bit virtual address
ULONG s_size_lo ; // lo longword of 64 bit size
ULONG s_size_hi ; // hi longword of 64 bit size
ULONG s_scnptr_lo ; // lo longword of 64 bit pointer
ULONG s_scnptr_hi ; // hi longword of 64 bit pointer
ULONG s_relptr_lo ; // lo longword of 64 bit pointer
ULONG s_relptr_hi ; // hi longword of 64 bit pointer
ULONG s_lnnoptr_lo ; // lo longword of 64 bit pointer
ULONG s_lnnoptr_hi ; // hi longword of 64 bit pointer
USHORT s_nreloc ;
USHORT s_nlnno ;
ULONG s_flags ;
} ALPHA_SECTION_HEADER ;
typedef struct _ALPHA_OPT_HDR { // from aouthdr.h
USHORT o_magic ;
USHORT o_vstamp ;
ULONG o_quadwordpadding ;// padding to force quadword alignment on size
ULONG o_tsize_lo ; // lo longword of 64 bit count
ULONG o_tsize_hi ; // hi longword of 64 bit count
ULONG o_dsize_lo ; // lo longword of 64 bit count
ULONG o_dsize_hi ; // hi longword of 64 bit count
ULONG o_bsize_lo ; // lo longword of 64 bit count
ULONG o_bsize_hi ; // hi longword of 64 bit count
ULONG o_entry_lo ; // lo longword of 64 bit entry point
ULONG o_entry_hi ; // hi longword of 64 bit entry point
ULONG o_text_start_lo ; // lo longword of 64 bit start
ULONG o_text_start_hi ; // hi longword of 64 bit start
ULONG o_data_start_lo ; // lo longword of 64 bit start
ULONG o_data_start_hi ; // hi longword of 64 bit start
ULONG o_bss_start_lo ; // lo longword of 64 bit start
ULONG o_bss_start_hi ; // hi longword of 64 bit start
ULONG o_gpmask ;
ULONG o_fpmask ;
ULONG o_gp_value_lo ; // lo longword of 64 bit gp
ULONG o_gp_value_hi ; // hi longword of 64 bit gp
} ALPHA_OPT_HDR ;
typedef struct _ALPHA_IMAGE_FILE_HEADER { // from filehdr.h
USHORT a_magic ;
USHORT a_nscns ;
ULONG a_timdat ;
ULONG a_symptr_lo ; // lo longword of 64 bit pointer
ULONG a_symptr_hi ; // hi longword of 64 bit pointer
ULONG a_nsyms ;
USHORT a_opthdr ;
USHORT a_flags ;
} ALPHA_IMAGE_FILE_HEADER ;
//
// alpha's magic number
//
#define ALPHA_MAGIC 0x184 // octal 604
//
// define Alpha's relocation types.
//
#define IMAGE_REL_ALPHA_ABSOLUTE 0x0
#define IMAGE_REL_ALPHA_REFLONG 0x1
#define IMAGE_REL_ALPHA_REFQUAD 0x2
#define IMAGE_REL_ALPHA_GPREL32 0x3
#define IMAGE_REL_ALPHA_LITERAL 0x4
#define IMAGE_REL_ALPHA_LITUSE 0x5
#define IMAGE_REL_ALPHA_GPDISP 0x6
#define IMAGE_REL_ALPHA_BRADDR 0x7
#define IMAGE_REL_ALPHA_HINT 0x8
//
// literal usage types for ALPHA_RELOC_LITUSE
//
#define ALPHA_LITUSE_BASE 0x1
#define ALPHA_LITUSE_BYTEOFF 0x2
#define ALPHA_LITUSE_JSR 0x3
//
// Define COFF section numbers.
//
#undef TEXT
#define TEXT 1
#define RDATA 2
#define DATA 3
#define SDATA 4
#define SBSS 5
#define BSS 6
#define INIT 7
#define LIT8 8
#define LIT4 9
#define XDATA 10
#define PDATA 11
#define FINI 12
#define LITA 13
#define MAX_SECTIONS 13
//
// Define GP displacement used by the compiler for local references to
// symbols in small sections.
//
#define GP_VAL (32768 - 16)
//
// Define size of runtime function table entry.
//
#define SIZEOF_RUNTIME_FUNCTION 20
//
// Define size of symbol index table.
//
#define NUMSYMINDEX 65534
#endif