C6474 required changes
[keystone-rtos/ibl.git] / src / interp / coff / cload.mike.h
1 /***************************************************************************
2 * FILENAME: cload.h
3 * VERSION:  2.4  5/2/96  13:12:48
4 * SCCS ID:  "@(#)cload.h        2.4  5/2/96"
5 ***************************************************************************/
6 /*****************************************************************************/
7 /* CLOAD.H - Header file for Generic COFF Loader     Version 4.00 9/92       */
8 /*****************************************************************************/
9 #ifndef _CLOAD_H_
10 #define _CLOAD_H_
12 typedef unsigned int  T_ADDR;          /* TYPE FOR TARGET ADDRESS          */
13 typedef unsigned int  T_DATA;          /* TYPE FOR TARGET DATA WORD        */
14 typedef unsigned int  T_SIZE;          /* TYPE FOR CINIT SIZE FIELD        */
15 typedef unsigned int  T_IADDR;         /* TYPE FOR CINIT ADDRESS FIELD     */
16 typedef unsigned int  T_INSTRUCT;      /* TYPE FOR INSTRUCTION OPCODE      */
18 #define FT_IEEE_FLT             1
19 #define FT_IEEE_DBL             2
20 #define FLT_PRECISION           4
22 typedef struct trg_fval {
23         unsigned int    fval1;
24         unsigned int    fval2;
25 } TRG_FVAL;
27 #define MAGIC MAGIC_C60                 /* C60 Magic Number                 */
29 #define LOCTOBYTE(x)   (x)              /* C60 addresses are same as bytes  */
30 #define BYTETOLOC(x)   (x)
31 #define BIT_OFFSET(a)  (0)              /* BIT OFFSET OF ADDR WITHIN BYTE   */
33 #ifdef OTIS
34 #define LOADBUFSIZE   (TRG_MAX_MBLK/8)  /* USE OTIS BUFFER SIZE             */
35 #else
36 #define LOADBUFSIZE   0x4000            /* 16K BUFFER FOR LOADING DATA      */
37 //#define UNBUFFERED            1
38 #endif
40 #define LOADWORDSIZE  8                 /* MINIMUM DIVISOR OF LOAD SIZE     */
41 #define CINIT         ".cinit"          /* NAME OF CINIT SECTION            */
42 #define INIT_ALIGN    8                 /* ALIGNMENT OF CINIT RECORDS       */
43 #define INIT_WSIZE    4                 /* SIZE IN BYTES OF INIT DATA ITEMS */
46 /*---------------------------------------------------------------------------*/
47 /* THIS MACRO IS USED TO FACILIATE ACCESS TO THE SECTION HEADERS             */
48 /*---------------------------------------------------------------------------*/
49 #define SECT_HDR(i) ((SCNHDR *)(sect_hdrs + (i) * SCNHSZ))
51 /*---------------------------------------------------------------------------*/
52 /* THIS MACRO IS USED TO FACILITATE BACKWARDS COMPATIBILITY FOR COFF-        */
53 /* DEPENDENT TOOLS THAT SUPPORT COFF VERSION 2.                              */
54 /*---------------------------------------------------------------------------*/
55 #define O_SECT_HDR(i) ((O_SCNHDR *)(o_sect_hdrs + (i)*SCNHSZ_IN(coff_version)))
57 /*----------------------------------------------------------------------------*/
58 /* STATIC COPY OF 8 CHARACTER SECTION NAME, GUARANTEED NULL TERMINATION WHEN  */
59 /* USED AS A STRING.                                                          */
60 /*----------------------------------------------------------------------------*/
61 static char stat_nm[SYMNMLEN+1]={'\0','\0','\0','\0','\0','\0','\0','\0','\0'};
62 #define SNAMECPY(s)     (strncpy(stat_nm, (s), SYMNMLEN))
64 /*---------------------------------------------------------------------------*/
65 /* THESE MACROS ARE USED TO FIND CINIT AND BSS SECTIONS                      */
66 /*---------------------------------------------------------------------------*/
67 #define IS_BSS(sptr)    (!str_comp(sptr->s_name, ".bss"))
68 #define IS_CINIT(sptr)  ((sptr->s_flags & STYP_COPY) &&         \
69                         !str_comp(sptr->s_name, CINIT) )
71 /*---------------------------------------------------------------------------*/
72 /* VARIABLES SET BY THE APPLICATION.                                         */
73 /*---------------------------------------------------------------------------*/
74 #define FILE_BASED 0
75 #define STRIP_RELOC 1
76 #define REMOVE_MALLOC 0
78 #if (FILE_BASED)
79 FILE   *fin;                                                    /* INPUT FILE                         */
80 #else
81 /* extern unsigned char gRxBuffer[0x400040]; */
82 extern unsigned char gRxBuffer[0x10];
83 #endif
85 extern int     need_data;            /* READ IN RAW DATA                     */
86 extern int     need_symbols;         /* READ IN SYMBOL TABLE                 */
87 extern int     clear_bss;            /* CLEAR BSS SECTION                    */
88 extern int     big_e_config;         /* ENDIANNESS CONFIGURATION OF TARGET   */
89 #if TMS320C60 || RTC
90 extern int    fill_bss_value;       /* NUMBER FOR FILL VALUE                */
91 #endif
93 /*---------------------------------------------------------------------------*/
94 /* VARIABLES SET BY THE LOADER.                                              */
95 /*---------------------------------------------------------------------------*/
96 extern FILHDR  file_hdr;             /* FILE HEADER STRUCTURE                */
97 extern int     coff_version;         /* VERSION OF COFF USED BY FILE         */
98 extern AOUTHDR o_filehdr;            /* OPTIONAL (A.OUT) FILE HEADER         */
99 extern T_ADDR  entry_point;          /* ENTRY POINT OF MODULE                */
100 extern T_ADDR *reloc_amount;         /* AMOUNT OF RELOCATION PER SECTION     */
101 extern SCNHDR  sect_hdrs[];          /* Array of loadable sections */
102 extern O_SCNHDR o_sect_hdr;          /* A single old section header */
103 extern int     n_sections;           /* NUMBER OF SECTIONS IN THE FILE       */
104 extern int     big_e_target;         /* OBJECT DATA IS STORED MSB FIRST      */
105 extern int     byte_swapped;         /* BYTE ORDERING OPPOSITE OF HOST       */
106 extern int     curr_sect;            /* INDEX OF SECTION CURRENTLY LOADING   */
107 extern int     load_err;             /* ERROR CODE RETURNED IF LOADER FAILS  */
108 extern struct strtab *str_head;      /* HEAD OF STRING BUFFER LIST           */
110 /*--------------------------------------------------------------------------*/
111 /*                        CLOAD.C PROTOTYPES                                */
112 /*--------------------------------------------------------------------------*/
113 extern int  cload(BOOT_MODULE_FXN_TABLE *bootFxn, Uint32 *ientry_point);
114 extern int  cload_headers(BOOT_MODULE_FXN_TABLE *bootFxn, Uint32 *ientry_point);
115 extern int  cload_data(BOOT_MODULE_FXN_TABLE *bootFxn);
116 extern int  cload_sect_data(SCNHDR *sptr, BOOT_MODULE_FXN_TABLE *bootFxn);
117 extern int      cload_cinit (unsigned char *, int *, int *);
118 extern int      cload_symbols (void);
119 extern int      cload_strings (void);
120 extern void     str_free (struct strtab *);
121 extern int      sym_read (int, struct syment *, union auxent *);
122 extern char    *sym_name (struct syment *);
123 extern char    *sym_add_name (struct syment *);
124 extern int      reloc_add (int, struct syment *);
125 extern int      relocate (RELOC *, unsigned char *, int);
126 extern int      reloc_read (RELOC *, unsigned int offset);
127 extern int      reloc_size (int);
128 extern int      reloc_offset (int);
129 extern int      reloc_stop (int);
130 extern int      sym_reloc_amount (RELOC *);
131 extern unsigned int unpack (unsigned char *, int, int, int);
132 extern void     repack (unsigned int, unsigned char *, int,int,int);
133 extern int      cload_lineno (int, int, struct lineno *, int);
134 extern void     swap4byte (void *);
135 extern void     swap2byte (void *);
137 /*--------------------------------------------------------------------------*/
138 /*             PROTOTYPES FOR FUNCTIONS REQUIRED BY CLOAD.C                 */
139 /*--------------------------------------------------------------------------*/
140 extern void     lookup_sym(int indx, SYMENT *sym, AUXENT *aux);
141 extern int      mem_write(unsigned char *, unsigned int, T_ADDR, unsigned char);
142 extern void     load_msg(const char *);
143 extern int      set_reloc_amount(void);
144 extern int      load_syms(int);
146 /*---------------------------------------------------------------------------*/
147 /* VALUE OF big_e_config IF THERE IS NO TARGET AND SO IT'S A DON'T CARE.     */
148 /*---------------------------------------------------------------------------*/
149 #define DONTCARE    -1
151 /*---------------------------------------------------------------------------*/
152 /* ERROR CODES                                                               */
153 /*---------------------------------------------------------------------------*/
154 #define E_FILE      1                /* ERROR READING COFF FILE              */
155 #define E_MAGIC     2                /* WRONG MAGIC NUMBER                   */
156 #define E_RELOC     3                /* FILE IS NOT RELOCATABLE              */
157 #define E_SYM       4                /* LOAD_SYM RETURNED FALSE              */
158 #define E_ALLOC     5                /* MYALLOC OR MRALLOC RETURNED FALSE    */
159 #define E_SETRELOC  6                /* SET_RELOC_AMOUNT RETURNED FALSE      */
160 #define E_MEMWRITE  7                /* MEM_WRITE RETURNED FALSE             */
161 #define E_RELOCENT  8                /* RELOC ENTRY RULES VIOLATED           */
162 #define E_ENDIAN    9                /* OBJ ENDIANESS CONFLICTS WITH TARGET  */
164 #endif /* _CLOAD_H_  */