* targets.c: Move enum target_flavour outside of struct and change
authorJim Kingdon <jkingdon@engr.sgi.com>
Sun, 31 Oct 1993 18:59:59 +0000 (18:59 +0000)
committerJim Kingdon <jkingdon@engr.sgi.com>
Sun, 31 Oct 1993 18:59:59 +0000 (18:59 +0000)
the name to enum bfd_flavour.  This means bfd clients can use it.
* bfd-in.h: Add macro bfd_get_flavour.
* bfd-in2.h: Rebuilt.

bfd/ChangeLog
bfd/bfd-in2.h

index c09ac77eb70de293eb7f6892949f0f992071fdc8..266d57cbeeeee2ddae93955269824385492e71f4 100644 (file)
@@ -1,5 +1,10 @@
 Sun Oct 31 09:35:49 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
 
+       * targets.c: Move enum target_flavour outside of struct and change
+       the name to enum bfd_flavour.  This means bfd clients can use it.
+       * bfd-in.h: Add macro bfd_get_flavour.
+       * bfd-in2.h: Rebuilt.
+
        * som.c: Add comment about how abort() on corrupt executable is evil.
 
 Fri Oct 29 16:04:33 1993  David J. Mackenzie  (djm@thepub.cygnus.com)
index 43a3a71ee7d197df484ae606d374d727979c536a..9ace1685475fec746811ce3f5ce6a7c56e4475d0 100644 (file)
@@ -160,17 +160,50 @@ typedef enum bfd_format {
              bfd_type_end}     /* marks the end; don't use it! */
          bfd_format;
 
-/* Object file flag values */
+/* Values that may appear in the flags field of a BFD.  These also
+   appear in the object_flags field of the bfd_target structure, where
+   they indicate the set of flags used by that backend (not all flags
+   are meaningful for all object file formats) (FIXME: at the moment,
+   the object_flags values have mostly just been copied from backend
+   to another, and are not necessarily correct).  */
+
+/* No flags.  */
 #define NO_FLAGS       0x00
+
+/* BFD contains relocation entries.  */
 #define HAS_RELOC      0x01
+
+/* BFD is directly executable.  */
 #define EXEC_P         0x02
+
+/* BFD has line number information (basically used for F_LNNO in a
+   COFF header).  */
 #define HAS_LINENO     0x04
+
+/* BFD has debugging information.  */
 #define HAS_DEBUG      0x08
+
+/* BFD has symbols.  */
 #define HAS_SYMS       0x10
+
+/* BFD has local symbols (basically used for F_LSYMS in a COFF
+   header).  */
 #define HAS_LOCALS     0x20
+
+/* BFD is a dynamic object.  */
 #define DYNAMIC        0x40
+
+/* Text section is write protected (if D_PAGED is not set, this is
+   like an a.out NMAGIC file) (the linker sets this by default, but
+   clears it for -r or -N).  */
 #define WP_TEXT        0x80
+
+/* BFD is dynamically paged (this is like an a.out ZMAGIC file) (the
+   linker sets this by default, but clears it for -r or -n or -N).  */
 #define D_PAGED        0x100
+
+/* BFD is relaxable (this means that bfd_relax_section may be able to
+   do something).  */
 #define BFD_IS_RELAXABLE 0x200
 \f
 /* symbols and relocation */
@@ -387,6 +420,7 @@ CAT(NAME,_bfd_make_debug_symbol)
 #define bfd_get_filename(abfd) ((char *) (abfd)->filename)
 #define bfd_get_format(abfd) ((abfd)->format)
 #define bfd_get_target(abfd) ((abfd)->xvec->name)
+#define bfd_get_flavour(abfd) ((abfd)->xvec->flavour)
 #define bfd_get_file_flags(abfd) ((abfd)->flags)
 #define bfd_applicable_file_flags(abfd) ((abfd)->xvec->object_flags)
 #define bfd_applicable_section_flags(abfd) ((abfd)->xvec->section_flags)
@@ -1000,9 +1034,17 @@ typedef CONST struct reloc_howto_struct
            unwanted data from the relocation.  */
   unsigned int rightshift;
 
-        /*  The size of the item to be relocated - 0, is one byte, 1 is 2
-           bytes, 2 is four bytes.  A negative value indicates that the
-           result is to be subtracted from the data.  */
+        /*  The size of the item to be relocated.  This is *not* a
+           power-of-two measure.
+                0 : one byte
+                1 : two bytes
+                2 : four bytes
+                3 : nothing done (unless special_function is nonzero)
+                4 : eight bytes
+               -2 : two bytes, result should be subtracted from the
+                    data instead of added
+           There is currently no trivial way to extract a "number of
+           bytes" from a howto pointer.  */
   int size;
 
         /*  The number of bits in the item to be relocated.  This is used
@@ -1097,47 +1139,45 @@ bfd_perform_relocation
     bfd *output_bfd));
 
 typedef enum bfd_reloc_code_real 
-
 {
-   /* 64 bits wide, simple reloc */
+   /* Basic absolute relocations */
   BFD_RELOC_64,
-   /* 64 bits, PC-relative */
-  BFD_RELOC_64_PCREL,
-
-   /* 32 bits wide, simple reloc */
   BFD_RELOC_32,
-   /* 32 bits, PC-relative */
-  BFD_RELOC_32_PCREL,
-
-   /* 16 bits wide, simple reloc */
   BFD_RELOC_16,        
-   /* 16 bits, PC-relative */
-  BFD_RELOC_16_PCREL,
-
-   /* 8 bits wide, simple */
   BFD_RELOC_8,
-   /* 8 bits wide, pc relative */
+
+   /* PC-relative relocations */
+  BFD_RELOC_64_PCREL,
+  BFD_RELOC_32_PCREL,
+  BFD_RELOC_24_PCREL,     /* used by i960 */
+  BFD_RELOC_16_PCREL,
   BFD_RELOC_8_PCREL,
-   /* 8 bits wide, but used to form an address like 0xffnn */
-  BFD_RELOC_8_FFnn,
+
+   /* Linkage-table relative */
+  BFD_RELOC_32_BASEREL,
+  BFD_RELOC_16_BASEREL,
+  BFD_RELOC_8_BASEREL,
 
    /* The type of reloc used to build a contructor table - at the moment
      probably a 32 bit wide abs address, but the cpu can choose. */
   BFD_RELOC_CTOR,
 
-   /* High 22 bits of 32-bit value; simple reloc.  */
+   /* 8 bits wide, but used to form an address like 0xffnn */
+  BFD_RELOC_8_FFnn,
+
+   /* 32-bit pc-relative, shifted right 2 bits (i.e., 30-bit
+     word displacement, e.g. for SPARC) */
+  BFD_RELOC_32_PCREL_S2,
+
+   /* High 22 bits of 32-bit value, placed into lower 22 bits of
+     target word; simple reloc.  */
   BFD_RELOC_HI22,
    /* Low 10 bits.  */
   BFD_RELOC_LO10,
 
    /* Reloc types used for i960/b.out.  */
-  BFD_RELOC_24_PCREL,
   BFD_RELOC_I960_CALLJ,
 
-   /* 32-bit pc-relative, shifted right 2 bits (i.e., 30-bit
-     word displacement, e.g. for SPARC) */
-  BFD_RELOC_32_PCREL_S2,
-
    /* now for the sparc/elf codes */
   BFD_RELOC_NONE,               /* actually used */
   BFD_RELOC_SPARC_WDISP22,
@@ -1563,7 +1603,7 @@ struct _bfd
       struct bout_data_struct *bout_data;
       struct sun_core_struct *sun_core_data;
       struct trad_core_struct *trad_core_data;
-      struct hppa_data_struct *hppa_data;
+      struct som_data_struct *som_data;
       struct hpux_core_struct *hpux_core_data;
       struct sgi_core_struct *sgi_core_data;
       struct lynx_core_struct *lynx_core_data;
@@ -1675,21 +1715,22 @@ core_file_matches_executable_p
                ((*((bfd)->xvec->message)) arglist)
 #define BFD_SEND_FMT(bfd, message, arglist) \
             (((bfd)->xvec->message[(int)((bfd)->format)]) arglist)
+enum bfd_flavour {
+  bfd_target_unknown_flavour,
+  bfd_target_aout_flavour,
+  bfd_target_coff_flavour,
+  bfd_target_ecoff_flavour,
+  bfd_target_elf_flavour,
+  bfd_target_ieee_flavour,
+  bfd_target_nlm_flavour,
+  bfd_target_oasys_flavour,
+  bfd_target_tekhex_flavour,
+  bfd_target_srec_flavour,
+  bfd_target_som_flavour};
 typedef struct bfd_target
 {
   char *name;
-  enum target_flavour {
-    bfd_target_unknown_flavour,
-    bfd_target_aout_flavour,
-    bfd_target_coff_flavour,
-    bfd_target_ecoff_flavour,
-    bfd_target_elf_flavour,
-    bfd_target_ieee_flavour,
-    bfd_target_nlm_flavour,
-    bfd_target_oasys_flavour,
-    bfd_target_tekhex_flavour,
-    bfd_target_srec_flavour,
-    bfd_target_hppa_flavour} flavour;
+  enum bfd_flavour flavour;
   boolean byteorder_big_p;
   boolean header_byteorder_big_p;
   flagword object_flags;