--- /dev/null
+2001-06-29 Jakub Jelinek <jakub@redhat.com>
+
+ * elf32-sparc.c (_bfd_sparc_elf_howto_table): Remove support for
+ R_SPARC_UA64.
+ (elf32_sparc_check_relocs): Likewise.
+ (elf32_sparc_relocate_section): Likewise.
+ Optimize unaligned reloc usage.
+
+--- binutils-2.11.90.0.19/bfd/elf32-sparc.c.jj Fri Jun 29 11:58:58 2001
++++ binutils-2.11.90.0.19/bfd/elf32-sparc.c Fri Jun 29 12:24:17 2001
+@@ -120,7 +120,7 @@ reloc_howto_type _bfd_sparc_elf_howto_ta
+ HOWTO(R_SPARC_NONE, 0,0, 0,false,0,complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_NONE", false,0,0x00000000,true),
+ HOWTO(R_SPARC_NONE, 0,0, 0,false,0,complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_NONE", false,0,0x00000000,true),
+ HOWTO(R_SPARC_NONE, 0,0, 0,false,0,complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_NONE", false,0,0x00000000,true),
+- HOWTO(R_SPARC_UA64, 0,4,64,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc, "R_SPARC_UA64", false,0,(~ (bfd_vma)0), true),
++ HOWTO(R_SPARC_UA64, 0,0, 0,false,0,complain_overflow_dont, sparc_elf_notsupported_reloc, "R_SPARC_UA64", false,0,0x00000000,true),
+ HOWTO(R_SPARC_UA16, 0,1,16,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc, "R_SPARC_UA16", false,0,0x0000ffff,true),
+ HOWTO(R_SPARC_REV32, 0,2,32,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc, "R_SPARC_REV32", false,0,0xffffffff,true),
+ };
+@@ -554,7 +554,6 @@ elf32_sparc_check_relocs (abfd, info, se
+ case R_SPARC_LO10:
+ case R_SPARC_UA16:
+ case R_SPARC_UA32:
+- case R_SPARC_UA64:
+ if (h != NULL)
+ h->elf_link_hash_flags |= ELF_LINK_NON_GOT_REF;
+
+@@ -1223,7 +1222,6 @@ elf32_sparc_relocate_section (output_bfd
+ || r_type == R_SPARC_LO10
+ || r_type == R_SPARC_UA16
+ || r_type == R_SPARC_UA32
+- || r_type == R_SPARC_UA64
+ || ((r_type == R_SPARC_PC10
+ || r_type == R_SPARC_PC22)
+ && strcmp (h->root.root.string,
+@@ -1412,7 +1410,6 @@ elf32_sparc_relocate_section (output_bfd
+ case R_SPARC_LO10:
+ case R_SPARC_UA16:
+ case R_SPARC_UA32:
+- case R_SPARC_UA64:
+ if (info->shared)
+ {
+ Elf_Internal_Rela outrel;
+@@ -1463,6 +1460,24 @@ elf32_sparc_relocate_section (output_bfd
+ outrel.r_offset += (input_section->output_section->vma
+ + input_section->output_offset);
+
++ /* Optimize unaligned reloc usage now that we know where
++ it finally resides. */
++ switch (r_type)
++ {
++ case R_SPARC_16:
++ if (outrel.r_offset & 1) r_type = R_SPARC_UA16;
++ break;
++ case R_SPARC_UA16:
++ if (!(outrel.r_offset & 1)) r_type = R_SPARC_16;
++ break;
++ case R_SPARC_32:
++ if (outrel.r_offset & 3) r_type = R_SPARC_UA32;
++ break;
++ case R_SPARC_UA32:
++ if (!(outrel.r_offset & 3)) r_type = R_SPARC_32;
++ break;
++ }
++
+ if (skip)
+ memset (&outrel, 0, sizeof outrel);
+ /* h->dynindx may be -1 if the symbol was marked to
+@@ -2024,7 +2039,7 @@ elf32_sparc_object_p (abfd)
+ }
+ else if (elf_elfheader (abfd)->e_flags & EF_SPARC_LEDATA)
+ return bfd_default_set_arch_mach (abfd, bfd_arch_sparc,
+- bfd_mach_sparc_sparclite_le);
++ bfd_mach_sparc_sparclite_le);
+ else
+ return bfd_default_set_arch_mach (abfd, bfd_arch_sparc, bfd_mach_sparc);
+ }
+
+
+ Jakub