loadCoffLib.h
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:21k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* loadCoffLib.h - coff object module header */
  2. /* Copyright 1984-1998 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01m,10jul98,cdp  added ARM endian flags.
  7. 01l,24oct97,cdp  added more Thumb relocation types and status code
  8.  S_loadLib_NO_RELOCATION_ROUTINE.
  9. 01k,12jun97,cdp  added ARM R_RELTHUMB23 and Thumb storage classes.
  10.  removed unused RVA32 relocation type.
  11. 01j,28nov96,cdp  added ARM support.
  12. 01i,11mar94,pme  added bootCoffInit() prototype (SPR# 2947).
  13. 01h,09jul93,pme  added Am29K family support.
  14. 01g,22sep92,rrr  added support for c++
  15. 01f,18sep92,jcf  removed nested comment.
  16. 01e,11sep92,ajm  changed OFFSET_MASK to OFFSET24_MASK due to b.out redefines,
  17.  fixed #ifndef define
  18. 01d,29jul92,rrr  removed moduleLib.h if no CPU is defined.
  19. 01c,28jul92,jmm  removed CPU_FAMILY = I960 ifdefs
  20.                  changed return of ldCoffModAtSym to MODULE_ID
  21. 01b,17jul92,rrr  added extern to functions.
  22. 01a,21may92,wmd  received from Intel.
  23. */
  24. #ifndef __INCloadCoffLibh
  25. #define __INCloadCoffLibh
  26. #ifdef __cplusplus
  27. extern "C" {
  28. #endif
  29. #ifdef CPU
  30. #include "symLib.h"
  31. #include "moduleLib.h"
  32. #endif
  33. /******************************************************************************
  34.  *
  35.  * This file describes a COFF object file.
  36.  *
  37.  ******************************************************************************/
  38. #if ((CPU_FAMILY==I960) && (defined __GNUC__))
  39. #pragma align 1 /* tell gcc960 not to optimize alignments */
  40. #endif /* CPU_FAMILY==I960 */
  41. /******************************* FILE HEADER *******************************/
  42. struct filehdr {
  43. unsigned short f_magic; /* magic number */
  44. unsigned short f_nscns; /* number of sections */
  45. long f_timdat; /* time & date stamp */
  46. long f_symptr; /* file pointer to symtab */
  47. long f_nsyms; /* number of symtab entries */
  48. unsigned short f_opthdr; /* sizeof(optional hdr) */
  49. unsigned short f_flags; /* flags */
  50. };
  51. /* Bits for f_flags:
  52.  * F_RELFLG relocation info stripped from file
  53.  * F_EXEC file is executable (no unresolved external references)
  54.  * F_LNNO line numbers stripped from file
  55.  * F_LSYMS local symbols stripped from file
  56.  * F_AR32WR file has byte ordering of an AR32WR machine (e.g. vax)
  57.  * F_PIC file contains position-independent code
  58.  * F_PID file contains position-independent data
  59.  * F_LINKPID file is suitable for linking w/pos-indep code or data
  60.  */
  61. #define F_RELFLG 0x0001
  62. #define F_EXEC 0x0002
  63. #define F_LNNO 0x0004
  64. #define F_LSYMS 0x0008
  65. #if (CPU_FAMILY == ARM)
  66. #define F_AR32WR        0x0100  /* file is 32-bit little-endian */
  67. #define F_AR32W         0x0200  /* file is 32-bit big-endian */
  68. #else
  69. #define F_AR32WR 0x0010
  70. #endif
  71. #define F_PIC 0x0040
  72. #define F_PID 0x0080
  73. #define F_LINKPID 0x0100
  74. #define F_CCINFO 0x0800
  75. /* FOR GNU/960 VERSION ONLY!
  76.  *
  77.  * Set only if cc_info data (for 2-pass compiler optimization) is
  78.  * appended to the end of the object file.
  79.  *
  80.  * Since cc_info data is removed when a file is stripped, we can assume
  81.  * that its presence implies the presence of a symbol table in the file,
  82.  * with the cc_info block immediately following.
  83.  *
  84.  * A COFF symbol table does not necessarily require a string table.
  85.  * When cc_info is present we separate it from the symbol info with a
  86.  * delimiter word of 0xfffffff, which simplifies testing for presence
  87.  * of a string table:  if the word following the symbol table is not
  88.  * 0xffffffff, it is the string table length; the string table must be
  89.  * skipped over before the delimiter (and cc_info) can be read.
  90.  *
  91.  * The format/meaning of the cc_data block are known only to the
  92.  * compiler (and, to a lesser extent, the linker) except for the first
  93.  * 4 bytes, which contain the length of the block (including those 4
  94.  * bytes).  This length is stored in a machine-independent format, and
  95.  * can be retrieved with the CI_U32_FM_BUF macro in cc_info.h .
  96.  */
  97. /* Intel 80960 (I960) processor flags.
  98.  * F_I960TYPE == mask for processor type field.
  99.  */
  100. #define F_I960TYPE 0xf000
  101. #define F_I960CORE 0x1000
  102. #define F_I960KB 0x2000
  103. #define F_I960SB 0x2000
  104. #define F_I960MC 0x3000
  105. #define F_I960XA 0x4000
  106. #define F_I960CA 0x5000
  107. #define F_I960KA 0x6000
  108. #define F_I960SA 0x6000
  109. /*
  110.  * i80960 Magic Numbers
  111.  */
  112. #define I960ROMAGIC 0x160 /* read-only text segments */
  113. #define I960RWMAGIC 0x161 /* read-write text segments */
  114. #define I960BADMAG(x) (((x).f_magic!=I960ROMAGIC) && ((x).f_magic!=I960RWMAGIC))
  115. /*
  116.  * Am29K Magic Numbers
  117.  */
  118. #define AM29KBIGMAGIC 0572 /* Am29K big endian */
  119. #define AM29KLITTLEMAGIC 0573 /* Am29K little endian */
  120. #define AM29KBADMAG(x)   (((x).f_magic!=AM29KBIGMAGIC) && 
  121.   ((x).f_magic!=AM29KLITTLEMAGIC))
  122. /*
  123.  * ARM Magic Number
  124.  */
  125. #define ARMMAGIC 0xa00
  126. #define FILHDR struct filehdr
  127. #define FILHSZ sizeof(FILHDR)
  128. #undef  N_TXTOFF                /* undefined for a.out overlap */
  129. #define N_TXTOFF(f) 
  130.     ((f).f_opthdr == 0) ? 
  131.     (FILHSZ + (f).f_nscns * SCNHSZ ) : 
  132.     (FILHSZ + AOUTSZ + (f).f_nscns * SCNHSZ )
  133. /************************* AOUT "OPTIONAL HEADER" *************************/
  134. #define OMAGIC 0407
  135. #define NMAGIC 0410
  136. typedef struct aouthdr {
  137. short magic; /* type of file */
  138. short vstamp; /* version stamp */
  139. unsigned long tsize; /* text size in bytes, padded to FW bdry*/
  140. unsigned long dsize; /* initialized data "  " */
  141. unsigned long bsize; /* uninitialized data "   " */
  142. unsigned long entry; /* entry pt. */
  143. unsigned long text_start; /* base of text used for this file */
  144. unsigned long data_start; /* base of data used for this file */
  145. #if (CPU_FAMILY == I960)
  146. unsigned long tagentries; /* number of tag entries to follow */
  147. /* ALWAYS 0 FOR 960           */
  148. #endif /* (CPU_FAMILY == I960) */
  149. } AOUTHDR;
  150. #define AOUTSZ (sizeof(AOUTHDR))
  151. /****************************** SECTION HEADER ******************************/
  152. struct scnhdr {
  153. char s_name[8]; /* section name */
  154. long s_paddr; /* physical address, aliased s_nlib */
  155. long s_vaddr; /* virtual address */
  156. long s_size; /* section size */
  157. long s_scnptr; /* file ptr to raw data for section */
  158. long s_relptr; /* file ptr to relocation */
  159. long s_lnnoptr; /* file ptr to line numbers */
  160. unsigned short s_nreloc; /* number of relocation entries */
  161. unsigned short s_nlnno; /* number of line number entries*/
  162. long s_flags; /* flags */
  163. #if (CPU_FAMILY == I960)
  164. unsigned long s_align; /* section alignment */
  165. #endif /* (CPU_FAMILY == I960) */
  166. };
  167. /*
  168.  * names of "special" sections
  169.  */
  170. #define _TEXT ".text"
  171. #define _DATA ".data"
  172. #define _BSS ".bss"
  173. /*
  174.  * s_flags "type"
  175.  */
  176. /* TYPE    ALLOCATED? RELOCATED? LOADED? */
  177. /* ----    ---------- ---------- ------- */
  178. #define STYP_REG 0x0000 /* regular    yes        yes       yes   */
  179. #define STYP_DSECT 0x0001 /* dummy      no         yes       no    */
  180. #define STYP_NOLOAD 0x0002 /* noload     yes        yes       no    */
  181. #define STYP_GROUP 0x0004 /* grouped  <formed from input sections> */
  182. #define STYP_PAD 0x0008 /* padding    no         no        yes   */
  183. #define STYP_COPY 0x0010 /* copy       no         no        yes   */
  184. #define STYP_INFO 0x0200 /* comment    no         no        no    */
  185. #define STYP_TEXT 0x0020 /* section contains text */
  186. #define STYP_DATA 0x0040 /* section contains data */
  187. #define STYP_BSS 0x0080 /* section contains bss  */
  188. #define STYP_LIT 0x8000 /* section contains literal */
  189. /*
  190.  * additional section type for global registers which will 
  191.  * be relocatable for the Am29K.
  192.  */
  193. #define STYP_BSSREG     0x1200  /* Global register area (like STYP_INFO) */
  194. #define STYP_ENVIR      0x2200  /* Environment (like STYP_INFO) */
  195. #define STYP_ABS        0x4000  /* Absolute (allocated, not reloc, loaded) */
  196. #define SCNHDR struct scnhdr
  197. #define SCNHSZ sizeof(SCNHDR)
  198. /******************************* LINE NUMBERS *******************************/
  199. /* 1 line number entry for every "breakpointable" source line in a section.
  200.  * Line numbers are grouped on a per function basis; first entry in a function
  201.  * grouping will have l_lnno = 0 and in place of physical address will be the
  202.  * symbol table index of the function name.
  203.  */
  204. struct lineno{
  205. union {
  206. long l_symndx; /* function name symbol index, iff l_lnno == 0*/
  207. long l_paddr; /* (physical) address of line number */
  208. } l_addr;
  209. unsigned short l_lnno; /* line number */
  210. char padding[2]; /* force alignment */
  211. };
  212. #define LINENO struct lineno
  213. #define LINESZ sizeof(LINENO)
  214. /********************************** SYMBOLS **********************************/
  215. #define SYMNMLEN 8 /* # characters in a symbol name */
  216. #define FILNMLEN 14 /* # characters in a file name */
  217. #define DIMNUM 4 /* # array dimensions in auxiliary entry */
  218. #if (CPU_FAMILY == I960)
  219. struct syment {
  220. union {
  221. char _n_name[SYMNMLEN]; /* old COFF version */
  222. struct {
  223. long _n_zeroes; /* new == 0 */
  224. long _n_offset; /* offset into string table */
  225. } _n_n;
  226. char *_n_nptr[2]; /* allows for overlaying */
  227. } _n;
  228. long n_value; /* value of symbol */
  229. short n_scnum; /* section number */
  230. unsigned short n_flags; /* copy of flags from filhdr */
  231. unsigned long n_type; /* type and derived type */
  232. char n_sclass; /* storage class */
  233. char n_numaux; /* number of aux. entries */
  234. char pad2[2]; /* force alignment */
  235. };
  236. #define SYMENT struct syment
  237. #define SYMESZ sizeof(SYMENT)
  238. #else /* (CPU_FAMILY == I960) */
  239. struct syment {
  240. union {
  241. char _n_name[SYMNMLEN]; /* old COFF version */
  242. struct {
  243. long _n_zeroes; /* new == 0 */
  244. long _n_offset; /* offset into string table */
  245. } _n_n;
  246. char *_n_nptr[2]; /* allows for overlaying */
  247. } _n;
  248. long n_value; /* value of symbol */
  249. short n_scnum; /* section number */
  250. unsigned short n_type; /* type and derived type */
  251. char n_sclass; /* storage class */
  252. char n_numaux; /* number of aux. entries */
  253. };
  254. #define SYMENT struct syment
  255. #define SYMESZ  sizeof(SYMENT) /* don't use sizeof since some compilers */
  256. /* may add padding in the structure      */
  257. #endif /* (CPU_FAMILY == I960) */
  258. #define n_name _n._n_name
  259. #define n_ptr _n._n_nptr[1]
  260. #define n_zeroes _n._n_n._n_zeroes
  261. #define n_offset _n._n_n._n_offset
  262. /*
  263.  * Relocatable symbols have number of the section in which they are defined,
  264.  * or one of the following:
  265.  */
  266. #define N_UNDEF ((short)0)  /* undefined symbol */
  267. #define N_ABS   ((short)-1) /* value of symbol is absolute */
  268. #define N_DEBUG ((short)-2) /* debugging symbol -- value is meaningless */
  269. #define N_TV    ((short)-3) /* indicates symbol needs preload transfer vector */
  270. #define P_TV    ((short)-4) /* indicates symbol needs postload transfer vector*/
  271. /*
  272.  * Symbol storage classes
  273.  */
  274. #define C_EFCN -1 /* physical end of function */
  275. #define C_NULL 0
  276. #define C_AUTO 1 /* automatic variable */
  277. #define C_EXT 2 /* external symbol */
  278. #define C_STAT 3 /* static */
  279. #define C_REG 4 /* register variable */
  280. #define C_EXTDEF 5 /* external definition */
  281. #define C_LABEL 6 /* label */
  282. #define C_ULABEL 7 /* undefined label */
  283. #define C_MOS 8 /* member of structure */
  284. #define C_ARG 9 /* function argument */
  285. #define C_STRTAG 10 /* structure tag */
  286. #define C_MOU 11 /* member of union */
  287. #define C_UNTAG 12 /* union tag */
  288. #define C_TPDEF 13 /* type definition */
  289. #define C_USTATIC 14 /* undefined static */
  290. #define C_ENTAG 15 /* enumeration tag */
  291. #define C_MOE 16 /* member of enumeration */
  292. #define C_REGPARM 17 /* register parameter */
  293. #define C_FIELD 18 /* bit field */
  294. #if (CPU_FAMILY == AM29XXX)
  295. #define C_GLBLREG       19 /* global register */
  296. #define C_EXTREG        20 /* external global register */
  297. #define C_DEFREG        21 /* ext. def. of global register */
  298. #else /* (CPU_FAMILY == AM29XXX) */
  299. #define C_AUTOARG 19 /* auto argument */
  300. #endif /* (CPU_FAMILY == AM29XXX) */
  301. #define C_BLOCK 100 /* ".bb" or ".eb" */
  302. #define C_FCN 101 /* ".bf" or ".ef" */
  303. #define C_EOS 102 /* end of structure */
  304. #define C_FILE 103 /* file name */
  305. #define C_LINE 104 /* line # reformatted as symbol table entry */
  306. #define C_ALIAS   105 /* duplicate tag */
  307. #define C_HIDDEN 106 /* ext symbol in dmert public lib */
  308. #define C_SCALL 107 /* Procedure reachable via system call */
  309. #define C_LEAFEXT 108 /* Global leaf procedure, "call" via BAL */
  310. #define C_LEAFSTAT 113 /* Static leaf procedure, "call" via BAL */
  311. #if (CPU_FAMILY == ARM)
  312. #define C_THUMBEXT (128 | C_EXT)
  313. #define C_THUMBSTAT (128 | C_STAT)
  314. #define C_THUMBLABEL (128 | C_LABEL)
  315. #define C_THUMBEXTFUNC  (C_THUMBEXT + 20)
  316. #define C_THUMBSTATFUNC (C_THUMBSTAT + 20)
  317. #endif
  318. /*
  319.  * Type of a symbol, in low 5 bits of n_type
  320.  */
  321. #define T_NULL 0
  322. #define T_VOID 1 /* function argument (only used by compiler) */
  323. #define T_CHAR 2 /* character */
  324. #define T_SHORT 3 /* short integer */
  325. #define T_INT 4 /* integer */
  326. #define T_LONG 5 /* long integer */
  327. #define T_FLOAT 6 /* floating point */
  328. #define T_DOUBLE 7 /* double word */
  329. #define T_STRUCT 8 /* structure  */
  330. #define T_UNION 9 /* union  */
  331. #define T_ENUM 10 /* enumeration  */
  332. #define T_MOE 11 /* member of enumeration*/
  333. #define T_UCHAR 12 /* unsigned character */
  334. #define T_USHORT 13 /* unsigned short */
  335. #define T_UINT 14 /* unsigned integer */
  336. #define T_ULONG 15 /* unsigned long */
  337. #define T_LNGDBL 16 /* long double */
  338. /*
  339.  * derived types, in n_type
  340.  */
  341. #define DT_NON 0 /* no derived type */
  342. #define DT_PTR 1 /* pointer */
  343. #define DT_FCN 2 /* function */
  344. #define DT_ARY 3 /* array */
  345. #if (CPU_FAMILY == AM29XXX) || (CPU_FAMILY == ARM)
  346. #define N_BTMASK        0xf
  347. #define N_TMASK         0x30
  348. #define N_BTSHFT        4
  349. #define N_TSHIFT        2
  350. #else /* (CPU_FAMILY == AM29XXX) */
  351. #define N_BTMASK 0x1f
  352. #define N_TMASK 0x60
  353. #define N_BTSHFT 5
  354. #define N_TSHIFT 2
  355. #endif /* (CPU_FAMILY == AM29XXX) */
  356. #define BTYPE(x) ((x) & N_BTMASK)
  357. #define ISPTR(x) (((x) & N_TMASK) == (DT_PTR << N_BTSHFT))
  358. #define ISFCN(x) (((x) & N_TMASK) == (DT_FCN << N_BTSHFT))
  359. #define ISARY(x) (((x) & N_TMASK) == (DT_ARY << N_BTSHFT))
  360. #define ISTAG(x) ((x)==C_STRTAG||(x)==C_UNTAG||(x)==C_ENTAG)
  361. #define DECREF(x) ((((x)>>N_TSHIFT)&~N_BTMASK)|((x)&N_BTMASK))
  362. union auxent {
  363. struct {
  364. long x_tagndx; /* str, un, or enum tag indx */
  365. union {
  366. struct {
  367.     unsigned short x_lnno; /* declaration line number */
  368.     unsigned short x_size; /* str/union/array size */
  369. } x_lnsz;
  370. long x_fsize; /* size of function */
  371. } x_misc;
  372. union {
  373. struct { /* if ISFCN, tag, or .bb */
  374.     long x_lnnoptr; /* ptr to fcn line # */
  375.     long x_endndx; /* entry ndx past block end */
  376. } x_fcn;
  377. struct { /* if ISARY, up to 4 dimen. */
  378.     unsigned short x_dimen[DIMNUM];
  379. } x_ary;
  380. } x_fcnary;
  381. unsigned short x_tvndx; /* tv index */
  382. } x_sym;
  383. union {
  384. char x_fname[FILNMLEN];
  385. struct {
  386. long x_zeroes;
  387. long x_offset;
  388. } x_n;
  389. } x_file;
  390. struct {
  391. long x_scnlen; /* section length */
  392. unsigned short x_nreloc; /* # relocation entries */
  393. unsigned short x_nlinno; /* # line numbers */
  394. } x_scn;
  395. struct {
  396. long x_tvfill; /* tv fill value */
  397. unsigned short x_tvlen; /* length of .tv */
  398. unsigned short x_tvran[2]; /* tv range */
  399. } x_tv; /* info about .tv section (in auxent of symbol .tv)) */
  400. #if (CPU_FAMILY == I960)
  401. /******************************************
  402.  *  I960-specific *2nd* aux. entry formats
  403.  ******************************************/
  404. struct {
  405. long x_stindx; /* sys. table entry */
  406. } x_sc; /* system call entry */
  407. struct {
  408. unsigned long x_balntry; /* BAL entry point */
  409. } x_bal;                         /* BAL-callable function */
  410. struct {
  411. unsigned long x_timestamp; /* time stamp */
  412. char  x_idstring[20];         /* producer identity string */
  413. } x_ident; /* Producer ident info */
  414. char a[sizeof(struct syment)]; /* force auxent/syment sizes to match */
  415. #endif /* (CPU_FAMILY == I960) */
  416. };
  417. #define AUXENT union auxent
  418. #define AUXESZ sizeof(AUXENT)
  419. #define _ETEXT "_etext"
  420. /********************** RELOCATION DIRECTIVES **********************/
  421. struct reloc {
  422. long r_vaddr; /* Virtual address of reference */
  423. long r_symndx; /* Index into symbol table */
  424. unsigned short r_type; /* Relocation type */
  425. #if (CPU_FAMILY == I960)
  426. char pad[2]; /* Unused */
  427. #elif (CPU_FAMILY == ARM)
  428. char pad[4]; /* Unused  */
  429. #endif
  430. };
  431. /* Only values of r_type GNU/960 cares about */
  432. #define R_RELLONG 17 /* Direct 32-bit relocation */
  433. #define R_IPRMED 25 /* 24-bit ip-relative relocation */
  434. #define R_OPTCALL 27 /* 32-bit optimizable call (leafproc/sysproc) */
  435. #define R_OPTCALLX 28 /* 64-bit optimizable call (leafproc/sysproc) */
  436. /* Only values of r_type GNU/29k cares about */
  437. #define R_ABS           0       /* reference is absolute */
  438. #define R_IREL          030     /* instruction relative (jmp/call) */
  439. #define R_IABS          031     /* instruction absolute (jmp/call) */
  440. #define R_ILOHALF       032     /* instruction low half  (const)  */
  441. #define R_IHIHALF       033     /* instruction high half (consth) part 1 */
  442. #define R_IHCONST       034     /* instruction high half (consth) part 2 */
  443. /* constant offset of R_IHIHALF relocation */
  444. #define R_BYTE          035     /* relocatable byte value */
  445. #define R_HWORD         036     /* relocatable halfword value */
  446. #define R_WORD          037     /* relocatable word value */
  447. #define R_IGLBLRC       040     /* instruction global register RC */
  448. #define R_IGLBLRA       041     /* instruction global register RA */
  449. #define R_IGLBLRB       042     /* instruction global register RB */
  450. /* values of r_type for GNU/ARM */
  451. #define R_RELBYTE       0x00    /* byte relative */
  452. #define R_RELWORD       0x01    /* word relative */
  453. #define R_RELARMLONG    0x02    /* long relative */
  454. #define R_RELARM26      0x03    /* 26-bit relative */
  455. #define R_DONEARM26     0x07    /* already allocated */
  456. #define R_RELTHUMB9 0x0c /*  9 bit PC-relative */
  457. #define R_RELTHUMB12 0x0d /* 12 bit PC-relative */
  458. #define R_RELTHUMB23 0x0e /* 23 bit PC-relative */
  459. #define R_DONETHUMB23 0x0f /* Completed 23 bit PC-relative */
  460. #define RELOC struct reloc
  461. #define RELSZ sizeof(RELOC)
  462. #define SYMS_ABSOLUTE 2 /* to flag absolute symbols */
  463. #define BAL_ENTRY 0x10 /* I80960 BAL entry point to function */
  464. #define OFFSET24_MASK 0x00ffffff /* mask for 24bit offsets */
  465. #define BAL_OPCODE 0x0b000000 /* opcode for branch and link */
  466. #define BALXG14_OPCODE  0x85f03000      /* opcode for balx absolute addr, g14 */
  467. #define CALL_OPCODE 0x09000000 /* opcode for call instruction */
  468. #define B_OPCODE 0x08000000 /* opcode for branch instruction */
  469. #define CALLS_OPCODE    0x66000000      /* opcode for calls instruction */
  470. /* 29K instructions */
  471. #define ASSERT_OPCODE 0x50000000 /* opcode for assert except eq, neq */
  472. #define ASEQ_OPCODE 0x70000000 /* opcode for assert eq */
  473. #define ASNEQ_OPCODE 0x72000000 /* opcode for assert neq */
  474. #define EMULATE_OPCODE 0xd7000000 /* opcode for emulate */
  475. #define REG_MASK 0xff /* register bits in opcode */
  476. #define REG_A_OFFSET 8 /* offset for register A in opcode */
  477. #define REG_B_OFFSET 0 /* offset for register B in opcode */
  478. #define REG_C_OFFSET 16 /* offset for register C in opcode */
  479. /* status codes */
  480. #define S_loadLib_FILE_READ_ERROR               (M_loadCoffLib | 1)
  481. #define S_loadLib_REALLOC_ERROR                 (M_loadCoffLib | 2)
  482. #define S_loadLib_JMPADDR_ERROR                 (M_loadCoffLib | 3)
  483. #define S_loadLib_NO_REFLO_PAIR                 (M_loadCoffLib | 4)
  484. #define S_loadLib_GPREL_REFERENCE               (M_loadCoffLib | 5)
  485. #define S_loadLib_UNRECOGNIZED_RELOCENTRY       (M_loadCoffLib | 6)
  486. #define S_loadLib_REFHALF_OVFL                  (M_loadCoffLib | 7)
  487. #define S_loadLib_FILE_ENDIAN_ERROR             (M_loadCoffLib | 8)
  488. #define S_loadLib_UNEXPECTED_SYM_CLASS          (M_loadCoffLib | 9)
  489. #define S_loadLib_UNRECOGNIZED_SYM_CLASS        (M_loadCoffLib | 10)
  490. #define S_loadLib_HDR_READ                      (M_loadCoffLib | 11)
  491. #define S_loadLib_OPTHDR_READ                   (M_loadCoffLib | 12)
  492. #define S_loadLib_SCNHDR_READ                   (M_loadCoffLib | 13)
  493. #define S_loadLib_READ_SECTIONS                 (M_loadCoffLib | 14)
  494. #define S_loadLib_LOAD_SECTIONS                 (M_loadCoffLib | 15)
  495. #define S_loadLib_RELOC_READ                    (M_loadCoffLib | 16)
  496. #define S_loadLib_SYMHDR_READ                   (M_loadCoffLib | 17)
  497. #define S_loadLib_EXTSTR_READ                   (M_loadCoffLib | 18)
  498. #define S_loadLib_EXTSYM_READ                   (M_loadCoffLib | 19)
  499. #define S_loadLib_NO_RELOCATION_ROUTINE (M_loadCoffLib | 20)
  500. /* function declarations */
  501. #ifdef CPU
  502. #if defined(__STDC__) || defined(__cplusplus)
  503. extern STATUS    loadCoffInit ();
  504. extern STATUS    bootCoffInit ();
  505. extern MODULE_ID ldCoffModAtSym (int fd, int symFlag, char **ppText,
  506.  char **ppData, char **ppBss, SYMTAB_ID symTbl);
  507. #else   /* __STDC__ */
  508. extern STATUS    loadCoffInit ();
  509. extern STATUS    bootCoffInit ();
  510. extern MODULE_ID ldCoffModAtSym ();
  511. #endif  /* __STDC__ */
  512. #endif
  513. #if ((CPU_FAMILY==I960) && (defined __GNUC__))
  514. #pragma align 0 /* turn off alignment requirement */
  515. #endif /* CPU_FAMILY==I960 */
  516. #ifdef __cplusplus
  517. }
  518. #endif
  519. #endif /* __INCloadCoffLibh */