]> git.pld-linux.org Git - packages/binutils.git/blob - binutils-sparc_unaligned_reloc.patch
- md5sums, cleanups
[packages/binutils.git] / binutils-sparc_unaligned_reloc.patch
1 2001-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.063333 seconds and 3 git commands to generate.