]> Git Repo - binutils.git/blobdiff - include/internalcoff.h
Initial revision
[binutils.git] / include / internalcoff.h
index 1cfd0d4a012184b3a494d3cf4d3a435102492081..26cd14c340f0819c05e7f32e32cd74a7cfc3c6e4 100755 (executable)
@@ -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,12 +214,13 @@ 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
+#define n_zeroes       _n._n_n._n_zeroes
+#define n_offset       _n._n_n._n_offset
+
 
 /* Relocatable symbols have number of the section in which they are defined,
    or one of the following: */
@@ -225,6 +272,7 @@ struct internal_syment {
 union internal_auxent 
 {
   struct {
+
     union {
       long l;                  /* str, un, or enum tag indx */
       struct coff_ptr_struct *p;
@@ -237,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;
 
@@ -274,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
@@ -294,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
@@ -338,3 +436,4 @@ struct internal_reloc {
 #define R_GETSEG       (0x1d)
 #define R_GETPA                (0x1e)
 #define R_TAGWORD      (0x1f)
+#define R_JUMPTARG     0x20    /* strange 29k 00xx00xx reloc */
This page took 0.030243 seconds and 4 git commands to generate.