* coff-alpha.c (reloc_nil): New function.
authorKen Raeburn <raeburn@cygnus>
Tue, 8 Feb 1994 20:58:20 +0000 (20:58 +0000)
committerKen Raeburn <raeburn@cygnus>
Tue, 8 Feb 1994 20:58:20 +0000 (20:58 +0000)
(alpha_howto_table): Use it as special_function to prevent certain relocs from
being adjusted by bfd_perform_relocation.  IGNORE reloc should be
partial_inplace.
(alpha_ecoff_get_relocated_section_contents): Accept a LITERAL reloc on an
"ldl" instruction too.

bfd/ChangeLog
bfd/coff-alpha.c

index c3e67715e7bdb4baa19e3a3659ad9939aef03f2e..adcb13a2f5b5b171cded40c0c7882a47893a7a81 100644 (file)
@@ -1,3 +1,12 @@
+Tue Feb  8 15:55:50 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)
+
+       * coff-alpha.c (reloc_nil): New function.
+       (alpha_howto_table): Use it as special_function to prevent certain
+       relocs from being adjusted by bfd_perform_relocation.  IGNORE
+       reloc should be partial_inplace.
+       (alpha_ecoff_get_relocated_section_contents): Accept a LITERAL
+       reloc on an "ldl" instruction too.
+
 Tue Feb  8 00:32:28 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)
 
        * elf32-hppa.c (CURRENT_STUB_OFFSET, hppa_elf_build_arg_reloc_stub,
index 7a220d090d395f8139f78bfab6dde26d5f9099a1..e670a8bb2b6b5c4cac48f1daf3b7bf34d18c9f1e 100644 (file)
@@ -1,5 +1,5 @@
 /* BFD back-end for ALPHA Extended-Coff files.
-   Copyright 1993 Free Software Foundation, Inc.
+   Copyright 1993, 1994 Free Software Foundation, Inc.
    Modified from coff-mips.c by Steve Chamberlain <sac@cygnus.com> and
    Ian Lance Taylor <ian@cygnus.com>.
 
@@ -111,6 +111,18 @@ static boolean alpha_relocate_section PARAMS ((bfd *, struct bfd_link_info *,
 \f
 /* How to process the various reloc types.  */
 
+static bfd_reloc_status_type
+reloc_nil (abfd, reloc, sym, data, sec, output_bfd)
+     bfd *abfd;
+     arelent *reloc;
+     asymbol *sym;
+     PTR data;
+     asection *sec;
+     bfd *output_bfd;
+{
+  return bfd_reloc_ok;
+}
+
 /* In case we're on a 32-bit machine, construct a 64-bit "-1" value
    from smaller values.  Start with zero, widen, *then* decrement.  */
 #define MINUS_ONE      (((bfd_vma)0) - 1)
@@ -127,9 +139,9 @@ static reloc_howto_type alpha_howto_table[] =
         true,                  /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_dont, /* complain_on_overflow */
-        0,                     /* special_function */
+        reloc_nil,             /* special_function */
         "IGNORE",              /* name */
-        false,                 /* partial_inplace */
+        true,                  /* partial_inplace */
         0,                     /* src_mask */
         0,                     /* dst_mask */
         true),                 /* pcrel_offset */
@@ -214,7 +226,7 @@ static reloc_howto_type alpha_howto_table[] =
         false,                 /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_dont, /* complain_on_overflow */
-        0,                     /* special_function */
+        reloc_nil,             /* special_function */
         "LITUSE",              /* name */
         false,                 /* partial_inplace */
         0,                     /* src_mask */
@@ -239,7 +251,7 @@ static reloc_howto_type alpha_howto_table[] =
         true,                  /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_dont, /* complain_on_overflow */
-        0,                     /* special_function */
+        reloc_nil,             /* special_function */
         "GPDISP",              /* name */
         true,                  /* partial_inplace */
         0xffff,                /* src_mask */
@@ -827,9 +839,10 @@ alpha_ecoff_get_relocated_section_contents (abfd, link_info, link_order,
            unsigned long insn;
 
            /* I believe that the LITERAL reloc will only apply to a
-              ldq instruction, so check my assumption.  */
+              ldq or ldl instruction, so check my assumption.  */
            insn = bfd_get_32 (input_bfd, data + rel->address);
-           BFD_ASSERT (((insn >> 26) & 0x3f) == 0x29);
+           BFD_ASSERT (((insn >> 26) & 0x3f) == 0x29
+                       || ((insn >> 26) & 0x3f) == 0x28);
 
            rel->addend -= gp;
            r = bfd_perform_relocation (input_bfd, rel, data, input_section,
@@ -1852,10 +1865,10 @@ static const struct ecoff_backend_data alpha_ecoff_backend_data =
 {
   /* COFF backend structure.  */
   {
-    (void (*) PARAMS ((bfd *,PTR,int,int,PTR))) bfd_void, /* aux_in */
+    (void (*) PARAMS ((bfd *,PTR,int,int,int,int,PTR))) bfd_void, /* aux_in */
     (void (*) PARAMS ((bfd *,PTR,PTR))) bfd_void, /* sym_in */
     (void (*) PARAMS ((bfd *,PTR,PTR))) bfd_void, /* lineno_in */
-    (unsigned (*) PARAMS ((bfd *,PTR,int,int,PTR))) bfd_void, /* aux_out */
+    (unsigned (*) PARAMS ((bfd *,PTR,int,int,int,int,PTR)))bfd_void,/*aux_out*/
     (unsigned (*) PARAMS ((bfd *,PTR,PTR))) bfd_void, /* sym_out */
     (unsigned (*) PARAMS ((bfd *,PTR,PTR))) bfd_void, /* lineno_out */
     (unsigned (*) PARAMS ((bfd *,PTR,PTR))) bfd_void, /* reloc_out */