Date: Tuesday, April 10, 2018 @ 21:55:03
  Author: bpiotrowski
Revision: 321517

2.30-2: apply patches added in 2.29.1-3

Added:
  binutils/trunk/0002-PR22829-objcopy-strip-removes-PT_GNU_RELRO-from-lld-.patch
Modified:
  binutils/trunk/PKGBUILD
Deleted:
  binutils/trunk/0001-PR22829-objcopy-strip-removes-PT_GNU_RELRO-from-lld-.patch

-----------------------------------------------------------------+
 0001-PR22829-objcopy-strip-removes-PT_GNU_RELRO-from-lld-.patch |  145 
----------
 0002-PR22829-objcopy-strip-removes-PT_GNU_RELRO-from-lld-.patch |  145 
++++++++++
 PKGBUILD                                                        |   13 
 3 files changed, 153 insertions(+), 150 deletions(-)

Deleted: 0001-PR22829-objcopy-strip-removes-PT_GNU_RELRO-from-lld-.patch
===================================================================
--- 0001-PR22829-objcopy-strip-removes-PT_GNU_RELRO-from-lld-.patch     
2018-04-10 21:38:53 UTC (rev 321516)
+++ 0001-PR22829-objcopy-strip-removes-PT_GNU_RELRO-from-lld-.patch     
2018-04-10 21:55:03 UTC (rev 321517)
@@ -1,145 +0,0 @@
-From 3b56a1358768563d9cf320559ebdedfb30f122dd Mon Sep 17 00:00:00 2001
-From: Alan Modra <amo...@gmail.com>
-Date: Mon, 12 Feb 2018 13:06:07 +1030
-Subject: [PATCH] PR22829, objcopy/strip removes PT_GNU_RELRO from lld binaries
-
-lld lays out the relro segment differently to GNU ld, not bothering to
-include the first few bytes of .got.plt and padding out to a page at
-the end of the segment.  This patch teaches binutils to recognize the
-different (and somewhat inferior) layout as valid.
-
-bfd/
-       PR 22829
-       * elf.c (assign_file_positions_for_non_load_sections): Rewrite
-       PT_GNU_RELRO setup.
-ld/
-       * testsuite/ld-x86-64/pr14207.d: Adjust relro p_filesz.
-
-(cherry picked from commit f2731e0c374e5323ce4cdae2bcc7b7fe22da1a6f)
----
- bfd/elf.c                        | 78 ++++++++++++++++++++++++++--------------
- ld/testsuite/ld-x86-64/pr14207.d |  2 +-
- 2 files changed, 52 insertions(+), 28 deletions(-)
-
-diff --git a/bfd/elf.c b/bfd/elf.c
-index bbaab26918..f5a230cd77 100644
---- a/bfd/elf.c
-+++ b/bfd/elf.c
-@@ -5826,50 +5826,74 @@ assign_file_positions_for_non_load_sections (bfd *abfd,
-     {
-       if (p->p_type == PT_GNU_RELRO)
-       {
--        const Elf_Internal_Phdr *lp;
--        struct elf_segment_map *lm;
-+        bfd_vma start, end;
- 
-         if (link_info != NULL)
-           {
-             /* During linking the range of the RELRO segment is passed
--               in link_info.  */
-+               in link_info.  Note that there may be padding between
-+               relro_start and the first RELRO section.  */
-+            start = link_info->relro_start;
-+            end = link_info->relro_end;
-+          }
-+        else if (m->count != 0)
-+          {
-+            if (!m->p_size_valid)
-+              abort ();
-+            start = m->sections[0]->vma;
-+            end = start + m->p_size;
-+          }
-+        else
-+          {
-+            start = 0;
-+            end = 0;
-+          }
-+
-+        if (start < end)
-+          {
-+            struct elf_segment_map *lm;
-+            const Elf_Internal_Phdr *lp;
-+            unsigned int i;
-+
-+            /* Find a LOAD segment containing a section in the RELRO
-+               segment.  */
-             for (lm = elf_seg_map (abfd), lp = phdrs;
-                  lm != NULL;
-                  lm = lm->next, lp++)
-               {
-                 if (lp->p_type == PT_LOAD
--                    && lp->p_vaddr < link_info->relro_end
-                     && lm->count != 0
--                    && lm->sections[0]->vma >= link_info->relro_start)
-+                    && lm->sections[lm->count - 1]->vma >= start
-+                    && lm->sections[0]->vma < end)
-                   break;
-               }
--
-             BFD_ASSERT (lm != NULL);
--          }
--        else
--          {
--            /* Otherwise we are copying an executable or shared
--               library, but we need to use the same linker logic.  */
--            for (lp = phdrs; lp < phdrs + count; ++lp)
-+
-+            /* Find the section starting the RELRO segment.  */
-+            for (i = 0; i < lm->count; i++)
-               {
--                if (lp->p_type == PT_LOAD
--                    && lp->p_paddr == p->p_paddr)
-+                asection *s = lm->sections[i];
-+                if (s->vma >= start
-+                    && s->vma < end
-+                    && s->size != 0)
-                   break;
-               }
--          }
-+            BFD_ASSERT (i < lm->count);
-+
-+            p->p_vaddr = lm->sections[i]->vma;
-+            p->p_paddr = lm->sections[i]->lma;
-+            p->p_offset = lm->sections[i]->filepos;
-+            p->p_memsz = end - p->p_vaddr;
-+            p->p_filesz = p->p_memsz;
-+
-+            /* The RELRO segment typically ends a few bytes into
-+               .got.plt but other layouts are possible.  In cases
-+               where the end does not match any loaded section (for
-+               instance is in file padding), trim p_filesz back to
-+               correspond to the end of loaded section contents.  */
-+            if (p->p_filesz > lp->p_vaddr + lp->p_filesz - p->p_vaddr)
-+              p->p_filesz = lp->p_vaddr + lp->p_filesz - p->p_vaddr;
- 
--        if (lp < phdrs + count)
--          {
--            p->p_vaddr = lp->p_vaddr;
--            p->p_paddr = lp->p_paddr;
--            p->p_offset = lp->p_offset;
--            if (link_info != NULL)
--              p->p_filesz = link_info->relro_end - lp->p_vaddr;
--            else if (m->p_size_valid)
--              p->p_filesz = m->p_size;
--            else
--              abort ();
--            p->p_memsz = p->p_filesz;
-             /* Preserve the alignment and flags if they are valid. The
-                gold linker generates RW/4 for the PT_GNU_RELRO section.
-                It is better for objcopy/strip to honor these attributes
-diff --git a/ld/testsuite/ld-x86-64/pr14207.d 
b/ld/testsuite/ld-x86-64/pr14207.d
-index f6558e7cd7..41f92b8bd8 100644
---- a/ld/testsuite/ld-x86-64/pr14207.d
-+++ b/ld/testsuite/ld-x86-64/pr14207.d
-@@ -13,7 +13,7 @@ Program Headers:
-   LOAD           0x000000 0x0000000000000000 0x0000000000000000 0x0001c8 
0x0001c8 R   0x200000
-   LOAD           0x000b.8 0x0000000000200b.8 0x0000000000200b.8 0x0004.0 
0x000c.8 RW  0x200000
-   DYNAMIC        0x000b.0 0x0000000000200b.0 0x0000000000200b.0 0x0001.0 
0x0001.0 RW  0x8
--  GNU_RELRO      0x000b.8 0x0000000000200b.8 0x0000000000200b.8 0x0004.8 
0x0004.8 R   0x1
-+  GNU_RELRO      0x000b.8 0x0000000000200b.8 0x0000000000200b.8 0x0004.0 
0x0004.8 R   0x1
- 
-  Section to Segment mapping:
-   Segment Sections...
--- 
-2.16.2
-

Added: 0002-PR22829-objcopy-strip-removes-PT_GNU_RELRO-from-lld-.patch
===================================================================
--- 0002-PR22829-objcopy-strip-removes-PT_GNU_RELRO-from-lld-.patch             
                (rev 0)
+++ 0002-PR22829-objcopy-strip-removes-PT_GNU_RELRO-from-lld-.patch     
2018-04-10 21:55:03 UTC (rev 321517)
@@ -0,0 +1,145 @@
+From 3b56a1358768563d9cf320559ebdedfb30f122dd Mon Sep 17 00:00:00 2001
+From: Alan Modra <amo...@gmail.com>
+Date: Mon, 12 Feb 2018 13:06:07 +1030
+Subject: [PATCH] PR22829, objcopy/strip removes PT_GNU_RELRO from lld binaries
+
+lld lays out the relro segment differently to GNU ld, not bothering to
+include the first few bytes of .got.plt and padding out to a page at
+the end of the segment.  This patch teaches binutils to recognize the
+different (and somewhat inferior) layout as valid.
+
+bfd/
+       PR 22829
+       * elf.c (assign_file_positions_for_non_load_sections): Rewrite
+       PT_GNU_RELRO setup.
+ld/
+       * testsuite/ld-x86-64/pr14207.d: Adjust relro p_filesz.
+
+(cherry picked from commit f2731e0c374e5323ce4cdae2bcc7b7fe22da1a6f)
+---
+ bfd/elf.c                        | 78 ++++++++++++++++++++++++++--------------
+ ld/testsuite/ld-x86-64/pr14207.d |  2 +-
+ 2 files changed, 52 insertions(+), 28 deletions(-)
+
+diff --git a/bfd/elf.c b/bfd/elf.c
+index bbaab26918..f5a230cd77 100644
+--- a/bfd/elf.c
++++ b/bfd/elf.c
+@@ -5826,50 +5826,74 @@ assign_file_positions_for_non_load_sections (bfd *abfd,
+     {
+       if (p->p_type == PT_GNU_RELRO)
+       {
+-        const Elf_Internal_Phdr *lp;
+-        struct elf_segment_map *lm;
++        bfd_vma start, end;
+ 
+         if (link_info != NULL)
+           {
+             /* During linking the range of the RELRO segment is passed
+-               in link_info.  */
++               in link_info.  Note that there may be padding between
++               relro_start and the first RELRO section.  */
++            start = link_info->relro_start;
++            end = link_info->relro_end;
++          }
++        else if (m->count != 0)
++          {
++            if (!m->p_size_valid)
++              abort ();
++            start = m->sections[0]->vma;
++            end = start + m->p_size;
++          }
++        else
++          {
++            start = 0;
++            end = 0;
++          }
++
++        if (start < end)
++          {
++            struct elf_segment_map *lm;
++            const Elf_Internal_Phdr *lp;
++            unsigned int i;
++
++            /* Find a LOAD segment containing a section in the RELRO
++               segment.  */
+             for (lm = elf_seg_map (abfd), lp = phdrs;
+                  lm != NULL;
+                  lm = lm->next, lp++)
+               {
+                 if (lp->p_type == PT_LOAD
+-                    && lp->p_vaddr < link_info->relro_end
+                     && lm->count != 0
+-                    && lm->sections[0]->vma >= link_info->relro_start)
++                    && lm->sections[lm->count - 1]->vma >= start
++                    && lm->sections[0]->vma < end)
+                   break;
+               }
+-
+             BFD_ASSERT (lm != NULL);
+-          }
+-        else
+-          {
+-            /* Otherwise we are copying an executable or shared
+-               library, but we need to use the same linker logic.  */
+-            for (lp = phdrs; lp < phdrs + count; ++lp)
++
++            /* Find the section starting the RELRO segment.  */
++            for (i = 0; i < lm->count; i++)
+               {
+-                if (lp->p_type == PT_LOAD
+-                    && lp->p_paddr == p->p_paddr)
++                asection *s = lm->sections[i];
++                if (s->vma >= start
++                    && s->vma < end
++                    && s->size != 0)
+                   break;
+               }
+-          }
++            BFD_ASSERT (i < lm->count);
++
++            p->p_vaddr = lm->sections[i]->vma;
++            p->p_paddr = lm->sections[i]->lma;
++            p->p_offset = lm->sections[i]->filepos;
++            p->p_memsz = end - p->p_vaddr;
++            p->p_filesz = p->p_memsz;
++
++            /* The RELRO segment typically ends a few bytes into
++               .got.plt but other layouts are possible.  In cases
++               where the end does not match any loaded section (for
++               instance is in file padding), trim p_filesz back to
++               correspond to the end of loaded section contents.  */
++            if (p->p_filesz > lp->p_vaddr + lp->p_filesz - p->p_vaddr)
++              p->p_filesz = lp->p_vaddr + lp->p_filesz - p->p_vaddr;
+ 
+-        if (lp < phdrs + count)
+-          {
+-            p->p_vaddr = lp->p_vaddr;
+-            p->p_paddr = lp->p_paddr;
+-            p->p_offset = lp->p_offset;
+-            if (link_info != NULL)
+-              p->p_filesz = link_info->relro_end - lp->p_vaddr;
+-            else if (m->p_size_valid)
+-              p->p_filesz = m->p_size;
+-            else
+-              abort ();
+-            p->p_memsz = p->p_filesz;
+             /* Preserve the alignment and flags if they are valid. The
+                gold linker generates RW/4 for the PT_GNU_RELRO section.
+                It is better for objcopy/strip to honor these attributes
+diff --git a/ld/testsuite/ld-x86-64/pr14207.d 
b/ld/testsuite/ld-x86-64/pr14207.d
+index f6558e7cd7..41f92b8bd8 100644
+--- a/ld/testsuite/ld-x86-64/pr14207.d
++++ b/ld/testsuite/ld-x86-64/pr14207.d
+@@ -13,7 +13,7 @@ Program Headers:
+   LOAD           0x000000 0x0000000000000000 0x0000000000000000 0x0001c8 
0x0001c8 R   0x200000
+   LOAD           0x000b.8 0x0000000000200b.8 0x0000000000200b.8 0x0004.0 
0x000c.8 RW  0x200000
+   DYNAMIC        0x000b.0 0x0000000000200b.0 0x0000000000200b.0 0x0001.0 
0x0001.0 RW  0x8
+-  GNU_RELRO      0x000b.8 0x0000000000200b.8 0x0000000000200b.8 0x0004.8 
0x0004.8 R   0x1
++  GNU_RELRO      0x000b.8 0x0000000000200b.8 0x0000000000200b.8 0x0004.0 
0x0004.8 R   0x1
+ 
+  Section to Segment mapping:
+   Segment Sections...
+-- 
+2.16.2
+

Modified: PKGBUILD
===================================================================
--- PKGBUILD    2018-04-10 21:38:53 UTC (rev 321516)
+++ PKGBUILD    2018-04-10 21:55:03 UTC (rev 321517)
@@ -6,7 +6,7 @@
 
 pkgname=binutils
 pkgver=2.30
-pkgrel=1
+pkgrel=2
 pkgdesc='A set of programs to assemble and manipulate binary and object files'
 arch=(x86_64)
 url='http://www.gnu.org/software/binutils/'
@@ -18,10 +18,13 @@
 replaces=(binutils-multilib)
 options=(staticlibs !distcc !ccache)
 source=(https://ftp.gnu.org/gnu/binutils/binutils-$pkgver.tar.xz{,.sig}
-        0001-x86-64_Dont_pass_output_bfd_to_info-callbacks-minfo.patch)
+        0001-PR22741-objcopy-segfault-on-fuzzed-COFF-object.patch
+        0002-PR22829-objcopy-strip-removes-PT_GNU_RELRO-from-lld-.patch)
 validpgpkeys=(3A24BC1E8FB409FA9F14371813FCEF89DD9E3C4F)
 md5sums=('ffc476dd46c96f932875d1b2e27e929f'
-         'SKIP')
+         'SKIP'
+         '469164f3c93a0e92a697537b60c9806c'
+         '0c679b37e90fb23de60a4d28329b956a')
 
 prepare() {
   mkdir -p binutils-build
@@ -33,10 +36,10 @@
   sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" libiberty/configure
 
   # https://sourceware.org/bugzilla/show_bug.cgi?id=22741
-  #git apply ../0001-PR22741-objcopy-segfault-on-fuzzed-COFF-object.patch
+  patch -p1 -i 
"$srcdir/0001-PR22741-objcopy-segfault-on-fuzzed-COFF-object.patch"
 
   # https://sourceware.org/bugzilla/show_bug.cgi?id=22829
-  #git apply ../0001-PR22829-objcopy-strip-removes-PT_GNU_RELRO-from-lld-.patch
+  patch -p1 -i 
"$srcdir/0002-PR22829-objcopy-strip-removes-PT_GNU_RELRO-from-lld-.patch"
 }
 
 build() {

Reply via email to