diff options
author | Alexey Neyman <stilor@att.net> | 2022-02-11 02:00:59 (GMT) |
---|---|---|
committer | Alexey Neyman <stilor@att.net> | 2022-02-11 08:47:51 (GMT) |
commit | 86c2982568de1ad4d4cc12a65b19231331484405 (patch) | |
tree | 2e0b3fb78c30877c0c152d59d0e0fff817b73822 /packages/binutils/2.37/0009-arc-Fix-potential-invalid-pointer-access-when-fixing.patch | |
parent | 1210b0c2f45e32ef0867ca00e16b6aadb6a81bf9 (diff) |
Run patches thru `manage-packages -P`
This refreshes the line numbers, removes any fuzz (which would make any
future forward ports easier) and standardizes the patch/file headers
(which makes them easier to read).
Signed-off-by: Alexey Neyman <stilor@att.net>
Diffstat (limited to 'packages/binutils/2.37/0009-arc-Fix-potential-invalid-pointer-access-when-fixing.patch')
-rw-r--r-- | packages/binutils/2.37/0009-arc-Fix-potential-invalid-pointer-access-when-fixing.patch | 217 |
1 files changed, 0 insertions, 217 deletions
diff --git a/packages/binutils/2.37/0009-arc-Fix-potential-invalid-pointer-access-when-fixing.patch b/packages/binutils/2.37/0009-arc-Fix-potential-invalid-pointer-access-when-fixing.patch deleted file mode 100644 index ade3180..0000000 --- a/packages/binutils/2.37/0009-arc-Fix-potential-invalid-pointer-access-when-fixing.patch +++ /dev/null @@ -1,217 +0,0 @@ -From 29d31b4ed96fcbc774740fac91ef77cb3d62a714 Mon Sep 17 00:00:00 2001 -From: Claudiu Zissulescu <claziss@synopsys.com> -Date: Tue, 17 Aug 2021 13:44:17 +0300 -Subject: [PATCH] arc: Fix potential invalid pointer access when fixing got - symbols. - -When statically linking, it can arrive to an undefined weak symbol of -which its value cannot be determined. However, we are having pieces of -code which doesn't take this situation into account, leading to access -a structure which may not be initialized. Fix this situation and add a -test. - -bfd/ -xxxx-xx-xx Cupertino Miranda <cmiranda@synopsys.com> - Claudiu Zissulescu <claziss@synopsys.com> - - * arc-got.h (arc_static_sym_data): New structure. - (get_static_sym_data): New function. - (relocate_fix_got_relocs_for_got_info): Move the computation fo - symbol value and section to above introduced function, and use - this new function. - -ld/testsuite/ -xxxx-xx-xx Claudiu Zissulescu <claziss@synopsys.com> - - * ld-arc/got-weak.d: New file. - * ld-arc/got-weak.s: Likewise. - -For all the gory details please refer to [1]. -Original fix could be found here [2]. - -[1] https://github.com/foss-for-synopsys-dwc-arc-processors/toolchain/issues/402 -[2] https://github.com/foss-for-synopsys-dwc-arc-processors/binutils-gdb/commit/29d31b4ed96fcbc774740fac91ef77cb3d62a714 - -Signed-off-by: Claudiu Zissulescu <claziss@synopsys.com> -[Added links to the origins] -Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com> ---- - bfd/arc-got.h | 94 ++++++++++++++++++++++++----------------- - ld/testsuite/ld-arc/got-weak.d | 12 +++++ - ld/testsuite/ld-arc/got-weak.s | 7 +++ - 3 files changed, 76 insertions(+), 37 deletions(-) - create mode 100644 ld/testsuite/ld-arc/got-weak.d - create mode 100644 ld/testsuite/ld-arc/got-weak.s - ---- a/bfd/arc-got.h -+++ b/bfd/arc-got.h -@@ -262,6 +262,48 @@ - return true; - } - -+struct arc_static_sym_data { -+ bfd_vma sym_value; -+ const char *symbol_name; -+}; -+ -+static struct arc_static_sym_data -+get_static_sym_data (unsigned long r_symndx, -+ Elf_Internal_Sym *local_syms, -+ asection **local_sections, -+ struct elf_link_hash_entry *h, -+ struct arc_relocation_data *reloc_data) -+{ -+ static const char local_name[] = "(local)"; -+ struct arc_static_sym_data ret = { 0, NULL }; -+ -+ if (h != NULL) -+ { -+ BFD_ASSERT (h->root.type != bfd_link_hash_undefweak -+ && h->root.type != bfd_link_hash_undefined); -+ /* TODO: This should not be here. */ -+ reloc_data->sym_value = h->root.u.def.value; -+ reloc_data->sym_section = h->root.u.def.section; -+ -+ ret.sym_value = h->root.u.def.value -+ + h->root.u.def.section->output_section->vma -+ + h->root.u.def.section->output_offset; -+ -+ ret.symbol_name = h->root.root.string; -+ } -+ else -+ { -+ Elf_Internal_Sym *sym = local_syms + r_symndx; -+ asection *sec = local_sections[r_symndx]; -+ -+ ret.sym_value = sym->st_value -+ + sec->output_section->vma -+ + sec->output_offset; -+ -+ ret.symbol_name = local_name; -+ } -+ return ret; -+} - - static bfd_vma - relocate_fix_got_relocs_for_got_info (struct got_entry ** list_p, -@@ -290,38 +332,7 @@ - && SYMBOL_REFERENCES_LOCAL (info, h)))) - { - const char ATTRIBUTE_UNUSED *symbol_name; -- static const char local_name[] = "(local)"; -- asection *tls_sec = NULL; -- bfd_vma sym_value = 0; -- -- if (h != NULL) -- { -- /* TODO: This should not be here. */ -- reloc_data->sym_value = h->root.u.def.value; -- reloc_data->sym_section = h->root.u.def.section; -- -- sym_value = h->root.u.def.value -- + h->root.u.def.section->output_section->vma -- + h->root.u.def.section->output_offset; -- -- tls_sec = elf_hash_table (info)->tls_sec; -- -- symbol_name = h->root.root.string; -- } -- else -- { -- Elf_Internal_Sym *sym = local_syms + r_symndx; -- asection *sec = local_sections[r_symndx]; -- -- sym_value = sym->st_value -- + sec->output_section->vma -- + sec->output_offset; -- -- tls_sec = elf_hash_table (info)->tls_sec; -- -- symbol_name = local_name; -- } -- -+ asection *tls_sec = elf_hash_table (info)->tls_sec; - - if (entry && !entry->processed) - { -@@ -335,8 +346,12 @@ - if (h == NULL || h->forced_local - || !elf_hash_table (info)->dynamic_sections_created) - { -+ struct arc_static_sym_data tmp = -+ get_static_sym_data (r_symndx, local_syms, local_sections, -+ h, reloc_data); -+ - bfd_put_32 (output_bfd, -- sym_value - sec_vma -+ tmp.sym_value - sec_vma - + (elf_hash_table (info)->dynamic_sections_created - ? 0 - : (align_power (0, -@@ -355,7 +370,7 @@ - + entry->offset - + (entry->existing_entries == TLS_GOT_MOD_AND_OFF - ? 4 : 0)), -- symbol_name); -+ tmp.symbol_name); - } - } - break; -@@ -366,8 +381,12 @@ - bfd_vma ATTRIBUTE_UNUSED sec_vma - = tls_sec->output_section->vma; - -+ struct arc_static_sym_data tmp = -+ get_static_sym_data (r_symndx, local_syms, local_sections, -+ h, reloc_data); -+ - bfd_put_32 (output_bfd, -- sym_value - sec_vma -+ tmp.sym_value - sec_vma - + (elf_hash_table (info)->dynamic_sections_created - ? 0 - : (align_power (TCB_SIZE, -@@ -386,7 +405,7 @@ - + entry->offset - + (entry->existing_entries == TLS_GOT_MOD_AND_OFF - ? 4 : 0)), -- symbol_name); -+ tmp.symbol_name); - } - break; - -@@ -415,7 +434,8 @@ - "@ %#08lx for sym %s in got offset %#lx\n", - (long) (reloc_data->sym_value + sec_vma), - (long) (htab->sgot->output_section->vma -- + htab->sgot->output_offset + entry->offset), -+ + htab->sgot->output_offset -+ + entry->offset), - symbol_name, - (long) entry->offset); - } ---- /dev/null -+++ b/ld/testsuite/ld-arc/got-weak.d -@@ -0,0 +1,12 @@ -+#source: got-weak.s -+#as: -+#ld: -Bstatic -+#objdump: -d -+ -+[^:]*: file format elf32-.*arc -+ -+ -+Disassembly of section \.text: -+ -+00000100 <.*>: -+ 100: 2730 7f80 0000 2014 ld r0,\[pcl,0x2014\].* ---- /dev/null -+++ b/ld/testsuite/ld-arc/got-weak.s -@@ -0,0 +1,7 @@ -+ .cpu archs -+ -+ .weak symb -+ .global __start -+ .text -+__start: -+ ld r0,[pcl,@symb@gotpc] |