* binutils-all/readelf.exp: Don't regard mips*el-*-* as traditional
[deliverable/binutils-gdb.git] / bfd / aout-tic30.c
index c1f7c396d174841826ff7330be0de8745b0b136b..5d25c209f091592030de20078dfccbda3f8dd9e0 100644 (file)
@@ -1,5 +1,5 @@
 /* BFD back-end for TMS320C30 a.out binaries.
-   Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
+   Copyright 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
    Contributed by Steven Haworth (steve@pm.cse.rmit.edu.au)
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -56,6 +56,12 @@ static bfd_reloc_status_type tic30_aout_final_link_relocate
 static const bfd_target *tic30_aout_object_p PARAMS ((bfd *));
 static boolean tic30_aout_write_object_contents PARAMS ((bfd *));
 static boolean tic30_aout_set_sizes PARAMS ((bfd *));
+static const bfd_target * tic30_aout_callback PARAMS ((bfd *));
+static boolean MY_bfd_copy_private_section_data  PARAMS ((bfd *, asection *, bfd *, asection *));
+static boolean MY_bfd_final_link PARAMS ((bfd *, struct bfd_link_info *));
+reloc_howto_type * tic30_aout_reloc_type_lookup  PARAMS ((bfd *, bfd_reloc_code_real_type));
+enum machine_type tic30_aout_machine_type  PARAMS ((enum bfd_architecture, unsigned long, boolean *));
+boolean tic30_aout_set_arch_mach  PARAMS ((bfd *, enum bfd_architecture, unsigned long));
 
 #define MY_reloc_howto(BFD,REL,IN,EX,PC) tic30_aout_reloc_howto(BFD,REL,&IN,&EX,&PC)
 #define MY_final_link_relocate tic30_aout_final_link_relocate
@@ -130,26 +136,27 @@ static CONST struct aout_backend_data tic30_aout_backend_data =
    2) to get the 32-bit addresses in the format the TMS320C30 likes
    it.  */
 reloc_howto_type tic30_aout_howto_table[] =
-{
-  EMPTY_HOWTO (-1),
-  HOWTO (1, 2, 1, 16, false, 0, 0, tic30_aout_fix_16,
-        "16", false, 0x0000FFFF, 0x0000FFFF, false),
-  HOWTO (2, 2, 2, 24, false, 0, complain_overflow_bitfield, NULL,
-        "24", false, 0x00FFFFFF, 0x00FFFFFF, false),
-  HOWTO (3, 18, 3, 24, false, 0, complain_overflow_bitfield, NULL,
-        "LDP", false, 0x00FF0000, 0x000000FF, false),
-  HOWTO (4, 2, 4, 32, false, 0, complain_overflow_bitfield, tic30_aout_fix_32,
-        "32", false, 0xFFFFFFFF, 0xFFFFFFFF, false),
-  HOWTO (5, 2, 1, 16, true, 0, complain_overflow_signed,
-        tic30_aout_fix_pcrel_16, "PCREL", true, 0x0000FFFF, 0x0000FFFF, true),
-  EMPTY_HOWTO (-1),
-  EMPTY_HOWTO (-1),
-  EMPTY_HOWTO (-1),
-  EMPTY_HOWTO (-1),
-  EMPTY_HOWTO (-1)
-};
-
-extern reloc_howto_type *NAME (aout, reloc_type_lookup) ();
+  {
+    EMPTY_HOWTO (-1),
+    HOWTO (1, 2, 1, 16, false, 0, 0, tic30_aout_fix_16,
+          "16", false, 0x0000FFFF, 0x0000FFFF, false),
+    HOWTO (2, 2, 2, 24, false, 0, complain_overflow_bitfield, NULL,
+          "24", false, 0x00FFFFFF, 0x00FFFFFF, false),
+    HOWTO (3, 18, 3, 24, false, 0, complain_overflow_bitfield, NULL,
+          "LDP", false, 0x00FF0000, 0x000000FF, false),
+    HOWTO (4, 2, 4, 32, false, 0, complain_overflow_bitfield, tic30_aout_fix_32,
+          "32", false, 0xFFFFFFFF, 0xFFFFFFFF, false),
+    HOWTO (5, 2, 1, 16, true, 0, complain_overflow_signed,
+          tic30_aout_fix_pcrel_16, "PCREL", true, 0x0000FFFF, 0x0000FFFF, true),
+    EMPTY_HOWTO (-1),
+    EMPTY_HOWTO (-1),
+    EMPTY_HOWTO (-1),
+    EMPTY_HOWTO (-1),
+    EMPTY_HOWTO (-1)
+  };
+
+extern reloc_howto_type *NAME (aout, reloc_type_lookup)
+     PARAMS ((bfd *, bfd_reloc_code_real_type));
 
 reloc_howto_type *
 tic30_aout_reloc_type_lookup (abfd, code)
@@ -296,13 +303,15 @@ tic30_aout_fix_pcrel_16 (abfd, reloc_entry, symbol, data, input_section,
 
 /* These macros will get 24-bit values from the bfd definition.
    Big-endian only.  */
-#define bfd_getb_24(BFD,ADDR) (bfd_get_8(BFD,ADDR) << 16) | \
-                              (bfd_get_8(BFD,ADDR+1) << 8) | \
-                              (bfd_get_8(BFD,ADDR+2))
+#define bfd_getb_24(BFD,ADDR)                  \
+ (bfd_get_8 (BFD, ADDR    ) << 16) |           \
+ (bfd_get_8 (BFD, ADDR + 1) <<  8) |           \
+ (bfd_get_8 (BFD, ADDR + 2)      )
 
-#define bfd_putb_24(BFD,DATA,ADDR) bfd_put_8(BFD,(bfd_byte)((DATA >> 16) & 0xFF),ADDR); \
-                                      bfd_put_8(BFD,(bfd_byte)((DATA >> 8) & 0xFF),ADDR+1); \
-                                                          bfd_put_8(BFD,(bfd_byte)(DATA & 0xFF),ADDR+2)
+#define bfd_putb_24(BFD,DATA,ADDR)                             \
+ bfd_put_8 (BFD, (bfd_byte) ((DATA >> 16) & 0xFF), ADDR    );  \
+ bfd_put_8 (BFD, (bfd_byte) ((DATA >>  8) & 0xFF), ADDR + 1);  \
+ bfd_put_8 (BFD, (bfd_byte) ( DATA        & 0xFF), ADDR + 2)
 
 /* Set parameters about this a.out file that are machine-dependent.
    This routine is called from some_aout_object_p just before it returns.  */
@@ -315,10 +324,10 @@ tic30_aout_callback (abfd)
   unsigned int arch_align_power;
   unsigned long arch_align;
 
-  /* Calculate the file positions of the parts of a newly read aout header */
+  /* Calculate the file positions of the parts of a newly read aout header */
   obj_textsec (abfd)->_raw_size = N_TXTSIZE (*execp);
 
-  /* The virtual memory addresses of the sections */
+  /* The virtual memory addresses of the sections */
   obj_textsec (abfd)->vma = N_TXTADDR (*execp);
   obj_datasec (abfd)->vma = N_DATADDR (*execp);
   obj_bsssec (abfd)->vma = N_BSSADDR (*execp);
@@ -327,11 +336,11 @@ tic30_aout_callback (abfd)
   obj_datasec (abfd)->lma = obj_datasec (abfd)->vma;
   obj_bsssec (abfd)->lma = obj_bsssec (abfd)->vma;
 
-  /* The file offsets of the sections */
+  /* The file offsets of the sections */
   obj_textsec (abfd)->filepos = N_TXTOFF (*execp);
   obj_datasec (abfd)->filepos = N_DATOFF (*execp);
 
-  /* The file offsets of the relocation info */
+  /* The file offsets of the relocation info */
   obj_textsec (abfd)->rel_filepos = N_TRELOFF (*execp);
   obj_datasec (abfd)->rel_filepos = N_DRELOFF (*execp);
 
@@ -427,7 +436,9 @@ tic30_aout_relocate_contents (howto, input_bfd, relocation, location)
       x = bfd_get_32 (input_bfd, location);
       break;
     }
+
   overflow = false;
+
   if (howto->complain_on_overflow != complain_overflow_dont)
     {
       bfd_vma check;
@@ -518,14 +529,14 @@ tic30_aout_relocate_contents (howto, input_bfd, relocation, location)
   return overflow ? bfd_reloc_overflow : bfd_reloc_ok;
 }
 
-/* Finish up the reading of an a.out file header */
+/* Finish up the reading of an a.out file header */
 
 static const bfd_target *
 tic30_aout_object_p (abfd)
      bfd *abfd;
 {
-  struct external_exec exec_bytes;     /* Raw exec header from file */
-  struct internal_exec exec;   /* Cleaned-up exec header */
+  struct external_exec exec_bytes;     /* Raw exec header from file */
+  struct internal_exec exec;   /* Cleaned-up exec header */
   const bfd_target *target;
 
   if (bfd_read ((PTR) & exec_bytes, 1, EXEC_BYTES_SIZE, abfd)
@@ -560,10 +571,10 @@ tic30_aout_object_p (abfd)
 
 #ifdef ENTRY_CAN_BE_ZERO
   /* The NEWSOS3 entry-point is/was 0, which (amongst other lossage)
-   * means that it isn't obvious if EXEC_P should be set.
-   * All of the following must be true for an executable:
-   * There must be no relocations, the bfd can be neither an
-   * archive nor an archive element, and the file must be executable.  */
+     means that it isn't obvious if EXEC_P should be set.
+     All of the following must be true for an executable:
+     There must be no relocations, the bfd can be neither an
+     archive nor an archive element, and the file must be executable.  */
 
   if (exec.a_trsize + exec.a_drsize == 0
       && bfd_get_format (abfd) == bfd_object && abfd->my_archive == NULL)
@@ -612,8 +623,9 @@ tic30_aout_write_object_contents (abfd)
   obj_reloc_entry_size (abfd) = RELOC_STD_SIZE;
 
   {
-    bfd_size_type text_size;   /* dummy vars */
+    bfd_size_type text_size;   /* Dummy vars.  */
     file_ptr text_end;
+
     if (adata (abfd).magic == undecided_magic)
       NAME (aout, adjust_sizes_and_vmas) (abfd, &text_size, &text_end);
 
@@ -631,8 +643,8 @@ tic30_aout_write_object_contents (abfd)
        if (bfd_write ((PTR) & exec_bytes, 1, adata (abfd).exec_bytes_size, abfd) != adata (abfd).exec_bytes_size)
          return false;
       }
-    /* Now write out reloc info, followed by syms and strings */
 
+    /* Now write out reloc info, followed by syms and strings.  */
     if (bfd_get_outsymbols (abfd) != (asymbol **) NULL
        && bfd_get_symcount (abfd) != 0)
       {
@@ -743,10 +755,10 @@ MY_bfd_final_link (abfd, info)
     {
       obj_datasec (abfd)->vma = BFD_ALIGN (vma, 4);
     }
+
   if (obj_datasec (abfd)->vma < vma)
-    {
-      obj_datasec (abfd)->vma = BFD_ALIGN (vma, 4);
-    }
+    obj_datasec (abfd)->vma = BFD_ALIGN (vma, 4);
+
   obj_datasec (abfd)->user_set_vma = 1;
   vma = obj_datasec (abfd)->vma;
   obj_datasec (abfd)->filepos = vma + adata (abfd).exec_bytes_size;
@@ -938,6 +950,9 @@ tic30_aout_set_arch_mach (abfd, arch, machine)
 #ifndef MY_bfd_gc_sections
 #define MY_bfd_gc_sections bfd_generic_gc_sections
 #endif
+#ifndef MY_bfd_merge_sections
+#define MY_bfd_merge_sections bfd_generic_merge_sections
+#endif
 #ifndef MY_bfd_reloc_type_lookup
 #define MY_bfd_reloc_type_lookup tic30_aout_reloc_type_lookup
 #endif
This page took 0.026317 seconds and 4 git commands to generate.