patches/binutils/2.20/170-warn-textrel.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Tue Jan 12 19:24:03 2010 +0100 (2010-01-12)
changeset 1761 88020b2c3246
parent 1614 3f76cdbceb6e
permissions -rw-r--r--
scripts/functions: change handling of nochdir

- 'nochdir' must be the first option
- have systematic pushd/popd, even if nochdir
yann@1614
     1
textrels are bad for forcing copy-on-write (this affects everyone),
yann@1614
     2
and for security/runtime code generation, this affects security ppl.
yann@1614
     3
But in either case, it doesn't matter who needs textrels, it's
yann@1614
     4
the very fact that they're needed at all.
yann@1614
     5
yann@1614
     6
2006-06-10  Ned Ludd  <solar@gentoo.org>, Mike Frysinger <vapier@gentoo.org>
yann@1614
     7
yann@1614
     8
	* bfd/elflink.c (bfd_elf_final_link): Check all objects for TEXTRELs.
yann@1614
     9
	* ld/ldmain.c (main): Change textrel warning default to true.
yann@1614
    10
	* ld/testsuite/lib/ld-lib.exp (default_ld_simple_link): Scrub TEXTREL
yann@1614
    11
	warnings from ld output.
yann@1614
    12
fr@1621
    13
--- binutils/bfd/elflink.c
fr@1621
    14
+++ binutils/bfd/elflink.c
yann@1614
    15
@@ -8652,14 +8652,12 @@
yann@1614
    16
 	goto error_return;
yann@1614
    17
 
yann@1614
    18
       /* Check for DT_TEXTREL (late, in case the backend removes it).  */
yann@1614
    19
-      if (info->warn_shared_textrel && info->shared)
yann@1614
    20
+      o = bfd_get_section_by_name (dynobj, ".dynamic");
yann@1614
    21
+      if (info->warn_shared_textrel && o != NULL)
yann@1614
    22
 	{
yann@1614
    23
 	  bfd_byte *dyncon, *dynconend;
yann@1614
    24
 
yann@1614
    25
 	  /* Fix up .dynamic entries.  */
yann@1614
    26
-	  o = bfd_get_section_by_name (dynobj, ".dynamic");
yann@1614
    27
-	  BFD_ASSERT (o != NULL);
yann@1614
    28
-
yann@1614
    29
 	  dyncon = o->contents;
yann@1614
    30
 	  dynconend = o->contents + o->size;
yann@1614
    31
 	  for (; dyncon < dynconend; dyncon += bed->s->sizeof_dyn)
yann@1614
    32
@@ -8702,7 +8702,7 @@ bfd_elf_final_link (bfd *abfd, struct bf
yann@1614
    33
 	      if (dyn.d_tag == DT_TEXTREL)
yann@1614
    34
 		{
yann@1614
    35
 		 info->callbacks->einfo
yann@1614
    36
-		    (_("%P: warning: creating a DT_TEXTREL in a shared object.\n"));
yann@1614
    37
+		    (_("%P: warning: creating a DT_TEXTREL in object.\n"));
yann@1614
    38
 		  break;
yann@1614
    39
 		}
yann@1614
    40
 	    }
fr@1621
    41
--- binutils/ld/ldmain.c
fr@1621
    42
+++ binutils/ld/ldmain.c
yann@1614
    43
@@ -282,2 +282,3 @@ main (int argc, char **argv)
yann@1614
    44
   link_info.spare_dynamic_tags = 5;
yann@1614
    45
+  link_info.warn_shared_textrel = TRUE;
yann@1614
    46
   link_info.sharable_sections = FALSE;
fr@1621
    47
--- binutils/ld/testsuite/lib/ld-lib.exp
fr@1621
    48
+++ binutils/ld/testsuite/lib/ld-lib.exp
yann@1614
    49
@@ -181,6 +181,10 @@ proc default_ld_simple_link { ld target 
yann@1614
    50
     # symbol, since the default linker script might use ENTRY.
yann@1614
    51
     regsub -all "(^|\n)(\[^\n\]*: warning: cannot find entry symbol\[^\n\]*\n?)" $exec_output "\\1" exec_output
yann@1614
    52
 
yann@1614
    53
+    # Gentoo tweak:
yann@1614
    54
+    # We want to ignore TEXTREL warnings since we force enable them by default
yann@1614
    55
+    regsub -all "^lt-ld-new: warning: creating a DT_TEXTREL in object\." $exec_output "\\1" exec_output
yann@1614
    56
+
yann@1614
    57
     if [string match "" $exec_output] then {
yann@1614
    58
 	return 1
yann@1614
    59
     } else {