Pārlūkot izejas kodu

fix inverted setting of sh fdpic flag by binutils

the behavior by bfd/ld matched the ABI document but was the opposite
of the kernel's interpretation and opposite of how ld treats the flag
on every other target using fdpic.

see this thread for details:
https://sourceware.org/ml/binutils/2015-09/msg00186.html
Rich Felker 9 gadi atpakaļ
vecāks
revīzija
72b4cdc7e2
1 mainītis faili ar 21 papildinājumiem un 0 dzēšanām
  1. 21 0
      patches/binutils-2.25.1/0004-shfdpicflag.diff

+ 21 - 0
patches/binutils-2.25.1/0004-shfdpicflag.diff

@@ -0,0 +1,21 @@
+diff -ur binutils-2.25.1.orig/bfd/elf32-sh.c binutils-2.25.1/bfd/elf32-sh.c
+--- binutils-2.25.1.orig/bfd/elf32-sh.c	2015-09-03 21:52:17.000000000 +0000
++++ binutils-2.25.1/bfd/elf32-sh.c	2015-09-14 17:08:48.114426847 +0000
+@@ -5487,7 +5487,7 @@
+ 		   input_bfd, input_section, rel->r_offset, symname);
+ 	    }
+ 
+-	  elf_elfheader (output_bfd)->e_flags &= ~EF_SH_PIC;
++	  elf_elfheader (output_bfd)->e_flags |= EF_SH_PIC;
+ 	}
+ 
+       if (r != bfd_reloc_ok)
+@@ -6644,7 +6644,7 @@
+       elf_elfheader (obfd)->e_flags = elf_elfheader (ibfd)->e_flags;
+       sh_elf_set_mach_from_flags (obfd);
+       if (elf_elfheader (obfd)->e_flags & EF_SH_FDPIC)
+-	elf_elfheader (obfd)->e_flags |= EF_SH_PIC;
++	elf_elfheader (obfd)->e_flags &= ~EF_SH_PIC;
+     }
+ 
+   if (! sh_merge_bfd_arch (ibfd, obfd))