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; | ||
