RS/6000 support, by Metin G. Ozisik, Mimi Phûông-Thåo Võ, and
authorJohn Gilmore <gnu@cygnus>
Fri, 25 Oct 1991 05:36:31 +0000 (05:36 +0000)
committerJohn Gilmore <gnu@cygnus>
Fri, 25 Oct 1991 05:36:31 +0000 (05:36 +0000)
John Gilmore.

gas/a.out.gnu.h
include/ChangeLog
include/bfd.h
include/internalcoff.h

index 9ce531d9f55a4ace546d0f220d2e67b5592cc940..7f9fb78f1a3fbb0ef613eee7736432414de2c3df 100755 (executable)
@@ -55,6 +55,7 @@ enum machine_type {
   /* skip a bunch so we don't run into any of sun's numbers */
   M_386 = 100,
   M_29K = 101,
+  M_RS6000 = 102,      /* IBM RS/6000 */
   /* HP/BSD formats */
   M_HP200 = 200,       /* hp200 (68010) BSD binary */
   M_HP300 = 300,       /* hp300 (68020+68881) BSD binary */
@@ -252,7 +253,9 @@ struct reloc_info_extended
 # define       r_symbolnum  r_index
   unsigned     r_extern:1;
   unsigned     :2;
-  enum reloc_type r_type:5;
+/*  RS/6000 compiler does not support enum bitfield 
+  enum reloc_type r_type:5; */
+  enum reloc_type r_type;
   long int     r_addend;
 };
 
index 4384eb0d5d6908ff7c2edfe01c64b17d7a999589..ffcf1239320b1001af2f1b576727bcc5a63bbcea 100644 (file)
@@ -1,3 +1,14 @@
+Thu Oct 24 22:11:11 1991  John Gilmore  (gnu at cygnus.com)
+
+       RS/6000 support, by Metin G. Ozisik, Mimi Phûông-Thåo Võ, and
+       John Gilmore.
+
+       * a.out.gnu.h:  Update slightly.
+       * bfd.h:  Add new error code, fix doc, add bfd_arch_rs6000.
+       * internalcoff.h:  Add more F_ codes for filehdr.  Add
+       rs/6000-dependent fields to aouthdr.  Add storage classes
+       to syments.  Add 6000-specific auxent.  Add r_size in reloc.
+
 Thu Oct 24 04:13:20 1991  Fred Fish  (fnf at cygnus.com)
 
        * dwarf.h: New file for dwarf support.  Copied from gcc2
index 318588d2c6ad12584aa612bcff457f13a206f4c6..9bd167d9ef4047dfea273ef891c78decf0c8574d 100644 (file)
@@ -204,7 +204,8 @@ typedef enum bfd_error {
              no_more_archived_files, malformed_archive,
              symbol_not_found, file_not_recognized,
              file_ambiguously_recognized, no_contents,
-               bfd_error_nonrepresentable_section,
+             bfd_error_nonrepresentable_section,
+             no_debug_section,
              invalid_error_code} bfd_ec;
 
 extern bfd_ec bfd_error;
@@ -742,8 +743,8 @@ who's name matches that provided, otherwise NULL. @xref{Sections}, for more info
  bfd_make_section
 This function creates a new empty section called @var{name} and attaches it
 to the end of the chain of sections for the BFD supplied. An attempt to
-create a section with a name which is already in use, returns the old
-section by that name instead.
+create a section with a name which is already in use, returns NULL without
+changing the section chain.
 
 Possible errors are:
 @table @code
@@ -906,12 +907,13 @@ enum bfd_architecture
   bfd_arch_ns32k,     /* National Semiconductor 32xxx */
   bfd_arch_tahoe,     /* CCI/Harris Tahoe */
   bfd_arch_i860,      /* Intel 860 */
-  bfd_arch_romp,      /* IBM ROMP RS/6000 */
+  bfd_arch_romp,      /* IBM ROMP PC/RT */
   bfd_arch_alliant,   /* Alliant */
   bfd_arch_convex,    /* Convex */
   bfd_arch_m88k,      /* Motorola 88xxx */
   bfd_arch_pyramid,   /* Pyramid Technology */
   bfd_arch_h8300,     /* Hitachi H8/300 */
+  bfd_arch_rs6000,    /* IBM RS/6000 */
   bfd_arch_last
   };
 
index 7971008c14089d36b1ff11f0bde0e9909f5997c2..4c187dd2b9436274ccb83ea01c2a88eacaca9c0f 100755 (executable)
@@ -15,15 +15,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,7 +42,22 @@ 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 */
+        ulong   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          */
+        ulong   o_maxstack;     /* max stack size allowed.              */
 } ;
 
 /********************** STORAGE CLASSES **********************/
@@ -82,6 +105,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          0x80
+#define C_LSYM          0x81
+#define C_PSYM          0x82
+#define C_RSYM          0x83
+#define C_RPSYM         0x84
+#define C_STSYM         0x85
+#define C_TCSYM         0x86
+#define C_BCOMM         0x87
+#define C_ECOML         0x88
+#define C_ECOMM         0x89
+#define C_DECL          0x8c
+#define C_ENTRY         0x8d
+#define C_FUN           0x8e
+#define C_BSTAT         0x8f
+#define C_ESTAT         0x90
+
 /********************** SECTION HEADER **********************/
 struct internal_scnhdr {
        char            s_name[8];      /* section name                 */
@@ -234,6 +279,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 +287,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 +323,22 @@ 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 */
 
   /******************************************
    *  I960-specific *2nd* aux. entry formats
@@ -298,7 +358,6 @@ union internal_auxent
     char       x_idstring[20]; /* producer identity string */
   } x_ident;                   /* Producer ident info */
 
-
 };
 
 /********************** RELOCATION DIRECTIVES **********************/
@@ -307,6 +366,11 @@ struct internal_reloc {
        long r_vaddr;           /* Virtual address of reference */
        long r_symndx;          /* Index into symbol table      */
        unsigned short r_type;  /* Relocation type              */
+
+#if AIXCOFF_C
+       unsigned char  r_size;
+#endif
+
 #if M88
        unsigned short r_offset;
 #endif