2003-05-11 Jason Eckhardt <jle@rice.edu>
authorJason Eckhardt <jle@rice.edu>
Mon, 12 May 2003 03:08:02 +0000 (03:08 +0000)
committerJason Eckhardt <jle@rice.edu>
Mon, 12 May 2003 03:08:02 +0000 (03:08 +0000)
* bfd/elf32-i860.c (elf32_i860_relocate_highadj): Properly
adjust upper bits.
(elf32_i860_relocate_splitn): Obtain upper 5 bits from the
proper place.
(elf32_i860_relocate_pc16): Obtain upper 5 bits from the
proper place.

bfd/ChangeLog
bfd/elf32-i860.c

index 3517dd46bdeaec6c2ff5acd8e87e03f9935cb2fb..105a494cd9623ed70f2af8dd2ad78d9c263dbe81 100644 (file)
@@ -1,3 +1,12 @@
+2003-05-11  Jason Eckhardt  <jle@rice.edu>
+
+       * elf32-i860.c (elf32_i860_relocate_highadj): Properly
+       adjust upper bits.
+       (elf32_i860_relocate_splitn): Obtain upper 5 bits from the
+       proper place.
+       (elf32_i860_relocate_pc16): Obtain upper 5 bits from the
+       proper place.
+
 2003-05-11  Andreas Schwab  <schwab@suse.de>
 
        * elf32-m68k.c (elf_m68k_relocate_section): Replace ugly
index d24a29d8a63e8b86b60712cba7fe25160e965356..7a132c6d696ff48885732899f550b0311fccb28d 100644 (file)
@@ -718,7 +718,7 @@ elf32_i860_relocate_splitn (input_bfd, rello, contents, value)
   value += rello->r_addend;
 
   /* Separate the fields and insert.  */
-  value = (((value & 0xf8) << 5) | (value & 0x7ff)) & howto->dst_mask;
+  value = (((value & 0xf800) << 5) | (value & 0x7ff)) & howto->dst_mask;
   insn = (insn & ~howto->dst_mask) | value;
 
   bfd_put_32 (input_bfd, insn, contents + rello->r_offset);
@@ -750,7 +750,7 @@ elf32_i860_relocate_pc16 (input_bfd, input_section, rello, contents, value)
   value += rello->r_addend;
 
   /* Separate the fields and insert.  */
-  value = (((value & 0xf8) << 5) | (value & 0x7ff)) & howto->dst_mask;
+  value = (((value & 0xf800) << 5) | (value & 0x7ff)) & howto->dst_mask;
   insn = (insn & ~howto->dst_mask) | value;
 
   bfd_put_32 (input_bfd, insn, contents + rello->r_offset);
@@ -802,8 +802,8 @@ elf32_i860_relocate_highadj (input_bfd, rel, contents, value)
 
   insn = bfd_get_32 (input_bfd, contents + rel->r_offset);
 
-  value += ((rel->r_addend & 0x8000) << 1);
   value += rel->r_addend;
+  value += (value & 0x8000) << 1; 
   value = ((value >> 16) & 0xffff);
 
   insn = (insn & 0xffff0000) | value;