public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] gentoo commit in src/patchsets/binutils/2.18.50.0.5: 03_all_binutils-2.15.92.0.2-ppc64-pie.patch 04_all_binutils-2.15.92.0.2-place-orphan.patch 08_all_binutils-RPATH_ENVVAR-smack.patch 12_all_sh-targets.patch 13_all_mips-gnu-hash-support.patch 42_all_012_check_ldrunpath_length.patch 63_all_binutils-2.18-pt-pax-flags-20070828.patch 65_all_binutils-2.18-amd64-32bit-path.patch 66_all_binutils-2.18.50.0.2-warn-textrel.patch 76_all_only-use-new-ld-dtags.patch.disabled 76_all_use-new-ld-dtags.patch 77_all_generate-gnu-hash.patch 78_all_use-relro.patch 91_all_libiberty-pic.patch README.history
@ 2008-03-17  1:49 Mike Frysinger (vapier)
  0 siblings, 0 replies; only message in thread
From: Mike Frysinger (vapier) @ 2008-03-17  1:49 UTC (permalink / raw
  To: gentoo-commits

vapier      08/03/17 01:49:45

  Added:                03_all_binutils-2.15.92.0.2-ppc64-pie.patch
                        04_all_binutils-2.15.92.0.2-place-orphan.patch
                        08_all_binutils-RPATH_ENVVAR-smack.patch
                        12_all_sh-targets.patch
                        13_all_mips-gnu-hash-support.patch
                        42_all_012_check_ldrunpath_length.patch
                        63_all_binutils-2.18-pt-pax-flags-20070828.patch
                        65_all_binutils-2.18-amd64-32bit-path.patch
                        66_all_binutils-2.18.50.0.2-warn-textrel.patch
                        76_all_only-use-new-ld-dtags.patch.disabled
                        76_all_use-new-ld-dtags.patch
                        77_all_generate-gnu-hash.patch
                        78_all_use-relro.patch 91_all_libiberty-pic.patch
                        README.history
  Log:
  initial 2.18.50.0.5 patchset based on last 2.18.50.0.4 patchset

Revision  Changes    Path
1.1                  src/patchsets/binutils/2.18.50.0.5/03_all_binutils-2.15.92.0.2-ppc64-pie.patch

file : http://sources.gentoo.org/viewcvs.py/gentoo/src/patchsets/binutils/2.18.50.0.5/03_all_binutils-2.15.92.0.2-ppc64-pie.patch?rev=1.1&view=markup
plain: http://sources.gentoo.org/viewcvs.py/gentoo/src/patchsets/binutils/2.18.50.0.5/03_all_binutils-2.15.92.0.2-ppc64-pie.patch?rev=1.1&content-type=text/plain

Index: 03_all_binutils-2.15.92.0.2-ppc64-pie.patch
===================================================================
--- bfd/elf64-ppc.c.jj	2004-09-27 16:46:06.000000000 -0400
+++ bfd/elf64-ppc.c	2004-10-04 09:09:50.000000000 -0400
@@ -9681,7 +9681,12 @@ ppc64_elf_relocate_section (bfd *output_
 	      else if (!SYMBOL_REFERENCES_LOCAL (info, &h->elf)
 		       && !is_opd
 		       && r_type != R_PPC64_TOC)
-		outrel.r_info = ELF64_R_INFO (h->elf.dynindx, r_type);
+		{
+		  outrel.r_info = ELF64_R_INFO (h->elf.dynindx, r_type);
+		  if (h->elf.dynindx == -1
+		      && h->elf.root.type == bfd_link_hash_undefweak)
+		  memset (&outrel, 0, sizeof outrel);
+		}
 	      else
 		{
 		  /* This symbol is local, or marked to become local,



1.1                  src/patchsets/binutils/2.18.50.0.5/04_all_binutils-2.15.92.0.2-place-orphan.patch

file : http://sources.gentoo.org/viewcvs.py/gentoo/src/patchsets/binutils/2.18.50.0.5/04_all_binutils-2.15.92.0.2-place-orphan.patch?rev=1.1&view=markup
plain: http://sources.gentoo.org/viewcvs.py/gentoo/src/patchsets/binutils/2.18.50.0.5/04_all_binutils-2.15.92.0.2-place-orphan.patch?rev=1.1&content-type=text/plain

Index: 04_all_binutils-2.15.92.0.2-place-orphan.patch
===================================================================
2003-08-05  Jakub Jelinek  <jakub@redhat.com>

	* emulparams/elf64ppc.sh (OTHER_GOT_RELOC_SECTIONS): Add .rela.opd.

--- ld/emulparams/elf64ppc.sh.jj	2003-07-28 10:24:45.000000000 -0400
+++ ld/emulparams/elf64ppc.sh	2003-08-05 08:35:58.000000000 -0400
@@ -28,7 +28,8 @@ else
   .toc		0 : { *(.toc) }"
 fi
 OTHER_GOT_RELOC_SECTIONS="
-  .rela.toc	${RELOCATING-0} : { *(.rela.toc) }"
+  .rela.toc	${RELOCATING-0} : { *(.rela.toc) }
+  .rela.opd	${RELOCATING-0} : { *(.rela.opd) }"
 OTHER_READWRITE_SECTIONS="
   .toc1		${RELOCATING-0}${RELOCATING+ALIGN(8)} : { *(.toc1) }
   .opd		${RELOCATING-0}${RELOCATING+ALIGN(8)} : { KEEP (*(.opd)) }"



1.1                  src/patchsets/binutils/2.18.50.0.5/08_all_binutils-RPATH_ENVVAR-smack.patch

file : http://sources.gentoo.org/viewcvs.py/gentoo/src/patchsets/binutils/2.18.50.0.5/08_all_binutils-RPATH_ENVVAR-smack.patch?rev=1.1&view=markup
plain: http://sources.gentoo.org/viewcvs.py/gentoo/src/patchsets/binutils/2.18.50.0.5/08_all_binutils-RPATH_ENVVAR-smack.patch?rev=1.1&content-type=text/plain

Index: 08_all_binutils-RPATH_ENVVAR-smack.patch
===================================================================
http://sourceware.org/ml/binutils/2007-07/msg00401.html
http://sourceware.org/bugzilla/show_bug.cgi?id=4970

--- configure
+++ configure
@@ -5355,6 +5355,7 @@
   *-*-darwin* | *-*-rhapsody* ) RPATH_ENVVAR=DYLD_LIBRARY_PATH ;;
   *) RPATH_ENVVAR=LD_LIBRARY_PATH ;;
 esac
+RPATH_ENVVAR="cant_touch_this_nah_nah_nah"
 
 # Record target_configdirs and the configure arguments for target and
 # build configuration in Makefile.



1.1                  src/patchsets/binutils/2.18.50.0.5/12_all_sh-targets.patch

file : http://sources.gentoo.org/viewcvs.py/gentoo/src/patchsets/binutils/2.18.50.0.5/12_all_sh-targets.patch?rev=1.1&view=markup
plain: http://sources.gentoo.org/viewcvs.py/gentoo/src/patchsets/binutils/2.18.50.0.5/12_all_sh-targets.patch?rev=1.1&content-type=text/plain

Index: 12_all_sh-targets.patch
===================================================================
r10231 | lethal | 2005-05-02 09:58:00 -0400 (Mon, 02 May 2005) | 13 lines

Likewise, binutils has no idea about any of these new targets either, so we 
fix that up too.. now we're able to actually build a real toolchain for 
sh2a_nofpu- and other more ineptly named toolchains (and yes, there are more 
inept targets than that one, really. Go look, I promise).

--- binutils-2.16.90.0.2-dist/configure
+++ binutils-2.16.90.0.2/configure
@@ -1207,7 +1207,7 @@
   am33_2.0-*-linux*)
     noconfigdirs="$noconfigdirs ${libgcj} target-newlib target-libgloss"
     ;;
-  sh-*-linux*)
+  sh*-*-linux*)
     noconfigdirs="$noconfigdirs ${libgcj} target-newlib target-libgloss"
     ;;    
   sh*-*-pe|mips*-*-pe|*arm-wince-pe)
@@ -1495,7 +1495,7 @@
   romp-*-*)
     noconfigdirs="$noconfigdirs bfd binutils ld gas opcodes target-libgloss ${libgcj}"
     ;;
-  sh-*-* | sh64-*-*)
+  sh*-*-* | sh64-*-*)
     case "${host}" in
       i[3456789]86-*-vsta) ;; # don't add gprof back in
       i[3456789]86-*-go32*) ;; # don't add gprof back in
--- binutils-2.16.90.0.2-dist/configure.ac
+++ binutils-2.16.90.0.2/configure.ac
@@ -424,7 +424,7 @@
   am33_2.0-*-linux*)
     noconfigdirs="$noconfigdirs ${libgcj} target-newlib target-libgloss"
     ;;
-  sh-*-linux*)
+  sh*-*-linux*)
     noconfigdirs="$noconfigdirs ${libgcj} target-newlib target-libgloss"
     ;;    
   sh*-*-pe|mips*-*-pe|*arm-wince-pe)
@@ -712,7 +712,7 @@
   romp-*-*)
     noconfigdirs="$noconfigdirs bfd binutils ld gas opcodes target-libgloss ${libgcj}"
     ;;
-  sh-*-* | sh64-*-*)
+  sh*-*-* | sh64-*-*)
     case "${host}" in
       i[[3456789]]86-*-vsta) ;; # don't add gprof back in
       i[[3456789]]86-*-go32*) ;; # don't add gprof back in



1.1                  src/patchsets/binutils/2.18.50.0.5/13_all_mips-gnu-hash-support.patch

file : http://sources.gentoo.org/viewcvs.py/gentoo/src/patchsets/binutils/2.18.50.0.5/13_all_mips-gnu-hash-support.patch?rev=1.1&view=markup
plain: http://sources.gentoo.org/viewcvs.py/gentoo/src/patchsets/binutils/2.18.50.0.5/13_all_mips-gnu-hash-support.patch?rev=1.1&content-type=text/plain

Index: 13_all_mips-gnu-hash-support.patch
===================================================================
add experimental support for GNU_HASH on mips

http://sourceware.org/ml/binutils/2007-08/msg00387.html

--- binutils-2.18/bfd/elfxx-mips.c
+++ binutils-2.18/bfd/elfxx-mips.c
@@ -497,6 +497,8 @@ static struct mips_got_entry *mips_elf_c
    bfd_vma, unsigned long, struct mips_elf_link_hash_entry *, int);
 static bfd_boolean mips_elf_sort_hash_table_f
   (struct mips_elf_link_hash_entry *, void *);
+static bfd_boolean mips_elf_sort_gnu_hash_table_f
+  (struct mips_elf_link_hash_entry *, void *);
 static bfd_vma mips_elf_high
   (bfd_vma);
 static bfd_boolean mips16_stub_section_p
@@ -2819,6 +2821,64 @@ mips_elf_sort_hash_table_f (struct mips_
   return TRUE;
 }
 
+/* No sorting of dynindx is done here, since it is done by gun hash
+   routine. Just track the lowest entry. */
+static bfd_boolean
+mips_elf_sort_gnu_hash_table (struct bfd_link_info *info)
+{
+  struct mips_elf_hash_sort_data hsd;
+  struct mips_got_info *g;
+  bfd *dynobj;
+
+  dynobj = elf_hash_table (info)->dynobj;
+
+  g = mips_elf_got_info (dynobj, NULL);
+
+  hsd.low = NULL;
+  mips_elf_link_hash_traverse (((struct mips_elf_link_hash_table *)
+				elf_hash_table (info)),
+			       mips_elf_sort_gnu_hash_table_f,
+			       &hsd);
+  /* Now we know which dynamic symbole has the lowest dynamic symbol
+     table index in the GOT. */
+  g->global_gotsym = hsd.low;
+
+  return TRUE;
+}
+
+static bfd_boolean
+mips_elf_sort_gnu_hash_table_f (struct mips_elf_link_hash_entry *h, void *data)
+{
+  struct mips_elf_hash_sort_data *hsd = data;
+
+  if (h->root.root.type == bfd_link_hash_warning)
+    h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
+
+  /* Symbols without dynamic symbol table entries aren't interesting
+     at all */
+  if (h->root.dynindx == -1)
+    return TRUE;
+
+  /* For gnu hash, symbols that don't need got is forced to have got entry.
+     This is redundant, but since gnu hash restricts the .dynsym order and
+     symbols that don't need got is *not* placed on upper part of external
+     part of got, it is forced to have got entry.
+     Track the lowest entry. */
+  if (hsd->low == NULL)
+    hsd->low = (struct elf_link_hash_entry *)h;
+  else if (hsd->low->dynindx > h->root.dynindx)
+    hsd->low = (struct elf_link_hash_entry *)h;
+
+  /* Mark symbols that really needs GOT entry.
+     Global symbols that don't need GOT entries get -1.
+     We mark entry that really need GOT to st_other member.
+     Also refer to glibc's mips/dl-machine.h */
+  if (h->root.got.offset != MINUS_ONE)
+    h->root.other |= STO_MIPS_GNUHASH;
+
+  return TRUE;
+}
+
 /* If H is a symbol that needs a global GOT entry, but has a dynamic
    symbol table index lower than any we've seen to date, record it for
    posterity.  */
@@ -3532,8 +3592,12 @@ mips_elf_multi_got (bfd *abfd, struct bf
   set_got_offset_arg.value = 1;
   htab_traverse (g->got_entries, mips_elf_set_global_got_offset,
 		 &set_got_offset_arg);
-  if (! mips_elf_sort_hash_table (info, 1))
-    return FALSE;
+  if (info->emit_hash)
+    if (! mips_elf_sort_hash_table (info, 1))
+      return FALSE;
+  if (info->emit_gnu_hash)
+    if (! mips_elf_sort_gnu_hash_table (info))
+      return FALSE;
 
   /* Now go through the GOTs assigning them offset ranges.
      [assigned_gotno, local_gotno[ will be set to the range of local
@@ -7248,11 +7312,19 @@ _bfd_mips_elf_always_size_sections (bfd 
      higher.  Therefore, it make sense to put those symbols
      that need GOT entries at the end of the symbol table.  We
      do that here.  */
-  if (! mips_elf_sort_hash_table (info, 1))
-    return FALSE;
+  if (info->emit_hash)
+    if (! mips_elf_sort_hash_table (info, 1))
+      return FALSE;
+  if (info->emit_gnu_hash)
+    if (! mips_elf_sort_gnu_hash_table (info))
+      return FALSE;
 
-  if (g->global_gotsym != NULL)
+  if (g->global_gotsym != NULL) {
     i = elf_hash_table (info)->dynsymcount - g->global_gotsym->dynindx;
+    if (info->emit_gnu_hash) {
+      i += g->global_gotsym->dynindx;
+    }
+  }
   else
     /* If there are no global symbols, or none requiring
        relocations, then GLOBAL_GOTSYM will be NULL.  */
@@ -7484,6 +7556,18 @@ _bfd_mips_elf_size_dynamic_sections (bfd
 	      needed_relocs += arg.needed;
 	    }
 
+	  /*  -export-dynamic might have increased the symbol. For gnu hash
+	      to keep 1:1 entry with dynsym and got, increase additional sym
+	      to got entry. */
+	  if (info->emit_gnu_hash)
+	    {
+	      int increase;
+	      increase = elf_hash_table (info)->dynsymcount - g->global_gotno;
+	      s->size += increase * MIPS_ELF_GOT_SIZE (output_bfd);
+	      g->global_gotno += increase;
+	      mips_elf_resolve_final_got_entries (g);
+	    }
+
 	  if (needed_relocs)
 	    mips_elf_allocate_dynamic_relocations (dynobj, info,
 						   needed_relocs);
@@ -10296,8 +10380,12 @@ _bfd_mips_elf_final_link (bfd *abfd, str
 	 section above.  */
 
       dynsecsymcount = count_section_dynsyms (abfd, info);
-      if (! mips_elf_sort_hash_table (info, dynsecsymcount + 1))
-	return FALSE;
+      if (info->emit_hash)
+	if (! mips_elf_sort_hash_table (info, dynsecsymcount + 1))
+	  return FALSE;
+      if (info->emit_gnu_hash)
+	if (! mips_elf_sort_gnu_hash_table (info))
+	  return FALSE;
 
       /* Make sure we didn't grow the global .got region.  */
       dynobj = elf_hash_table (info)->dynobj;
--- binutils-2.18/binutils/readelf.c
+++ binutils-2.18/binutils/readelf.c
@@ -6934,6 +6934,7 @@ get_mips_symbol_other (unsigned int othe
     {
     case STO_OPTIONAL:  return "OPTIONAL";
     case STO_MIPS16:    return "MIPS16";
+    case STO_MIPS_GNUHASH: return "GNUHASH";
     default:      	return NULL;
     }
 }
--- binutils-2.18/include/elf/mips.h
+++ binutils-2.18/include/elf/mips.h
@@ -727,6 +727,9 @@ extern void bfd_mips_elf32_swap_reginfo_
    is optional - if, at final link time, it cannot be found, no
    error message should be produced.  */
 #define STO_OPTIONAL		(1 << 2)
+/* This bit is used to mark symbol that needs GOT entry when
+   gnu hash is specified as hash style. */
+#define STO_MIPS_GNUHASH         (1 << 3)
 /* A macro to examine the STO_OPTIONAL bit.  */
 #define ELF_MIPS_IS_OPTIONAL(other)	((other) & STO_OPTIONAL)
 \f
--- binutils-2.18/ld/emultempl/mipself.em
+++ binutils-2.18/ld/emultempl/mipself.em
@@ -25,12 +25,18 @@ mips_after_parse (void)
   /* .gnu.hash and the MIPS ABI require .dynsym to be sorted in different
      ways.  .gnu.hash needs symbols to be grouped by hash code whereas the
      MIPS ABI requires a mapping between the GOT and the symbol table.  */
-  if (link_info.emit_gnu_hash)
+  /* This constraint is solved by re-ordering GOT section, GOT is now
+     sorted in 1:1 with gnu hash, which is also 1:1 mapping with .dynsym */
+  if (link_info.emit_gnu_hash && 0)
     {
       einfo ("%X%P: .gnu.hash is incompatible with the MIPS ABI\n");
       link_info.emit_hash = TRUE;
       link_info.emit_gnu_hash = FALSE;
     }
+  /* In current MIPS gnu hash method, both is not an option. force it
+     to gnu hash if both is selected. */
+  if (link_info.emit_gnu_hash && link_info.emit_hash)
+    link_info.emit_hash = FALSE;
   after_parse_default ();
 }
 EOF



1.1                  src/patchsets/binutils/2.18.50.0.5/42_all_012_check_ldrunpath_length.patch

file : http://sources.gentoo.org/viewcvs.py/gentoo/src/patchsets/binutils/2.18.50.0.5/42_all_012_check_ldrunpath_length.patch?rev=1.1&view=markup
plain: http://sources.gentoo.org/viewcvs.py/gentoo/src/patchsets/binutils/2.18.50.0.5/42_all_012_check_ldrunpath_length.patch?rev=1.1&content-type=text/plain

Index: 42_all_012_check_ldrunpath_length.patch
===================================================================
#!/bin/sh -e
## 012_check_ldrunpath_length.dpatch by Chris Chimelis <chris@debian.org>
##
## All lines beginning with `## DP:' are a description of the patch.
## DP: Only generate an RPATH entry if LD_RUN_PATH is not empty, for
## DP: cases where -rpath isn't specified. (#151024)

if [ $# -ne 1 ]; then
    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
    exit 1
fi

[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
patch_opts="${patch_opts:--f --no-backup-if-mismatch}"

case "$1" in
       -patch) patch $patch_opts -p1 < $0;;
       -unpatch) patch $patch_opts -p1 -R < $0;;
        *)
                echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
                exit 1;;
esac

exit 0

@DPATCH@
diff -urNad /home/james/debian/packages/binutils/new/binutils-2.15/ld/emultempl/elf32.em binutils-2.15/ld/emultempl/elf32.em
--- /home/james/debian/packages/binutils/new/binutils-2.15/ld/emultempl/elf32.em	2004-05-21 23:12:58.000000000 +0100
+++ binutils-2.15/ld/emultempl/elf32.em	2004-05-21 23:12:59.000000000 +0100
@@ -692,6 +692,8 @@
 	      && command_line.rpath == NULL)
 	    {
 	      lib_path = (const char *) getenv ("LD_RUN_PATH");
+	      if ((lib_path) && (strlen (lib_path) == 0))
+		  lib_path = NULL;
 	      if (gld${EMULATION_NAME}_search_needed (lib_path, &n,
 						      force))
 		break;
@@ -871,6 +873,8 @@
   rpath = command_line.rpath;
   if (rpath == NULL)
     rpath = (const char *) getenv ("LD_RUN_PATH");
+  if ((rpath) && (strlen (rpath) == 0))
+      rpath = NULL;
   if (! (bfd_elf_size_dynamic_sections
 	 (output_bfd, command_line.soname, rpath,
 	  command_line.filter_shlib,



1.1                  src/patchsets/binutils/2.18.50.0.5/63_all_binutils-2.18-pt-pax-flags-20070828.patch

file : http://sources.gentoo.org/viewcvs.py/gentoo/src/patchsets/binutils/2.18.50.0.5/63_all_binutils-2.18-pt-pax-flags-20070828.patch?rev=1.1&view=markup
plain: http://sources.gentoo.org/viewcvs.py/gentoo/src/patchsets/binutils/2.18.50.0.5/63_all_binutils-2.18-pt-pax-flags-20070828.patch?rev=1.1&content-type=text/plain

Index: 63_all_binutils-2.18-pt-pax-flags-20070828.patch
===================================================================
--- binutils-2.18/bfd/elf-bfd.h
+++ binutils-2.18/bfd/elf-bfd.h
@@ -1431,6 +1431,9 @@ struct elf_obj_tdata
   /* Should the PT_GNU_RELRO segment be emitted?  */
   bfd_boolean relro;
 
+  /* Segment flags for the PT_PAX_FLAGS segment.  */
+  unsigned int pax_flags;
+
   /* Symbol version definitions in external objects.  */
   Elf_Internal_Verdef *verdef;
 
--- binutils-2.18/bfd/elf.c
+++ binutils-2.18/bfd/elf.c
@@ -1085,6 +1085,7 @@ get_segment_type (unsigned int p_type)
     case PT_GNU_EH_FRAME: pt = "EH_FRAME"; break;
     case PT_GNU_STACK: pt = "STACK"; break;
     case PT_GNU_RELRO: pt = "RELRO"; break;
+    case PT_PAX_FLAGS: pt = "PAX_FLAGS"; break;
     default: pt = NULL; break;
     }
   return pt;
@@ -2361,6 +2362,9 @@ bfd_section_from_phdr (bfd *abfd, Elf_In
     case PT_GNU_RELRO:
       return _bfd_elf_make_section_from_phdr (abfd, hdr, index, "relro");
 
+    case PT_PAX_FLAGS:
+      return _bfd_elf_make_section_from_phdr (abfd, hdr, index, "pax_flags");
+
     default:
       /* Check for any processor-specific program segment types.  */
       bed = get_elf_backend_data (abfd);
@@ -3341,6 +3345,11 @@ get_program_header_size (bfd *abfd, stru
       ++segs;
     }
 
+    {
+      /* We need a PT_PAX_FLAGS segment.  */
+      ++segs;
+    }
+
   for (s = abfd->sections; s != NULL; s = s->next)
     {
       if ((s->flags & SEC_LOAD) != 0
@@ -3868,6 +3877,20 @@ _bfd_elf_map_sections_to_segments (bfd *
 	  pm = &m->next;
 	}
 
+    {
+      amt = sizeof (struct elf_segment_map);
+      m = bfd_zalloc (abfd, amt);
+      if (m == NULL)
+	goto error_return;
+      m->next = NULL;
+      m->p_type = PT_PAX_FLAGS;
+      m->p_flags = elf_tdata (abfd)->pax_flags;
+      m->p_flags_valid = 1;
+
+      *pm = m;
+      pm = &m->next;
+    }
+
       free (sections);
       elf_tdata (abfd)->segment_map = mfirst;
     }
@@ -5010,7 +5033,8 @@ rewrite_elf_program_header (bfd *ibfd, b
        6. PT_TLS segment includes only SHF_TLS sections.
        7. SHF_TLS sections are only in PT_TLS or PT_LOAD segments.
        8. PT_DYNAMIC should not contain empty sections at the beginning
-	  (with the possible exception of .dynamic).  */
+	  (with the possible exception of .dynamic).
+       9. PT_PAX_FLAGS segments does not include any sections.  */
 #define IS_SECTION_IN_INPUT_SEGMENT(section, segment, bed)		\
   ((((segment->p_paddr							\
       ? IS_CONTAINED_BY_LMA (section, segment, segment->p_paddr)	\
@@ -5018,6 +5042,7 @@ rewrite_elf_program_header (bfd *ibfd, b
      && (section->flags & SEC_ALLOC) != 0)				\
     || IS_COREFILE_NOTE (segment, section))				\
    && segment->p_type != PT_GNU_STACK					\
+   && segment->p_type != PT_PAX_FLAGS					\
    && (segment->p_type != PT_TLS					\
        || (section->flags & SEC_THREAD_LOCAL))				\
    && (segment->p_type == PT_LOAD					\
--- binutils-2.18/bfd/elflink.c
+++ binutils-2.18/bfd/elflink.c
@@ -5328,16 +5328,30 @@ bfd_elf_size_dynamic_sections (bfd *outp
     return TRUE;
 
   bed = get_elf_backend_data (output_bfd);
+  elf_tdata (output_bfd)->pax_flags = PF_NORANDEXEC;
+
+  if (info->execheap)
+    elf_tdata (output_bfd)->pax_flags |= PF_NOMPROTECT;
+  else if (info->noexecheap)
+    elf_tdata (output_bfd)->pax_flags |= PF_MPROTECT;
+
   if (info->execstack)
-    elf_tdata (output_bfd)->stack_flags = PF_R | PF_W | PF_X;
+    {
+      elf_tdata (output_bfd)->stack_flags = PF_R | PF_W | PF_X;
+      elf_tdata (output_bfd)->pax_flags |= PF_EMUTRAMP;
+    }
   else if (info->noexecstack)
-    elf_tdata (output_bfd)->stack_flags = PF_R | PF_W;
+    {
+      elf_tdata (output_bfd)->stack_flags = PF_R | PF_W;
+      elf_tdata (output_bfd)->pax_flags |= PF_NOEMUTRAMP;
+    }
   else
     {
       bfd *inputobj;
       asection *notesec = NULL;
       int exec = 0;
 
+      elf_tdata (output_bfd)->pax_flags |= PF_NOEMUTRAMP;
       for (inputobj = info->input_bfds;
 	   inputobj;
 	   inputobj = inputobj->link_next)
@@ -5350,7 +5364,11 @@ bfd_elf_size_dynamic_sections (bfd *outp
 	  if (s)
 	    {
 	      if (s->flags & SEC_CODE)
-		exec = PF_X;
+		{
+		  elf_tdata (output_bfd)->pax_flags &= ~PF_NOEMUTRAMP;
+		  elf_tdata (output_bfd)->pax_flags |= PF_EMUTRAMP;
+		  exec = PF_X;
+		}
 	      notesec = s;
 	    }
 	  else if (bed->default_execstack)
--- binutils-2.18/binutils/readelf.c
+++ binutils-2.18/binutils/readelf.c
@@ -2469,6 +2469,7 @@ get_segment_type (unsigned long p_type)
 			return "GNU_EH_FRAME";
     case PT_GNU_STACK:	return "GNU_STACK";
     case PT_GNU_RELRO:  return "GNU_RELRO";
+    case PT_PAX_FLAGS:  return "PAX_FLAGS";
 
     default:
       if ((p_type >= PT_LOPROC) && (p_type <= PT_HIPROC))
--- binutils-2.18/include/bfdlink.h
+++ binutils-2.18/include/bfdlink.h
@@ -321,6 +321,14 @@ struct bfd_link_info
   /* TRUE if PT_GNU_RELRO segment should be created.  */
   unsigned int relro: 1;
 
+  /* TRUE if PT_PAX_FLAGS segment should be created with PF_NOMPROTECT
+     flags.  */
+  unsigned int execheap: 1;
+
+  /* TRUE if PT_PAX_FLAGS segment should be created with PF_MPROTECT
+     flags.  */
+  unsigned int noexecheap: 1;
+
   /* TRUE if we should warn when adding a DT_TEXTREL to a shared object.  */
   unsigned int warn_shared_textrel: 1;
 
--- binutils-2.18/include/elf/common.h
+++ binutils-2.18/include/elf/common.h
@@ -309,6 +309,7 @@
 #define PT_GNU_STACK	(PT_LOOS + 0x474e551) /* Stack flags */
 #define PT_GNU_RELRO	(PT_LOOS + 0x474e552) /* Read-only after relocation */
 #define PT_GNU_SHR	(PT_LOOS + 0x474e554) /* Sharable segment */
+#define PT_PAX_FLAGS	(PT_LOOS + 0x5041580) /* PaX flags */
 
 /* Program segment permissions, in program header p_flags field.  */
 
@@ -319,6 +320,21 @@
 #define PF_MASKOS	0x0FF00000	/* New value, Oct 4, 1999 Draft */
 #define PF_MASKPROC	0xF0000000	/* Processor-specific reserved bits */
 
+/* Flags to control PaX behavior.  */
+
+#define PF_PAGEEXEC	(1 << 4)	/* Enable  PAGEEXEC */
+#define PF_NOPAGEEXEC	(1 << 5)	/* Disable PAGEEXEC */
+#define PF_SEGMEXEC	(1 << 6)	/* Enable  SEGMEXEC */
+#define PF_NOSEGMEXEC	(1 << 7)	/* Disable SEGMEXEC */
+#define PF_MPROTECT	(1 << 8)	/* Enable  MPROTECT */
+#define PF_NOMPROTECT	(1 << 9)	/* Disable MPROTECT */
+#define PF_RANDEXEC	(1 << 10)	/* Enable  RANDEXEC */
+#define PF_NORANDEXEC	(1 << 11)	/* Disable RANDEXEC */
+#define PF_EMUTRAMP	(1 << 12)	/* Enable  EMUTRAMP */
+#define PF_NOEMUTRAMP	(1 << 13)	/* Disable EMUTRAMP */
+#define PF_RANDMMAP	(1 << 14)	/* Enable  RANDMMAP */
+#define PF_NORANDMMAP	(1 << 15)	/* Disable RANDMMAP */
+
 /* Values for section header, sh_type field.  */
 
 #define SHT_NULL	0		/* Section header table entry unused */
--- binutils-2.18/ld/emultempl/elf32.em
+++ binutils-2.18/ld/emultempl/elf32.em
@@ -2132,6 +2132,16 @@ fragment <<EOF
 	  link_info.noexecstack = TRUE;
 	  link_info.execstack = FALSE;
 	}
+      else if (strcmp (optarg, "execheap") == 0)
+	{
+	  link_info.execheap = TRUE;
+	  link_info.noexecheap = FALSE;
+	}
+      else if (strcmp (optarg, "noexecheap") == 0)
+	{
+	  link_info.noexecheap = TRUE;
+	  link_info.execheap = FALSE;
+	}
 EOF
 
   if test -n "$COMMONPAGESIZE"; then
@@ -2205,6 +2215,8 @@ fragment <<EOF
   -z defs                     Report unresolved symbols in object files.\n"));
   fprintf (file, _("\
   -z execstack                Mark executable as requiring executable stack\n"));
+  fprintf (file, _("\
+  -z execheap\t\tMark executable as requiring executable heap\n"));
   fprintf (file, _("\
   -z initfirst                Mark DSO to be initialized first at runtime\n"));
   fprintf (file, _("\
@@ -2217,6 +2228,8 @@ fragment <<EOF
   -z nodump                   Mark DSO not available to dldump\n"));
   fprintf (file, _("\
   -z noexecstack              Mark executable as not requiring executable stack\n"));
+  fprintf (file, _("\
+  -z noexecheap\tMark executable as not requiring executable heap\n"));
 EOF
 
   if test -n "$COMMONPAGESIZE"; then
--- binutils-2.18/ld/ldgram.y
+++ binutils-2.18/ld/ldgram.y
@@ -1099,6 +1099,8 @@ phdr_type:
 			    $$ = exp_intop (0x6474e550);
 			  else if (strcmp (s, "PT_GNU_STACK") == 0)
 			    $$ = exp_intop (0x6474e551);
+			  else if (strcmp (s, "PT_PAX_FLAGS") == 0)
+			    $$ = exp_intop (0x65041580);
 			  else
 			    {
 			      einfo (_("\



1.1                  src/patchsets/binutils/2.18.50.0.5/65_all_binutils-2.18-amd64-32bit-path.patch

file : http://sources.gentoo.org/viewcvs.py/gentoo/src/patchsets/binutils/2.18.50.0.5/65_all_binutils-2.18-amd64-32bit-path.patch?rev=1.1&view=markup
plain: http://sources.gentoo.org/viewcvs.py/gentoo/src/patchsets/binutils/2.18.50.0.5/65_all_binutils-2.18-amd64-32bit-path.patch?rev=1.1&content-type=text/plain

Index: 65_all_binutils-2.18-amd64-32bit-path.patch
===================================================================
--- binutils/ld/emulparams/elf_i386.sh
+++ binutils/ld/emulparams/elf_i386.sh
@@ -13,3 +13,13 @@
 NO_SMALL_DATA=yes
 SEPARATE_GOTPLT=12
 SHARABLE_SECTIONS=yes
+
+# In Gentoo, we install 32bit libs into /lib32 in an
+# ABI setup with amd64/x86
+case "$target" in
+  x86_64*-linux*)
+    case "$EMULATION_NAME" in
+      *i386*) LIBPATH_SUFFIX=32  ;;
+    esac
+  ;;
+esac



1.1                  src/patchsets/binutils/2.18.50.0.5/66_all_binutils-2.18.50.0.2-warn-textrel.patch

file : http://sources.gentoo.org/viewcvs.py/gentoo/src/patchsets/binutils/2.18.50.0.5/66_all_binutils-2.18.50.0.2-warn-textrel.patch?rev=1.1&view=markup
plain: http://sources.gentoo.org/viewcvs.py/gentoo/src/patchsets/binutils/2.18.50.0.5/66_all_binutils-2.18.50.0.2-warn-textrel.patch?rev=1.1&content-type=text/plain

Index: 66_all_binutils-2.18.50.0.2-warn-textrel.patch
===================================================================
textrels are bad for forcing copy-on-write (this affects everyone),
and for security/runtime code generation, this affects security ppl.
But in either case, it doesn't matter who needs textrels, it's
the very fact that they're needed at all.

2006-06-10  Ned Ludd  <solar@gentoo.org>, Mike Frysinger <vapier@gentoo.org>

	* bfd/elflink.c (bfd_elf_final_link): Check all objects for TEXTRELs.
	* ld/ldmain.c (main): Change textrel warning default to true.
	* ld/testsuite/lib/ld-lib.exp (default_ld_simple_link): Scrub TEXTREL
	warnings from ld output.

--- bfd/elflink.c
+++ bfd/elflink.c
@@ -8652,14 +8652,12 @@
 	goto error_return;
 
       /* Check for DT_TEXTREL (late, in case the backend removes it).  */
-      if (info->warn_shared_textrel && info->shared)
+      o = bfd_get_section_by_name (dynobj, ".dynamic");
+      if (info->warn_shared_textrel && o != NULL)
 	{
 	  bfd_byte *dyncon, *dynconend;
 
 	  /* Fix up .dynamic entries.  */
-	  o = bfd_get_section_by_name (dynobj, ".dynamic");
-	  BFD_ASSERT (o != NULL);
-
 	  dyncon = o->contents;
 	  dynconend = o->contents + o->size;
 	  for (; dyncon < dynconend; dyncon += bed->s->sizeof_dyn)
@@ -8702,7 +8702,7 @@ bfd_elf_final_link (bfd *abfd, struct bf
 	      if (dyn.d_tag == DT_TEXTREL)
 		{
 		 info->callbacks->einfo
-		    (_("%P: warning: creating a DT_TEXTREL in a shared object.\n"));
+		    (_("%P: warning: creating a DT_TEXTREL in object.\n"));
 		  break;
 		}
 	    }
--- ld/ldmain.c
+++ ld/ldmain.c
@@ -282,2 +282,3 @@ main (int argc, char **argv)
   link_info.spare_dynamic_tags = 5;
+  link_info.warn_shared_textrel = TRUE;
   link_info.sharable_sections = FALSE;
--- ld/testsuite/lib/ld-lib.exp
+++ ld/testsuite/lib/ld-lib.exp
@@ -181,6 +181,10 @@ proc default_ld_simple_link { ld target 
     # symbol, since the default linker script might use ENTRY.
     regsub -all "(^|\n)(\[^\n\]*: warning: cannot find entry symbol\[^\n\]*\n?)" $exec_output "\\1" exec_output
 
+    # Gentoo tweak:
+    # We want to ignore TEXTREL warnings since we force enable them by default
+    regsub -all "^lt-ld-new: warning: creating a DT_TEXTREL in object\." $exec_output "\\1" exec_output
+
     if [string match "" $exec_output] then {
 	return 1
     } else {



1.1                  src/patchsets/binutils/2.18.50.0.5/76_all_only-use-new-ld-dtags.patch.disabled

file : http://sources.gentoo.org/viewcvs.py/gentoo/src/patchsets/binutils/2.18.50.0.5/76_all_only-use-new-ld-dtags.patch.disabled?rev=1.1&view=markup
plain: http://sources.gentoo.org/viewcvs.py/gentoo/src/patchsets/binutils/2.18.50.0.5/76_all_only-use-new-ld-dtags.patch.disabled?rev=1.1&content-type=text/plain

Index: 76_all_only-use-new-ld-dtags.patch.disabled
===================================================================
Don't generate RPATH if we're going to be generating RUNPATH.

need to ponder what ramifications this has before enabling it

--- binutils/bfd/elflink.c
+++ binutils/bfd/elflink.c
@@ -5382,11 +5382,15 @@
 
 	  indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, rpath,
 				      TRUE);
-	  if (indx == (bfd_size_type) -1
-	      || !_bfd_elf_add_dynamic_entry (info, DT_RPATH, indx))
+	  if (indx == (bfd_size_type) -1)
 	    return FALSE;
 
-	  if  (info->new_dtags)
+	  if (!info->new_dtags)
+	    {
+	      if (!_bfd_elf_add_dynamic_entry (info, DT_RPATH, indx))
+		return FALSE;
+	    }
+	  else
 	    {
 	      _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr, indx);
 	      if (!_bfd_elf_add_dynamic_entry (info, DT_RUNPATH, indx))



1.1                  src/patchsets/binutils/2.18.50.0.5/76_all_use-new-ld-dtags.patch

file : http://sources.gentoo.org/viewcvs.py/gentoo/src/patchsets/binutils/2.18.50.0.5/76_all_use-new-ld-dtags.patch?rev=1.1&view=markup
plain: http://sources.gentoo.org/viewcvs.py/gentoo/src/patchsets/binutils/2.18.50.0.5/76_all_use-new-ld-dtags.patch?rev=1.1&content-type=text/plain

Index: 76_all_use-new-ld-dtags.patch
===================================================================
--- binutils/ld/ldmain.c
+++ binutils/ld/ldmain.c
@@ -296,6 +296,7 @@ main (int argc, char **argv)
 
   link_info.allow_undefined_version = TRUE;
   link_info.keep_memory = TRUE;
+  link_info.new_dtags = TRUE;
   link_info.combreloc = TRUE;
   link_info.strip_discarded = TRUE;
   link_info.callbacks = &link_callbacks;



1.1                  src/patchsets/binutils/2.18.50.0.5/77_all_generate-gnu-hash.patch

file : http://sources.gentoo.org/viewcvs.py/gentoo/src/patchsets/binutils/2.18.50.0.5/77_all_generate-gnu-hash.patch?rev=1.1&view=markup
plain: http://sources.gentoo.org/viewcvs.py/gentoo/src/patchsets/binutils/2.18.50.0.5/77_all_generate-gnu-hash.patch?rev=1.1&content-type=text/plain

Index: 77_all_generate-gnu-hash.patch
===================================================================
--- binutils/ld/ldmain.c
+++ binutils/ld/ldmain.c
@@ -273,2 +273,3 @@ main (int argc, char **argv)
   link_info.emit_hash = TRUE;
+  link_info.emit_gnu_hash = TRUE;
   link_info.callbacks = &link_callbacks;



1.1                  src/patchsets/binutils/2.18.50.0.5/78_all_use-relro.patch

file : http://sources.gentoo.org/viewcvs.py/gentoo/src/patchsets/binutils/2.18.50.0.5/78_all_use-relro.patch?rev=1.1&view=markup
plain: http://sources.gentoo.org/viewcvs.py/gentoo/src/patchsets/binutils/2.18.50.0.5/78_all_use-relro.patch?rev=1.1&content-type=text/plain

Index: 78_all_use-relro.patch
===================================================================
--- binutils/ld/ldmain.c
+++ binutils/ld/ldmain.c
@@ -293,2 +293,3 @@ main (int argc, char **argv)
   link_info.combreloc = TRUE;
+  link_info.relro = TRUE;
   link_info.strip_discarded = TRUE;



1.1                  src/patchsets/binutils/2.18.50.0.5/91_all_libiberty-pic.patch

file : http://sources.gentoo.org/viewcvs.py/gentoo/src/patchsets/binutils/2.18.50.0.5/91_all_libiberty-pic.patch?rev=1.1&view=markup
plain: http://sources.gentoo.org/viewcvs.py/gentoo/src/patchsets/binutils/2.18.50.0.5/91_all_libiberty-pic.patch?rev=1.1&content-type=text/plain

Index: 91_all_libiberty-pic.patch
===================================================================
--- libiberty/Makefile.in.mps	2004-05-13 15:53:17.000000000 +0200
+++ libiberty/Makefile.in	2004-05-13 15:52:53.000000000 +0200
@@ -224,6 +224,7 @@ $(TARGETLIB): $(REQUIRED_OFILES) $(EXTRA
 	  $(AR) $(AR_FLAGS) $(TARGETLIB) \
 	    $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS); \
 	  $(RANLIB) $(TARGETLIB); \
+	  cp $(TARGETLIB) ../ ; \
 	  cd ..; \
 	else true; fi
 



1.1                  src/patchsets/binutils/2.18.50.0.5/README.history

file : http://sources.gentoo.org/viewcvs.py/gentoo/src/patchsets/binutils/2.18.50.0.5/README.history?rev=1.1&view=markup
plain: http://sources.gentoo.org/viewcvs.py/gentoo/src/patchsets/binutils/2.18.50.0.5/README.history?rev=1.1&content-type=text/plain

Index: README.history
===================================================================
1.0		16.03.2008
	+ 03_all_binutils-2.15.92.0.2-ppc64-pie.patch
	+ 04_all_binutils-2.15.92.0.2-place-orphan.patch
	+ 08_all_binutils-RPATH_ENVVAR-smack.patch
	+ 12_all_sh-targets.patch
	+ 13_all_mips-gnu-hash-support.patch
	+ 42_all_012_check_ldrunpath_length.patch
	+ 63_all_binutils-2.18-pt-pax-flags-20070828.patch
	+ 65_all_binutils-2.18-amd64-32bit-path.patch
	+ 66_all_binutils-2.18.50.0.2-warn-textrel.patch
	+ 76_all_use-new-ld-dtags.patch
	+ 77_all_generate-gnu-hash.patch
	+ 78_all_use-relro.patch
	+ 91_all_libiberty-pic.patch



-- 
gentoo-commits@lists.gentoo.org mailing list



^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2008-03-17  1:49 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-03-17  1:49 [gentoo-commits] gentoo commit in src/patchsets/binutils/2.18.50.0.5: 03_all_binutils-2.15.92.0.2-ppc64-pie.patch 04_all_binutils-2.15.92.0.2-place-orphan.patch 08_all_binutils-RPATH_ENVVAR-smack.patch 12_all_sh-targets.patch 13_all_mips-gnu-hash-support.patch 42_all_012_check_ldrunpath_length.patch 63_all_binutils-2.18-pt-pax-flags-20070828.patch 65_all_binutils-2.18-amd64-32bit-path.patch 66_all_binutils-2.18.50.0.2-warn-textrel.patch 76_all_only-use-new-ld-dtags.patch.disabled 76_all_use-new-ld-dtags.patch 77_all_generate-gnu-hash.patch 78_all_use-relro.patch 91_all_libiberty-pic.patch README.history Mike Frysinger (vapier)

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox