104542f93bec8539577e4f5d66b1121e6721a4c0
[keystone-rtos/ibl.git] / src / interp / coff / cload.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 /*---------------------------------------------------------------------------*/
13 /* THIS MACRO IS USED TO FACILIATE ACCESS TO THE SECTION HEADERS             */
14 /*---------------------------------------------------------------------------*/
15 #define SECT_HDR(i) ((SCNHDR *)(sect_hdrs + (i) * SCNHSZ))
17 /*---------------------------------------------------------------------------*/
18 /* THIS MACRO IS USED TO FACILITATE BACKWARDS COMPATIBILITY FOR COFF-        */
19 /* DEPENDENT TOOLS THAT SUPPORT COFF VERSION 2.                              */
20 /*---------------------------------------------------------------------------*/
21 #define O_SECT_HDR(i) ((O_SCNHDR *)(o_sect_hdrs + (i)*SCNHSZ_IN(coff_version)))
23 /*----------------------------------------------------------------------------*/
24 /* STATIC COPY OF 8 CHARACTER SECTION NAME, GUARANTEED NULL TERMINATION WHEN  */
25 /* USED AS A STRING.                                                          */
26 /*----------------------------------------------------------------------------*/
27 static char stat_nm[SYMNMLEN+1]={'\0','\0','\0','\0','\0','\0','\0','\0','\0'};
28 #define SNAMECPY(s)     (strn_copy(stat_nm, (s), SYMNMLEN))
30 /*---------------------------------------------------------------------------*/
31 /* THESE MACROS ARE USED TO FIND CINIT AND BSS SECTIONS                      */
32 /*---------------------------------------------------------------------------*/
33 #define IS_BSS(sptr)    (!str_comp(sptr->s_name, ".bss"))
34 #define IS_CINIT(sptr)  ((sptr->s_flags & STYP_COPY) &&         \
35                         !str_comp(sptr->s_name, CINIT) )
37 /*---------------------------------------------------------------------------*/
38 /* VARIABLES SET BY THE APPLICATION.                                         */
39 /*---------------------------------------------------------------------------*/
40 /* #define FILE_BASED 0   - moved to osal.h */
41 #define STRIP_RELOC 1
42 #define REMOVE_MALLOC 0
44 #if (FILE_BASED)
45 extern FILE   *fin;                                             /* INPUT FILE                         */
46 #else
47 extern unsigned char gRxBuffer[0x400040];
48 #endif
50 extern int     need_data;            /* READ IN RAW DATA                     */
51 extern int     need_symbols;         /* READ IN SYMBOL TABLE                 */
52 extern int     clear_bss;            /* CLEAR BSS SECTION                    */
53 extern int     big_e_config;         /* ENDIANNESS CONFIGURATION OF TARGET   */
54 #if TMS320C60 || RTC
55 extern int    fill_bss_value;       /* NUMBER FOR FILL VALUE                */
56 #endif
58 /*---------------------------------------------------------------------------*/
59 /* VARIABLES SET BY THE LOADER.                                              */
60 /*---------------------------------------------------------------------------*/
61 extern FILHDR  file_hdr;             /* FILE HEADER STRUCTURE                */
62 extern int     coff_version;         /* VERSION OF COFF USED BY FILE         */
63 extern AOUTHDR o_filehdr;            /* OPTIONAL (A.OUT) FILE HEADER         */
64 extern T_ADDR  entry_point;          /* ENTRY POINT OF MODULE                */
65 extern T_ADDR *reloc_amount;         /* AMOUNT OF RELOCATION PER SECTION     */
66 extern char   *sect_hdrs;            /* ARRAY OF SECTION HEADERS             */
67 extern char   *o_sect_hdrs;          /* ARRAY OF OLD COFF SECTION HEADERS    */
68 extern int     n_sections;           /* NUMBER OF SECTIONS IN THE FILE       */
69 extern int     big_e_target;         /* OBJECT DATA IS STORED MSB FIRST      */
70 extern int     byte_swapped;         /* BYTE ORDERING OPPOSITE OF HOST       */
71 extern int     curr_sect;            /* INDEX OF SECTION CURRENTLY LOADING   */
72 extern int     load_err;             /* ERROR CODE RETURNED IF LOADER FAILS  */
73 extern struct strtab *str_head;      /* HEAD OF STRING BUFFER LIST           */
75 /*--------------------------------------------------------------------------*/
76 /*                        CLOAD.C PROTOTYPES                                */
77 /*--------------------------------------------------------------------------*/
78 extern int      cload (void);
79 extern int      cload_headers (void);
80 extern int      cload_data (void);
81 extern int      cload_sect_data (struct scnhdr *);
82 extern int      cload_cinit (unsigned char *, int *, int *);
83 extern int      cload_symbols (void);
84 extern int      cload_strings (void);
85 extern void     str_free (struct strtab *);
86 extern int      sym_read (int, struct syment *, union auxent *);
87 extern char    *sym_name (struct syment *);
88 extern char    *sym_add_name (struct syment *);
89 extern int      reloc_add (int, struct syment *);
90 extern int      relocate (RELOC *, unsigned char *, int);
91 extern int      reloc_size (int);
92 extern int      reloc_offset (int);
93 extern int      reloc_stop (int);
94 extern int      sym_reloc_amount (RELOC *);
95 extern unsigned int unpack (unsigned char *, int, int, int);
96 extern void     repack (unsigned int, unsigned char *, int,int,int);
97 extern int      cload_lineno (int, int, struct lineno *, int);
98 extern void     swap4byte (void *);
99 extern void     swap2byte (void *);
101 #if FILE_BASED
102 int reloc_read(RELOC *rptr);
103 #else
104 int reloc_read(RELOC *rptr, unsigned int offset);
105 #endif
107 /*--------------------------------------------------------------------------*/
108 /*             PROTOTYPES FOR FUNCTIONS REQUIRED BY CLOAD.C                 */
109 /*--------------------------------------------------------------------------*/
110 extern void     lookup_sym(int indx, SYMENT *sym, AUXENT *aux);
111 /* extern int           mem_write(unsigned char *, unsigned int, T_ADDR, unsigned char); - moved to osal.h */
112 extern void     load_msg(const char *);
113 extern int      set_reloc_amount(void);
114 extern int      load_syms(int);
116 /*---------------------------------------------------------------------------*/
117 /* VALUE OF big_e_config IF THERE IS NO TARGET AND SO IT'S A DON'T CARE.     */
118 /*---------------------------------------------------------------------------*/
119 #define DONTCARE    -1
121 /*---------------------------------------------------------------------------*/
122 /* ERROR CODES                                                               */
123 /*---------------------------------------------------------------------------*/
124 #define E_FILE      1                /* ERROR READING COFF FILE              */
125 #define E_MAGIC     2                /* WRONG MAGIC NUMBER                   */
126 #define E_RELOC     3                /* FILE IS NOT RELOCATABLE              */
127 #define E_SYM       4                /* LOAD_SYM RETURNED FALSE              */
128 #define E_ALLOC     5                /* MYALLOC OR MRALLOC RETURNED FALSE    */
129 #define E_SETRELOC  6                /* SET_RELOC_AMOUNT RETURNED FALSE      */
130 #define E_MEMWRITE  7                /* MEM_WRITE RETURNED FALSE             */
131 #define E_RELOCENT  8                /* RELOC ENTRY RULES VIOLATED           */
132 #define E_ENDIAN    9                /* OBJ ENDIANESS CONFLICTS WITH TARGET  */
134 #endif /* _CLOAD_H_  */