summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--meta/recipes-devtools/binutils/binutils-2.24.inc2
-rw-r--r--meta/recipes-devtools/binutils/binutils/fix-pr16428a.patch75
-rw-r--r--meta/recipes-devtools/binutils/binutils/fix-pr16428b.patch75
3 files changed, 152 insertions, 0 deletions
diff --git a/meta/recipes-devtools/binutils/binutils-2.24.inc b/meta/recipes-devtools/binutils/binutils-2.24.inc
index 42d4ede229..6415a6fbdc 100644
--- a/meta/recipes-devtools/binutils/binutils-2.24.inc
+++ b/meta/recipes-devtools/binutils/binutils-2.24.inc
@@ -28,6 +28,8 @@ SRC_URI = "\
28 file://fix-pr15815.patch \ 28 file://fix-pr15815.patch \
29 file://fix-pr2404.patch \ 29 file://fix-pr2404.patch \
30 file://fix-pr16476.patch \ 30 file://fix-pr16476.patch \
31 file://fix-pr16428a.patch \
32 file://fix-pr16428b.patch \
31 " 33 "
32 34
33SRC_URI[md5sum] = "e0f71a7b2ddab0f8612336ac81d9636b" 35SRC_URI[md5sum] = "e0f71a7b2ddab0f8612336ac81d9636b"
diff --git a/meta/recipes-devtools/binutils/binutils/fix-pr16428a.patch b/meta/recipes-devtools/binutils/binutils/fix-pr16428a.patch
new file mode 100644
index 0000000000..5b3edfbd03
--- /dev/null
+++ b/meta/recipes-devtools/binutils/binutils/fix-pr16428a.patch
@@ -0,0 +1,75 @@
1From d1ec1e40b5b457c92aaa23f7af40e026e4596a99 Mon Sep 17 00:00:00 2001
2From: H.J. Lu <hjl.tools@gmail.com>
3Date: Tue, 14 Jan 2014 10:48:39 -0800
4Subject: [PATCH 1/1] Don't update reloc count if there are any non pc-relative relocs
5
6 PR ld/16428
7 * elf32-i386.c (elf_i386_allocate_dynrelocs): Don't update reloc
8 count if there are any non pc-relative relocs.
9 * elf64-x86-64.c (elf_x86_64_allocate_dynrelocs): Likewise.
10---
11 bfd/ChangeLog | 7 +++++++
12 bfd/elf32-i386.c | 9 +++++++--
13 bfd/elf64-x86-64.c | 9 +++++++--
14 3 files changed, 21 insertions(+), 4 deletions(-)
15
16Upstream-Status: Backport
17
18#diff --git a/bfd/ChangeLog b/bfd/ChangeLog
19#index a8f1f94..7a49fd1 100644
20#--- a/bfd/ChangeLog
21#+++ b/bfd/ChangeLog
22#@@ -1,3 +1,10 @@
23#+2014-01-14 H.J. Lu <hongjiu.lu@intel.com>
24#+
25#+ PR ld/16428
26#+ * elf32-i386.c (elf_i386_allocate_dynrelocs): Don't update reloc
27#+ count if there are any non pc-relative relocs.
28#+ * elf64-x86-64.c (elf_x86_64_allocate_dynrelocs): Likewise.
29#+
30# 2014-01-14 Michael Hudson-Doyle <michael.hudson@linaro.org>
31# Kugan Vivekanandarajah <kugan.vivekanandarajah@linaro.org>
32#
33diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c
34index 4d391e1..d7f59e5 100644
35--- a/bfd/elf32-i386.c
36+++ b/bfd/elf32-i386.c
37@@ -2368,8 +2368,13 @@ elf_i386_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
38
39 for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
40 {
41- p->count -= p->pc_count;
42- p->pc_count = 0;
43+ /* Don't update reloc count if there are any non
44+ pc-relative relocs. */
45+ if (!h->pointer_equality_needed)
46+ {
47+ p->count -= p->pc_count;
48+ p->pc_count = 0;
49+ }
50 if (p->count == 0)
51 *pp = p->next;
52 else
53diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c
54index edee8ec..999011b 100644
55--- a/bfd/elf64-x86-64.c
56+++ b/bfd/elf64-x86-64.c
57@@ -2463,8 +2463,13 @@ elf_x86_64_allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf)
58
59 for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
60 {
61- p->count -= p->pc_count;
62- p->pc_count = 0;
63+ /* Don't update reloc count if there are any non
64+ pc-relative relocs. */
65+ if (!h->pointer_equality_needed)
66+ {
67+ p->count -= p->pc_count;
68+ p->pc_count = 0;
69+ }
70 if (p->count == 0)
71 *pp = p->next;
72 else
73--
741.7.1
75
diff --git a/meta/recipes-devtools/binutils/binutils/fix-pr16428b.patch b/meta/recipes-devtools/binutils/binutils/fix-pr16428b.patch
new file mode 100644
index 0000000000..35aa7b577d
--- /dev/null
+++ b/meta/recipes-devtools/binutils/binutils/fix-pr16428b.patch
@@ -0,0 +1,75 @@
1From 818d220a6fe3d0512a226188e9164245a02c9185 Mon Sep 17 00:00:00 2001
2From: H.J. Lu <hjl.tools@gmail.com>
3Date: Tue, 14 Jan 2014 16:42:35 -0800
4Subject: [PATCH] Don't discard relocs against __ehdr_start
5
6__ehdr_start will be defined by assign_file_positions_for_non_load_sections
7later.
8
9 PR ld/16428
10 * elf32-i386.c (elf_i386_allocate_dynrelocs): Don't discard relocs
11 against __ehdr_start.
12 * elf64-x86-64.c (elf_x86_64_allocate_dynrelocs): Likewise.
13---
14 bfd/ChangeLog | 7 +++++++
15 bfd/elf32-i386.c | 7 +++++--
16 bfd/elf64-x86-64.c | 7 +++++--
17 3 files changed, 17 insertions(+), 4 deletions(-)
18
19Upstream-Status: Backport
20
21#diff --git a/bfd/ChangeLog b/bfd/ChangeLog
22#index 7d13a35..f4acda0 100644
23#--- a/bfd/ChangeLog
24#+++ b/bfd/ChangeLog
25#@@ -1,5 +1,12 @@
26# 2014-01-14 H.J. Lu <hongjiu.lu@intel.com>
27#
28#+ PR ld/16428
29#+ * elf32-i386.c (elf_i386_allocate_dynrelocs): Don't discard relocs
30#+ against __ehdr_start.
31#+ * elf64-x86-64.c (elf_x86_64_allocate_dynrelocs): Likewise.
32#+
33#+2014-01-14 H.J. Lu <hongjiu.lu@intel.com>
34#+
35# * elf32-i386.c (elf_i386_allocate_dynrelocs): Revert the last
36# change.
37# * elf64-x86-64.c (elf_x86_64_allocate_dynrelocs): Likewise.
38Index: binutils-2.24/bfd/elf32-i386.c
39===================================================================
40--- binutils-2.24.orig/bfd/elf32-i386.c 2014-03-25 10:26:54.818385608 +0000
41+++ binutils-2.24/bfd/elf32-i386.c 2014-03-25 10:26:54.814385607 +0000
42@@ -2395,9 +2395,12 @@
43 }
44
45 /* Also discard relocs on undefined weak syms with non-default
46- visibility. */
47+ visibility. Don't discard relocs against __ehdr_start which
48+ will be defined by assign_file_positions_for_non_load_sections
49+ later. */
50 if (eh->dyn_relocs != NULL
51- && h->root.type == bfd_link_hash_undefweak)
52+ && h->root.type == bfd_link_hash_undefweak
53+ && strcmp (h->root.root.string, "__ehdr_start") != 0)
54 {
55 if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
56 eh->dyn_relocs = NULL;
57Index: binutils-2.24/bfd/elf64-x86-64.c
58===================================================================
59--- binutils-2.24.orig/bfd/elf64-x86-64.c 2014-03-25 10:26:54.818385608 +0000
60+++ binutils-2.24/bfd/elf64-x86-64.c 2014-03-25 10:26:54.814385607 +0000
61@@ -2478,9 +2478,12 @@
62 }
63
64 /* Also discard relocs on undefined weak syms with non-default
65- visibility. */
66+ visibility. Don't discard relocs against __ehdr_start which
67+ will be defined by assign_file_positions_for_non_load_sections
68+ later. */
69 if (eh->dyn_relocs != NULL
70- && h->root.type == bfd_link_hash_undefweak)
71+ && h->root.type == bfd_link_hash_undefweak
72+ && strcmp (h->root.root.string, "__ehdr_start") != 0)
73 {
74 if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
75 eh->dyn_relocs = NULL;