* elf32-hppa.c (elf32_hppa_bfd_final_link_relocate): Don't mess
authorJeff Law <law@redhat.com>
Sat, 17 Jun 1995 15:43:06 +0000 (15:43 +0000)
committerJeff Law <law@redhat.com>
Sat, 17 Jun 1995 15:43:06 +0000 (15:43 +0000)
        with the operands of an R_PARISC_DPREL21L relocation if the insn
        is not "addil <symbol>,%r27".

bfd/ChangeLog
bfd/elf32-hppa.c

index 2426427..d9aa3e0 100644 (file)
@@ -1,3 +1,9 @@
+Sat Jun 17 09:40:44 1995  Jeff Law  (law@snake.cs.utah.edu)
+
+       * elf32-hppa.c (elf32_hppa_bfd_final_link_relocate): Don't mess
+       with the operands of an R_PARISC_DPREL21L relocation if the insn
+       is not "addil <symbol>,%r27".
+
 Fri Jun 16 15:04:47 1995  Stan Shebs  <shebs@andros.cygnus.com>
 
        * bfd-in.h (NT_subsystem, NT_stack_heap): Declare but don't
index e74db34..d66679f 100644 (file)
@@ -1300,11 +1300,15 @@ elf32_hppa_bfd_final_link_relocate (howto, input_bfd, output_bfd,
        section.  If it's a code section, then "data pointer relative" makes
        no sense.  In that case we don't adjust the "value", and for 21 bit
        addil instructions, we change the source addend register from %dp to
-       %r0.  */
+       %r0.  
     case R_PARISC_DPREL21L:
       r_field = e_lrsel;
       if (sym_sec->flags & SEC_CODE)
-       insn &= ~0x03e00000;
+       {
+         if ((insn & 0xfc) >> 26 == 0xa
+              && (insn & 0x03e00000) >> 21 == 0x1b)
+           insn &= ~0x03e00000;
+       }
       else
        value -= elf32_hppa_hash_table (info)->global_value;
       goto do_basic_type_1;