diff options
Diffstat (limited to 'meta/recipes-devtools')
4 files changed, 124 insertions, 152 deletions
diff --git a/meta/recipes-devtools/binutils/binutils-2.24.inc b/meta/recipes-devtools/binutils/binutils-2.24.inc index 2a9297bfbc..ef6a4eb7b3 100644 --- a/meta/recipes-devtools/binutils/binutils-2.24.inc +++ b/meta/recipes-devtools/binutils/binutils-2.24.inc | |||
@@ -28,8 +28,7 @@ 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 \ | 31 | file://fix-pr16428.patch \ |
32 | file://fix-pr16428b.patch \ | ||
33 | file://replace_macros_with_static_inline.patch \ | 32 | file://replace_macros_with_static_inline.patch \ |
34 | file://0001-Fix-MMIX-build-breakage-from-bfd_set_section_vma-cha.patch \ | 33 | file://0001-Fix-MMIX-build-breakage-from-bfd_set_section_vma-cha.patch \ |
35 | " | 34 | " |
diff --git a/meta/recipes-devtools/binutils/binutils/fix-pr16428.patch b/meta/recipes-devtools/binutils/binutils/fix-pr16428.patch new file mode 100644 index 0000000000..4584748bb2 --- /dev/null +++ b/meta/recipes-devtools/binutils/binutils/fix-pr16428.patch | |||
@@ -0,0 +1,123 @@ | |||
1 | commit 4199e3b8669d0a36448687850374fdc2ad7240b6 | ||
2 | Author: Alan Modra <amodra@gmail.com> | ||
3 | Date: Wed Jan 15 21:50:55 2014 +1030 | ||
4 | |||
5 | non-PIC references to __ehdr_start in pie and shared | ||
6 | |||
7 | Rather than hacking every backend to not discard dynamic relocations | ||
8 | against an undefined hidden __ehdr_start, make it appear to be defined | ||
9 | early. We want __ehdr_start hidden before size_dynamic_sections so | ||
10 | that it isn't put in .dynsym, but we do need the dynamic relocations | ||
11 | for a PIE or shared library with a non-PIC reference. Defining it | ||
12 | early is wrong if we don't actually define the symbol later to its | ||
13 | proper value. (In some cases we want to leave the symbol undefined, | ||
14 | for example, when the ELF header isn't loaded, and we don't have this | ||
15 | infomation available in before_allocation.) | ||
16 | |||
17 | ld/ | ||
18 | * emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation): Define | ||
19 | __ehdr_start before size_dynamic_sections and restore afterwards. | ||
20 | ld/testsuite/ | ||
21 | * ld-elf/ehdr_start-shared.d: New. | ||
22 | * ld-elf/ehdr_start-userdef.d: xfail frv. | ||
23 | * ld-elf/ehdr_start-weak.d: Likewise. | ||
24 | * ld-elf/ehdr_start.d: Likewise. | ||
25 | |||
26 | Upstream-Status: Backport | ||
27 | |||
28 | diff --git a/ld/emultempl/elf32.em b/ld/emultempl/elf32.em | ||
29 | index 9a2fe89..13f86f0 100644 | ||
30 | --- a/ld/emultempl/elf32.em | ||
31 | +++ b/ld/emultempl/elf32.em | ||
32 | @@ -1480,6 +1480,8 @@ gld${EMULATION_NAME}_before_allocation (void) | ||
33 | const char *rpath; | ||
34 | asection *sinterp; | ||
35 | bfd *abfd; | ||
36 | + struct elf_link_hash_entry *ehdr_start = NULL; | ||
37 | + struct bfd_link_hash_entry ehdr_start_save; | ||
38 | |||
39 | if (is_elf_hash_table (link_info.hash)) | ||
40 | { | ||
41 | @@ -1504,6 +1506,16 @@ gld${EMULATION_NAME}_before_allocation (void) | ||
42 | _bfd_elf_link_hash_hide_symbol (&link_info, h, TRUE); | ||
43 | if (ELF_ST_VISIBILITY (h->other) != STV_INTERNAL) | ||
44 | h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN; | ||
45 | + /* Don't leave the symbol undefined. Undefined hidden | ||
46 | + symbols typically won't have dynamic relocations, but | ||
47 | + we most likely will need dynamic relocations for | ||
48 | + __ehdr_start if we are building a PIE or shared | ||
49 | + library. */ | ||
50 | + ehdr_start = h; | ||
51 | + ehdr_start_save = h->root; | ||
52 | + h->root.type = bfd_link_hash_defined; | ||
53 | + h->root.u.def.section = bfd_abs_section_ptr; | ||
54 | + h->root.u.def.value = 0; | ||
55 | } | ||
56 | } | ||
57 | |||
58 | @@ -1620,6 +1632,14 @@ ${ELF_INTERPRETER_SET_DEFAULT} | ||
59 | |||
60 | if (!bfd_elf_size_dynsym_hash_dynstr (link_info.output_bfd, &link_info)) | ||
61 | einfo ("%P%F: failed to set dynamic section sizes: %E\n"); | ||
62 | + | ||
63 | + if (ehdr_start != NULL) | ||
64 | + { | ||
65 | + /* If we twiddled __ehdr_start to defined earlier, put it back | ||
66 | + as it was. */ | ||
67 | + ehdr_start->root.type = ehdr_start_save.type; | ||
68 | + ehdr_start->root.u = ehdr_start_save.u; | ||
69 | + } | ||
70 | } | ||
71 | |||
72 | EOF | ||
73 | diff --git a/ld/testsuite/ld-elf/ehdr_start-shared.d b/ld/testsuite/ld-elf/ehdr_start-shared.d | ||
74 | new file mode 100644 | ||
75 | index 0000000..c17516a | ||
76 | --- /dev/null | ||
77 | +++ b/ld/testsuite/ld-elf/ehdr_start-shared.d | ||
78 | @@ -0,0 +1,9 @@ | ||
79 | +#source: ehdr_start.s | ||
80 | +#ld: -e _start -shared | ||
81 | +#nm: -n | ||
82 | +#target: *-*-linux* *-*-gnu* *-*-nacl* | ||
83 | +#xfail: cris*-*-* frv-*-* | ||
84 | + | ||
85 | +#... | ||
86 | +[0-9a-f]*000 [Adrt] __ehdr_start | ||
87 | +#pass | ||
88 | diff --git a/ld/testsuite/ld-elf/ehdr_start-userdef.d b/ld/testsuite/ld-elf/ehdr_start-userdef.d | ||
89 | index 2a88e98..b58ae3f 100644 | ||
90 | --- a/ld/testsuite/ld-elf/ehdr_start-userdef.d | ||
91 | +++ b/ld/testsuite/ld-elf/ehdr_start-userdef.d | ||
92 | @@ -2,6 +2,7 @@ | ||
93 | #ld: -e _start -T ehdr_start-userdef.t | ||
94 | #readelf: -Ws | ||
95 | #target: *-*-linux* *-*-gnu* *-*-nacl* | ||
96 | +#xfail: frv-*-* | ||
97 | |||
98 | #... | ||
99 | Symbol table '\.symtab' contains [0-9]+ entries: | ||
100 | diff --git a/ld/testsuite/ld-elf/ehdr_start-weak.d b/ld/testsuite/ld-elf/ehdr_start-weak.d | ||
101 | index 8bd9035..24ae34c 100644 | ||
102 | --- a/ld/testsuite/ld-elf/ehdr_start-weak.d | ||
103 | +++ b/ld/testsuite/ld-elf/ehdr_start-weak.d | ||
104 | @@ -2,6 +2,7 @@ | ||
105 | #ld: -e _start -T ehdr_start-missing.t | ||
106 | #nm: -n | ||
107 | #target: *-*-linux* *-*-gnu* *-*-nacl* | ||
108 | +#xfail: frv-*-* | ||
109 | |||
110 | #... | ||
111 | \s+[wU] __ehdr_start | ||
112 | diff --git a/ld/testsuite/ld-elf/ehdr_start.d b/ld/testsuite/ld-elf/ehdr_start.d | ||
113 | index 52e5b54..d538b66 100644 | ||
114 | --- a/ld/testsuite/ld-elf/ehdr_start.d | ||
115 | +++ b/ld/testsuite/ld-elf/ehdr_start.d | ||
116 | @@ -2,6 +2,7 @@ | ||
117 | #ld: -e _start | ||
118 | #nm: -n | ||
119 | #target: *-*-linux* *-*-gnu* *-*-nacl* | ||
120 | +#xfail: frv-*-* | ||
121 | |||
122 | #... | ||
123 | [0-9a-f]*000 [Adrt] __ehdr_start | ||
diff --git a/meta/recipes-devtools/binutils/binutils/fix-pr16428a.patch b/meta/recipes-devtools/binutils/binutils/fix-pr16428a.patch deleted file mode 100644 index 5b3edfbd03..0000000000 --- a/meta/recipes-devtools/binutils/binutils/fix-pr16428a.patch +++ /dev/null | |||
@@ -1,75 +0,0 @@ | |||
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 deleted file mode 100644 index 35aa7b577d..0000000000 --- a/meta/recipes-devtools/binutils/binutils/fix-pr16428b.patch +++ /dev/null | |||
@@ -1,75 +0,0 @@ | |||
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; | ||