add binutils patches fixing mips tls reloc output when linking pie
the linker was wrongly leaving dynamic relocations for GD-model TLS defined in the main program when linking the main program as PIE. this was only suboptimal for dynamic pie, but for static pie it resulted in runtime failure since there is no dynamic linker to resolve the DTPMOD reference. this has been reported as binutils bug #22570.
This commit is contained in:
parent
b85e29c00d
commit
030b83f3a8
|
@ -0,0 +1,21 @@
|
|||
diff -ur binutils-2.25.1.orig/bfd/elfxx-mips.c binutils-2.25.1/bfd/elfxx-mips.c
|
||||
--- binutils-2.25.1.orig/bfd/elfxx-mips.c 2018-01-31 11:26:12.000000000 -0500
|
||||
+++ binutils-2.25.1/bfd/elfxx-mips.c 2018-01-31 12:16:00.179841734 -0500
|
||||
@@ -3228,7 +3228,7 @@
|
||||
&& (!info->shared || !SYMBOL_REFERENCES_LOCAL (info, h)))
|
||||
indx = h->dynindx;
|
||||
|
||||
- if ((info->shared || indx != 0)
|
||||
+ if ((!info->executable || indx != 0)
|
||||
&& (h == NULL
|
||||
|| ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
|
||||
|| h->root.type != bfd_link_hash_undefweak))
|
||||
@@ -3338,7 +3338,7 @@
|
||||
if (entry->tls_initialized)
|
||||
return;
|
||||
|
||||
- if ((info->shared || indx != 0)
|
||||
+ if ((!info->executable || indx != 0)
|
||||
&& (h == NULL
|
||||
|| ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT
|
||||
|| h->root.type != bfd_link_hash_undefweak))
|
|
@ -0,0 +1,21 @@
|
|||
diff -ur binutils-2.27.orig/bfd/elfxx-mips.c binutils-2.27/bfd/elfxx-mips.c
|
||||
--- binutils-2.27.orig/bfd/elfxx-mips.c 2016-08-03 03:36:51.000000000 -0400
|
||||
+++ binutils-2.27/bfd/elfxx-mips.c 2018-01-31 12:11:22.458824584 -0500
|
||||
@@ -3242,7 +3242,7 @@
|
||||
&& (!bfd_link_pic (info) || !SYMBOL_REFERENCES_LOCAL (info, h)))
|
||||
indx = h->dynindx;
|
||||
|
||||
- if ((bfd_link_pic (info) || indx != 0)
|
||||
+ if ((bfd_link_dll (info) || indx != 0)
|
||||
&& (h == NULL
|
||||
|| ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
|
||||
|| h->root.type != bfd_link_hash_undefweak))
|
||||
@@ -3354,7 +3354,7 @@
|
||||
if (entry->tls_initialized)
|
||||
return;
|
||||
|
||||
- if ((bfd_link_pic (info) || indx != 0)
|
||||
+ if ((bfd_link_dll (info) || indx != 0)
|
||||
&& (h == NULL
|
||||
|| ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT
|
||||
|| h->root.type != bfd_link_hash_undefweak))
|
Loading…
Reference in New Issue