diff options
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 | ||
33 | SRC_URI[md5sum] = "e0f71a7b2ddab0f8612336ac81d9636b" | 35 | SRC_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 @@ | |||
1 | From d1ec1e40b5b457c92aaa23f7af40e026e4596a99 Mon Sep 17 00:00:00 2001 | ||
2 | From: H.J. Lu <hjl.tools@gmail.com> | ||
3 | Date: Tue, 14 Jan 2014 10:48:39 -0800 | ||
4 | Subject: [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 | |||
16 | Upstream-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 | # | ||
33 | diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c | ||
34 | index 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 | ||
53 | diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c | ||
54 | index 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 | -- | ||
74 | 1.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 @@ | |||
1 | From 818d220a6fe3d0512a226188e9164245a02c9185 Mon Sep 17 00:00:00 2001 | ||
2 | From: H.J. Lu <hjl.tools@gmail.com> | ||
3 | Date: Tue, 14 Jan 2014 16:42:35 -0800 | ||
4 | Subject: [PATCH] Don't discard relocs against __ehdr_start | ||
5 | |||
6 | __ehdr_start will be defined by assign_file_positions_for_non_load_sections | ||
7 | later. | ||
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 | |||
19 | Upstream-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. | ||
38 | Index: 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; | ||
57 | Index: 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; | ||