X-Git-Url: https://repo.jachan.dev/binutils.git/blobdiff_plain/a0788ae38fd24e7dd856293ab7f19afae7d3989e..1ee1fd7e971729d7ee055911d42cfc7a45269c48:/include/internalcoff.h diff --git a/include/internalcoff.h b/include/internalcoff.h index 7971008c14..26cd14c340 100755 --- a/include/internalcoff.h +++ b/include/internalcoff.h @@ -1,3 +1,13 @@ +/* Internal format of COFF object file data structures, for GNU BFD. + This file is part of BFD, the Binary File Descriptor library. */ + +/* First, make "signed char" work, even on old compilers. */ +#ifndef signed +#ifndef __STDC__ +#define signed /**/ +#endif +#endif + /********************** FILE HEADER **********************/ struct internal_filehdr { @@ -15,15 +25,23 @@ struct internal_filehdr * F_EXEC file is executable (no unresolved external references) * F_LNNO line numbers stripped from file * F_LSYMS local symbols stripped from file - * F_AR32WR file has byte ordering of an AR32WR machine (e.g. vax) + * F_AR16WR file is 16-bit little-endian + * F_AR32WR file is 32-bit little-endian + * F_AR32W file is 32-bit big-endian + * F_DYNLOAD rs/6000 aix: dynamically loadable w/imports & exports + * F_SHROBJ rs/6000 aix: file is a shared object */ -#define F_RELFLG (0x0001) -#define F_EXEC (0x0002) -#define F_LNNO (0x0004) -#define F_LSYMS (0x0008) -#define F_AR32WR (0x0010) -#define F_AR32W 0x200 +#define F_RELFLG (0x0001) +#define F_EXEC (0x0002) +#define F_LNNO (0x0004) +#define F_LSYMS (0x0008) +#define F_AR16WR (0x0080) +#define F_AR32WR (0x0100) +#define F_AR32W (0x0200) +#define F_DYNLOAD (0x1000) +#define F_SHROBJ (0x2000) + /********************** AOUT "OPTIONAL HEADER" **********************/ struct internal_aouthdr { short magic; /* type of file */ @@ -34,8 +52,23 @@ struct internal_aouthdr { unsigned long entry; /* entry pt. */ unsigned long text_start; /* base of text used for this file */ unsigned long data_start; /* base of data used for this file */ + + /* i960 stuff */ unsigned long tagentries; /* number of tag entries to follow */ -} ; + + /* RS/6000 stuff */ + unsigned long o_toc; /* address of TOC */ + short o_snentry; /* section number for entry point */ + short o_sntext; /* section number for text */ + short o_sndata; /* section number for data */ + short o_sntoc; /* section number for toc */ + short o_snloader; /* section number for loader section */ + short o_snbss; /* section number for bss */ + short o_algntext; /* max alignment for text */ + short o_algndata; /* max alignment for data */ + short o_modtype; /* Module type field, 1R,RE,RO */ + unsigned long o_maxstack; /* max stack size allowed. */ +}; /********************** STORAGE CLASSES **********************/ @@ -82,6 +115,28 @@ struct internal_aouthdr { #define C_PRAGMA 111 /* Advice to compiler or linker */ #define C_SEGMENT 112 /* 80960 segment name */ + /* New storage classes for RS/6000 */ +#define C_HIDEXT 107 /* Un-named external symbol */ +#define C_BINCL 108 /* Marks beginning of include file */ +#define C_EINCL 109 /* Marks ending of include file */ + + /* storage classes for stab symbols for RS/6000 */ +#define C_GSYM ((signed char)0x80) +#define C_LSYM ((signed char)0x81) +#define C_PSYM ((signed char)0x82) +#define C_RSYM ((signed char)0x83) +#define C_RPSYM ((signed char)0x84) +#define C_STSYM ((signed char)0x85) +#define C_TCSYM ((signed char)0x86) +#define C_BCOMM ((signed char)0x87) +#define C_ECOML ((signed char)0x88) +#define C_ECOMM ((signed char)0x89) +#define C_DECL ((signed char)0x8c) +#define C_ENTRY ((signed char)0x8d) +#define C_FUN ((signed char)0x8e) +#define C_BSTAT ((signed char)0x8f) +#define C_ESTAT ((signed char)0x90) + /********************** SECTION HEADER **********************/ struct internal_scnhdr { char s_name[8]; /* section name */ @@ -91,13 +146,8 @@ struct internal_scnhdr { 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 */ -#ifdef M88 - unsigned long s_nreloc; - unsigned long s_nlnno; -#else - unsigned short s_nreloc; /* number of relocation entries */ - unsigned short s_nlnno; /* number of line number entries*/ -#endif + unsigned long s_nreloc; /* number of relocation entries */ + unsigned long s_nlnno; /* number of line number entries*/ long s_flags; /* flags */ #ifdef I960 long s_align; @@ -141,11 +191,7 @@ struct internal_lineno { long l_symndx; /* function name symbol index, iff l_lnno == 0*/ long l_paddr; /* (physical) address of line number */ } l_addr; -#ifdef M88 unsigned long l_lnno; /* line number */ -#else - unsigned short l_lnno; /* line number */ -#endif }; @@ -168,10 +214,7 @@ struct internal_syment { short n_scnum; /* section number */ unsigned short n_flags; /* copy of flags from filhdr */ unsigned short n_type; /* type and derived type */ -#if __STDC__ - signed -#endif - char n_sclass; /* storage class */ + signed char n_sclass; /* storage class */ char n_numaux; /* number of aux. entries */ }; #define n_name _n._n_name @@ -234,6 +277,7 @@ union internal_auxent long l; /* str, un, or enum tag indx */ struct coff_ptr_struct *p; } x_tagndx; + union { struct { unsigned short x_lnno; /* declaration line number */ @@ -241,22 +285,21 @@ union internal_auxent } x_lnsz; long x_fsize; /* size of function */ } x_misc; - union { + union { struct { /* if ISFCN, tag, or .bb */ long x_lnnoptr; /* ptr to fcn line # */ union { /* entry ndx past block end */ long l; struct coff_ptr_struct *p; - } x_endndx; - - } x_fcn; + struct { /* if ISARY, up to 4 dimen. */ unsigned short x_dimen[DIMNUM]; } x_ary; } x_fcnary; + unsigned short x_tvndx; /* tv index */ } x_sym; @@ -278,7 +321,54 @@ union internal_auxent long x_tvfill; /* tv fill value */ unsigned short x_tvlen; /* length of .tv */ unsigned short x_tvran[2]; /* tv range */ - } x_tv; /* info about .tv section (in auxent of symbol .tv)) */ + } x_tv; /* info about .tv section (in auxent of symbol .tv)) */ + + /****************************************** + * RS/6000-specific auxent - last auxent for every external symbol + ******************************************/ + struct { + long x_scnlen; /* csect length */ + long x_parmhash; /* parm type hash index */ + unsigned short x_snhash; /* sect num with parm hash */ + unsigned char x_smtyp; /* symbol align and type */ + /* 0-4 - Log 2 of alignment */ + /* 5-7 - symbol type */ + unsigned char x_smclas; /* storage mapping class */ + long x_stab; /* dbx stab info index */ + unsigned short x_snstab; /* sect num with dbx stab */ + } x_csect; /* csect definition information */ + +/* x_smtyp values: */ + +#define SMTYP_ALIGN(x) ((x) >> 3) /* log2 of alignment */ +#define SMTYP_SMTYP(x) ((x) & 0x7) /* symbol type */ +/* Symbol type values: */ +#define XTY_ER 0 /* External reference */ +#define XTY_SD 1 /* Csect definition */ +#define XTY_LD 2 /* Label definition */ +#define XTY_CM 3 /* .BSS */ +#define XTY_EM 4 /* Error message */ +#define XTY_US 5 /* "Reserved for internal use" */ + +/* x_smclas values: */ + +#define XMC_PR 0 /* Read-only program code */ +#define XMC_RO 1 /* Read-only constant */ +#define XMC_DB 2 /* Read-only debug dictionary table */ +#define XMC_TC 3 /* Read-write general TOC entry */ +#define XMC_UA 4 /* Read-write unclassified */ +#define XMC_RW 5 /* Read-write data */ +#define XMC_GL 6 /* Read-only global linkage */ +#define XMC_XO 7 /* Read-only extended operation (simulated insn) */ +#define XMC_SV 8 /* Read-only supervisor call */ +#define XMC_BS 9 /* Read-write BSS */ +#define XMC_DS 10 /* Read-write descriptor csect */ +#define XMC_UC 11 /* Read-write unnamed Fortran common */ +#define XMC_TI 12 /* Read-only traceback index csect */ +#define XMC_TB 13 /* Read-only traceback table csect */ +/* 14 ??? */ +#define XMC_TC0 15 /* Read-write TOC anchor for TOC addressability */ + /****************************************** * I960-specific *2nd* aux. entry formats @@ -298,18 +388,22 @@ union internal_auxent char x_idstring[20]; /* producer identity string */ } x_ident; /* Producer ident info */ - }; /********************** RELOCATION DIRECTIVES **********************/ -struct internal_reloc { +struct internal_reloc +{ long r_vaddr; /* Virtual address of reference */ long r_symndx; /* Index into symbol table */ unsigned short r_type; /* Relocation type */ -#if M88 - unsigned short r_offset; + +#if RS6000COFF_C + unsigned char r_size; #endif + + unsigned short r_offset; + }; #define R_RELBYTE 017