⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 coff.h

📁 TMS320F2808的完整驱动测试程序源码
💻 H
📖 第 1 页 / 共 2 页
字号:
/*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 + -