]> git.pld-linux.org Git - packages/binutils.git/blame - binutils-sparc_unaligned_reloc.patch
- md5sums, cleanups
[packages/binutils.git] / binutils-sparc_unaligned_reloc.patch
CommitLineData
929f7364 12001-06-29 Jakub Jelinek <jakub@redhat.com>
2
3 * elf32-sparc.c (_bfd_sparc_elf_howto_table): Remove support for
4 R_SPARC_UA64.
5 (elf32_sparc_check_relocs): Likewise.
6 (elf32_sparc_relocate_section): Likewise.
7 Optimize unaligned reloc usage.
8
9--- binutils-2.11.90.0.19/bfd/elf32-sparc.c.jj Fri Jun 29 11:58:58 2001
10+++ binutils-2.11.90.0.19/bfd/elf32-sparc.c Fri Jun 29 12:24:17 2001
11@@ -120,7 +120,7 @@ reloc_howto_type _bfd_sparc_elf_howto_ta
12 HOWTO(R_SPARC_NONE, 0,0, 0,false,0,complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_NONE", false,0,0x00000000,true),
13 HOWTO(R_SPARC_NONE, 0,0, 0,false,0,complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_NONE", false,0,0x00000000,true),
14 HOWTO(R_SPARC_NONE, 0,0, 0,false,0,complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_NONE", false,0,0x00000000,true),
15- 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),
16+ HOWTO(R_SPARC_UA64, 0,0, 0,false,0,complain_overflow_dont, sparc_elf_notsupported_reloc, "R_SPARC_UA64", false,0,0x00000000,true),
17 HOWTO(R_SPARC_UA16, 0,1,16,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc, "R_SPARC_UA16", false,0,0x0000ffff,true),
18 HOWTO(R_SPARC_REV32, 0,2,32,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc, "R_SPARC_REV32", false,0,0xffffffff,true),
19 };
20@@ -554,7 +554,6 @@ elf32_sparc_check_relocs (abfd, info, se
21 case R_SPARC_LO10:
22 case R_SPARC_UA16:
23 case R_SPARC_UA32:
24- case R_SPARC_UA64:
25 if (h != NULL)
26 h->elf_link_hash_flags |= ELF_LINK_NON_GOT_REF;
27
28@@ -1223,7 +1222,6 @@ elf32_sparc_relocate_section (output_bfd
29 || r_type == R_SPARC_LO10
30 || r_type == R_SPARC_UA16
31 || r_type == R_SPARC_UA32
32- || r_type == R_SPARC_UA64
33 || ((r_type == R_SPARC_PC10
34 || r_type == R_SPARC_PC22)
35 && strcmp (h->root.root.string,
36@@ -1412,7 +1410,6 @@ elf32_sparc_relocate_section (output_bfd
37 case R_SPARC_LO10:
38 case R_SPARC_UA16:
39 case R_SPARC_UA32:
40- case R_SPARC_UA64:
41 if (info->shared)
42 {
43 Elf_Internal_Rela outrel;
44@@ -1463,6 +1460,24 @@ elf32_sparc_relocate_section (output_bfd
45 outrel.r_offset += (input_section->output_section->vma
46 + input_section->output_offset);
47
48+ /* Optimize unaligned reloc usage now that we know where
49+ it finally resides. */
50+ switch (r_type)
51+ {
52+ case R_SPARC_16:
53+ if (outrel.r_offset & 1) r_type = R_SPARC_UA16;
54+ break;
55+ case R_SPARC_UA16:
56+ if (!(outrel.r_offset & 1)) r_type = R_SPARC_16;
57+ break;
58+ case R_SPARC_32:
59+ if (outrel.r_offset & 3) r_type = R_SPARC_UA32;
60+ break;
61+ case R_SPARC_UA32:
62+ if (!(outrel.r_offset & 3)) r_type = R_SPARC_32;
63+ break;
64+ }
65+
66 if (skip)
67 memset (&outrel, 0, sizeof outrel);
68 /* h->dynindx may be -1 if the symbol was marked to
69@@ -2024,7 +2039,7 @@ elf32_sparc_object_p (abfd)
70 }
71 else if (elf_elfheader (abfd)->e_flags & EF_SPARC_LEDATA)
72 return bfd_default_set_arch_mach (abfd, bfd_arch_sparc,
73- bfd_mach_sparc_sparclite_le);
74+ bfd_mach_sparc_sparclite_le);
75 else
76 return bfd_default_set_arch_mach (abfd, bfd_arch_sparc, bfd_mach_sparc);
77 }
78
79
80 Jakub
This page took 0.090872 seconds and 4 git commands to generate.