?? coff.h
字號:
/*H***************************************************************************
*
* $Archive:: /TI/product/sdtsrv/cofflib/coff.h $
* $Revision:: 4 $
* $Date:: 2/14/01 10:15a $
* $Author:: Tonyc $
*
* DESCRIPTION:
* Generic coff reader.
*
* USAGE/LIMITATIONS:
*
* NOTES:
*
* (C) Copyright 1997 by Spectrum Digital Incorporated
* All rights reserved
*
*H***************************************************************************/
/*------------------------------------------------------------------------*/
/* COFF VERSION FLAGS */
/*------------------------------------------------------------------------*/
#if !defined(TI_COFF_VERSION_0) && \
!defined(TI_COFF_VERSION_1) && \
!defined(TI_COFF_VERSION_2)
#define TI_COFF_VERSION_0 0
#define TI_COFF_VERSION_1 0
#define TI_COFF_VERSION_2 1
#endif
#ifndef TI_COFF_VERSION_0
#define TI_COFF_VERSION_0 0
#endif
#ifndef TI_COFF_VERSION_1
#define TI_COFF_VERSION_1 0
#endif
#ifndef TI_COFF_VERSION_2
#define TI_COFF_VERSION_2 0
#endif
/*------------------------------------------------------------------------*/
/* COFF MAGIC NUMBERS */
/*------------------------------------------------------------------------*/
#define TI_COFF_MAGIC_0 0300 /* ORIGINAL VERSION OF COFF */
#define TI_COFF_MAGIC_1 0301
#define TI_COFF_MAGIC_2 0302
/*------------------------------------------------------------------------*/
/* COFF TARGET ID's (FORMERLY MAGIC NUMBERS) */
/* NOTE!!! DEFINE THE MACRO "MAGIC" TO BE ONE OF THESE MACROS. */
/*------------------------------------------------------------------------*/
#define TI_MAGIC_340 0220
#define TI_MAGIC_370 0221
#define TI_MAGIC_DSP 0222
#define TI_MAGIC_C30 0223
#define TI_MAGIC_380 0224
#define TI_MAGIC_MVP 0225
#define TI_MAGIC_C16 0226
#define TI_MAGIC_ARM 0227
#define TI_MAGIC_LEAD 0230
#define TI_MAGIC_C60 0231
#define TI_MAGIC_C8P 0232
#define TI_MAGIC_LEAD3 0234
#define TI_MAGIC_LEADSDK 0234
#define TI_MAGIC_ANKOOR 0235
#define TI_MAGIC_MIN 0220 /* MINIMUM VALID MAGIC NUMBER */
#define TI_MAGIC_MAX 0235 /* MAXIMUM VALID MAGIC NUMBER */
/*------------------------------------------------------------------------*/
/* Macros to recognize magic numbers */
/*------------------------------------------------------------------------*/
#define TI_ISCOFF(x) (TI_ISCOFF_0(x)||TI_ISCOFF_1(x)||TI_ISCOFF_2(x)||TI_ISMAGIC(x))
#define TI_ISMAGIC(x) (((unsigned short)(x)) == TI_MAGIC)
#define TI_BADMAGIC(x) (((unsigned short)(x) & 0x8080) && !TI_ISMAGIC(x))
#if TI_COFF_VERSION_2
#define TI_ISCOFF_0(x) ((unsigned short)(x) == TI_COFF_MAGIC_0)
#define TI_ISCOFF_1(x) ((unsigned short)(x) == TI_COFF_MAGIC_1)
#define TI_ISCOFF_2(x) ((unsigned short)(x) == TI_COFF_MAGIC_2)
#elif TI_COFF_VERSION_1
#define TI_ISCOFF_0(x) ((unsigned short)(x) == TI_COFF_MAGIC_0)
#define TI_ISCOFF_1(x) ((unsigned short)(x) == TI_COFF_MAGIC_1)
#define TI_ISCOFF_2(x) FALSE
#else
#define TI_ISCOFF_0(x) FALSE
#define TI_ISCOFF_1(x) FALSE
#define TI_ISCOFF_2(x) FALSE
#endif
#define TI_ISMAGIC_ANY(x) (((unsigned short)(x)) >= TI_MAGIC_MIN && \
((unsigned short)(x)) <= TI_MAGIC_MAX)
#define TI_ISCOFF_ANY(x) (TI_ISCOFF_0(x) || TI_ISCOFF_1(x) || \
TI_ISCOFF_2(x) || TI_ISMAGIC_ANY(x))
#include "coffdefs.h"
/*------------------------------------------------------------------------*/
/* 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_target_id; /* target architecture id */
};
#define TI_FILHDR struct filehdr
#define TI_FILHSZ (TI_COFF_VERSION_0 ? 20 : 22)
#define TI_FILHSZ_IN(version) (version >= TI_COFF_MAGIC_1 ? 22 : 20)
/*------------------------------------------------------------------------*/
/* File header flags */
/*------------------------------------------------------------------------*/
#define TI_F_RELFLG 0x01 /* relocation info stripped from file */
#define TI_F_EXEC 0x02 /* file is executable (no unresolved refs) */
#define TI_F_LNNO 0x04 /* line nunbers stripped from file */
#define TI_F_LSYMS 0x08 /* local symbols stripped from file */
/*------------------------------------------------------------------------*/
/* Target device identification flags (bits 4-7 in file header flags) */
/*------------------------------------------------------------------------*/
#define TI_F_VERS0 0x0 /* 0th generation CPU */
#define TI_F_VERS1 0x10 /* 1st generation CPU */
#define TI_F_VERS2 0x20 /* 2nd generation CPU */
#define TI_F_VERS3 0x40 /* 3rd generation CPU */
#define TI_F_VERS4 0x80 /* 4th generation CPU */
#define TI_F_VERSION (TI_F_VERS1 |TI_ F_VERS2 | TI_F_VERS3 | TI_F_VERS4)
/*------------------------------------------------------------------------*/
/* Target device raw data byte ordering flags (bits 8-9) */
/*------------------------------------------------------------------------*/
#define TI_F_LITTLE 0x100 /* object code is LSB first */
#define TI_F_BIG 0x200 /* object code is MSB first */
#define TI_F_BYTE_ORDER (TI_F_LITTLE | TI_F_BIG)
#define TI_F_SYMMERGE 0x1000 /* Tags, etc were merged - no duplicates */
/*------------------------------------------------------------------------*/
/* OPTIONAL FILE HEADER */
/*------------------------------------------------------------------------*/
typedef struct ti_aouthdr
{
short magic; /* optional file header magic number */
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 */
} TI_AOUTHDR;
#define TI_AOUTSZ sizeof(TI_AOUTHDR)
#define TI_AOUT1MAGIC 0410
/*------------------------------------------------------------------------*/
/* COMMON ARCHIVE FILE STRUCTURES */
/* */
/* ARCHIVE File Organization: */
/* +---------------------------------------------+ */
/* | ARCHIVE_MAGIC_STRING | */
/* +---------------------------------------------+ */
/* | ARCHIVE_FILE_MEMBER_1 | */
/* +- - - - - - - - - - - - - - - - - - - - - - -+ */
/* | Archive File Header "ar_hdr" | */
/* | Contents (Ext symbol direct, text file) | */
/* +---------------------------------------------+ */
/* | ARCHIVE_FILE_MEMBER_2 | */
/* +- - - - - - - - - - - - - - - - - - - - - - -+ */
/* | Archive File Header "ar_hdr" | */
/* | Contents (.o or text file) | */
/* +---------------------------------------------+ */
/* | . . . | */
/* | . . . | */
/* | . . . | */
/* +---------------------------------------------+ */
/* | ARCHIVE_FILE_MEMBER_n | */
/* +- - - - - - - - - - - - - - - - - - - - - - -+ */
/* | Archive File Header "ar_hdr" | */
/* | Contents (.o or text file) | */
/* +---------------------------------------------+ */
/* */
/*------------------------------------------------------------------------*/
#define TI_ARMAG "!<arch>\n"
#define TI_SARMAG 8
#define TI_ARFMAG "`\n"
#define TI_ARFMAG_SIZE 2
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 */
};
#define TI_ARHDR struct ar_hdr
#define TI_ARHSZ sizeof(TI_ARHDR)
#define TI_AR_HDR_SZ sizeof(TI_ARHDR)
#define TI_AR_FNAME_SIZE 16
/*------------------------------------------------------------------------*/
/* SECTION HEADER */
/*------------------------------------------------------------------------*/
#define TI_SYMNMLEN 8 /* Number of characters in a symbol name */
struct ti_scnhdr
{
union
{
char _s_name[TI_SYMNMLEN]; /* old COFF version name fld */
struct
{
long _s_zeroes; /* new == 0 */
long _s_offset; /* offset into string table */
} _s_s;
char *_s_nptr[2]; /* allows for overlaying */
} _s;
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 long s_nreloc; /* number of relocation entries */
unsigned long s_nlnno; /* number of line number entries */
unsigned long s_flags; /* flags */
short s_reserved; /* reserved 2 bytes */
unsigned short s_page; /* memory page id */
};
typedef struct ti_o_scnhdr
{
char os_name[8]; /* section name */
long os_paddr; /* physical address */
long os_vaddr; /* virtual address */
long os_size; /* section size */
long os_scnptr; /* file ptr to raw data for section */
long os_relptr; /* file ptr to relocation */
long os_lnnoptr; /* file ptr to line numbers */
unsigned short os_nreloc; /* number of relocation entries */
unsigned short os_nlnno; /* number of line number entries */
unsigned short os_flags; /* flags */
char os_reserved; /* reserved byte */
unsigned char os_page; /* memory page id */
}TI_O_SCNHDR;
#define s_name _s._s_name
#define s_nptr _s._s_nptr[1]
#define s_zeroes _s._s_s._s_zeroes
#define s_offset _s._s_s._s_offset
#define TI_SCNHDR struct ti_scnhdr
#define TI_SCNHSZ sizeof(TI_SCNHDR)
#define TI_SCNHSZ_IN(version) (version == TI_COFF_MAGIC_2 ? TI_SCNHSZ : (TI_SCNHSZ - 8))
/*------------------------------------------------------------------------*/
/* Define constants for names of "special" sections */
/*------------------------------------------------------------------------*/
#define TI_TEXT ".text"
#define TI_DATA ".data"
#define TI_BSS ".bss"
#define TI_REG ".reg"
#define TI_CINIT ".cinit"
/*------------------------------------------------------------------------*/
/* The low 8 bits of s_flags is used as a section "type" */
/*------------------------------------------------------------------------*/
#define TI_STYP_REG 0x00 /* "regular" : allocated, relocated, loaded */
#define TI_STYP_DSECT 0x01 /* "dummy" : not allocated, relocated, not loaded */
#define TI_STYP_NOLOAD 0x02 /* "noload" : allocated, relocated, not loaded */
#define TI_STYP_GROUP 0x04 /* not used */
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -