📄 coff.h
字号:
/**************************************************************************//* COFF.H *//* COFF data structures and related definitions used by the linker *//**************************************************************************//*------------------------------------------------------------------------*//* COFF FILE HEADER *//*------------------------------------------------------------------------*/struct filehdr { unsigned short f_magic; /* magic number */ unsigned short f_nscns; /* number of sections */ long f_timdat; /* time & date stamp */ long f_symptr; /* file pointer to symtab */ long f_nsyms; /* number of symtab entries */ unsigned short f_opthdr; /* sizeof(optional hdr) */ unsigned short f_flags; /* flags */ unsigned short f_TargetID; /* for C6x = 0x0099 */ };/*------------------------------------------------------------------------*//* File header flags *//*------------------------------------------------------------------------*/#define F_RELFLG 0x01 /* relocation info stripped from file */#define F_EXEC 0x02 /* file is executable (no unresolved refs) */#define F_LNNO 0x04 /* line nunbers stripped from file */#define F_LSYMS 0x08 /* local symbols stripped from file */#define F_GSP10 0x10 /* 34010 version */#define F_GSP20 0x20 /* 34020 version */#define F_SWABD 0x40 /* bytes swabbed (in names) */#define F_AR16WR 0x80 /* byte ordering of an AR16WR (PDP-11) */#define F_LITTLE 0x100 /* byte ordering of an AR32WR (vax) */#define F_BIG 0x200 /* byte ordering of an AR32W (3B, maxi) */#define F_PATCH 0x400 /* contains "patch" list in optional header */#define F_NODF 0x400 #define F_VERSION (F_GSP10 | F_GSP20) #define F_BYTE_ORDER (F_LITTLE | F_BIG)#define FILHDR struct filehdr//#define FILHSZ sizeof(FILHDR) #define FILHSZ 22 // above rounds to align on 4 bytes which causes problems #define COFF_C67_MAGIC 0x00c2/*------------------------------------------------------------------------*//* Macros to recognize magic numbers *//*------------------------------------------------------------------------*/#define ISMAGIC(x) (((unsigned short)(x))==(unsigned short)magic)#define ISARCHIVE(x) ((((unsigned short)(x))==(unsigned short)ARTYPE))#define BADMAGIC(x) (((unsigned short)(x) & 0x8080) && !ISMAGIC(x))/*------------------------------------------------------------------------*//* OPTIONAL FILE HEADER *//*------------------------------------------------------------------------*/typedef struct aouthdr { short magic; /* see magic.h */ short vstamp; /* version stamp */ long tsize; /* text size in bytes, padded to FW bdry*/ long dsize; /* initialized data " " */ long bsize; /* uninitialized data " " */ long entrypt; /* entry pt. */ long text_start; /* base of text used for this file */ long data_start; /* base of data used for this file */} AOUTHDR;#define AOUTSZ sizeof(AOUTHDR)/*----------------------------------------------------------------------*//* When a UNIX aout header is to be built in the optional header, *//* the following magic numbers can appear in that header: */ /* *//* AOUT1MAGIC : default : readonly sharable text segment *//* AOUT2MAGIC: : writable text segment *//* PAGEMAGIC : : configured for paging *//*----------------------------------------------------------------------*/#define AOUT1MAGIC 0410#define AOUT2MAGIC 0407#define PAGEMAGIC 0413/*------------------------------------------------------------------------*//* COMMON ARCHIVE FILE STRUCTURES *//* *//* ARCHIVE File Organization: *//* _______________________________________________ *//* |__________ARCHIVE_MAGIC_STRING_______________| *//* |__________ARCHIVE_FILE_MEMBER_1______________| *//* | | *//* | Archive File Header "ar_hdr" | *//* |.............................................| *//* | Member Contents | *//* | 1. External symbol directory | *//* | 2. Text file | *//* |_____________________________________________| *//* |________ARCHIVE_FILE_MEMBER_2________________| *//* | "ar_hdr" | *//* |.............................................| *//* | Member Contents (.o or text file) | *//* |_____________________________________________| *//* | . . . | *//* | . . . | *//* | . . . | *//* |_____________________________________________| *//* |________ARCHIVE_FILE_MEMBER_n________________| *//* | "ar_hdr" | *//* |.............................................| *//* | Member Contents | *//* |_____________________________________________| *//* *//*------------------------------------------------------------------------*/#define COFF_ARMAG "!<arch>\n"#define SARMAG 8#define ARFMAG "`\n"struct ar_hdr /* archive file member header - printable ascii */{ char ar_name[16]; /* file member name - `/' terminated */ char ar_date[12]; /* file member date - decimal */ char ar_uid[6]; /* file member user id - decimal */ char ar_gid[6]; /* file member group id - decimal */ char ar_mode[8]; /* file member mode - octal */ char ar_size[10]; /* file member size - decimal */ char ar_fmag[2]; /* ARFMAG - string to end header */};/*------------------------------------------------------------------------*//* SECTION HEADER *//*------------------------------------------------------------------------*/struct scnhdr { char s_name[8]; /* section name */ long s_paddr; /* physical address */ long s_vaddr; /* virtual address */ long s_size; /* section size */ long s_scnptr; /* file ptr to raw data for section */ long s_relptr; /* file ptr to relocation */ long s_lnnoptr; /* file ptr to line numbers */ unsigned int s_nreloc; /* number of relocation entries */ unsigned int s_nlnno; /* number of line number entries */ unsigned int s_flags; /* flags */ unsigned short s_reserved; /* reserved byte */ unsigned short s_page; /* memory page id */ };#define SCNHDR struct scnhdr#define SCNHSZ sizeof(SCNHDR)/*------------------------------------------------------------------------*//* Define constants for names of "special" sections *//*------------------------------------------------------------------------*///#define _TEXT ".text"#define _DATA ".data"#define _BSS ".bss"#define _CINIT ".cinit"#define _TV ".tv"/*------------------------------------------------------------------------*//* The low 4 bits of s_flags is used as a section "type" *//*------------------------------------------------------------------------*/#define STYP_REG 0x00 /* "regular" : allocated, relocated, loaded */#define STYP_DSECT 0x01 /* "dummy" : not allocated, relocated, not loaded */#define STYP_NOLOAD 0x02 /* "noload" : allocated, relocated, not loaded */#define STYP_GROUP 0x04 /* "grouped" : formed of input sections */#define STYP_PAD 0x08 /* "padding" : not allocated, not relocated, loaded */#define STYP_COPY 0x10 /* "copy" : used for C init tables - not allocated, relocated, loaded; reloc & lineno entries processed normally */#define STYP_TEXT 0x20 /* section contains text only */#define STYP_DATA 0x40 /* section contains data only */#define STYP_BSS 0x80 /* section contains bss only */#define STYP_ALIGN 0x100 /* align flag passed by old version assemblers */#define ALIGN_MASK 0x0F00 /* part of s_flags that is used for align vals */#define ALIGNSIZE(x) (1 << ((x & ALIGN_MASK) >> 8))/*------------------------------------------------------------------------*//* RELOCATION ENTRIES *//*------------------------------------------------------------------------*/struct reloc{ long r_vaddr; /* (virtual) address of reference */ short r_symndx; /* index into symbol table */ unsigned short r_disp; /* additional bits for address calculation */ unsigned short r_type; /* relocation type */};#define RELOC struct reloc#define RELSZ 10 /* sizeof(RELOC) *//*--------------------------------------------------------------------------*//* define all relocation types *//*--------------------------------------------------------------------------*/#define R_ABS 0 /* absolute address - no relocation */#define R_DIR16 01 /* UNUSED */#define R_REL16 02 /* UNUSED */#define R_DIR24 04 /* UNUSED */#define R_REL24 05 /* 24 bits, direct */#define R_DIR32 06 /* UNUSED */#define R_RELBYTE 017 /* 8 bits, direct */#define R_RELWORD 020 /* 16 bits, direct */#define R_RELLONG 021 /* 32 bits, direct */#define R_PCRBYTE 022 /* 8 bits, PC-relative */#define R_PCRWORD 023 /* 16 bits, PC-relative */#define R_PCRLONG 024 /* 32 bits, PC-relative */#define R_OCRLONG 030 /* GSP: 32 bits, one's complement direct */#define R_GSPPCR16 031 /* GSP: 16 bits, PC relative (in words) */#define R_GSPOPR32 032 /* GSP: 32 bits, direct big-endian */#define R_PARTLS16 040 /* Brahma: 16 bit offset of 24 bit address*/#define R_PARTMS8 041 /* Brahma: 8 bit page of 24 bit address */#define R_PARTLS7 050 /* DSP: 7 bit offset of 16 bit address */#define R_PARTMS9 051 /* DSP: 9 bit page of 16 bit address */#define R_REL13 052 /* DSP: 13 bits, direct *//*------------------------------------------------------------------------*//* LINE NUMBER ENTRIES *//*------------------------------------------------------------------------*/struct lineno{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -