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_ */