aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2020-08-25 01:55:38 +0930
committerAlan Modra <amodra@gmail.com>2021-01-28 11:51:12 +1030
commite658f42c0fe7e84a0e1eedaea4b29a4e3a23840c (patch)
tree0a67e56219401cc4068185fc68ce4fbaf966a2b0
parentPR26492, ASAN: ppc64_elf_before_check_relocs elf64-ppc.c:4337 (diff)
downloadbinutils-gdb-e658f42c0fe7e84a0e1eedaea4b29a4e3a23840c.tar.gz
binutils-gdb-e658f42c0fe7e84a0e1eedaea4b29a4e3a23840c.tar.bz2
binutils-gdb-e658f42c0fe7e84a0e1eedaea4b29a4e3a23840c.zip
PR26489, ASAN: ppc64_elf_size_stubs elf64-ppc.c:13389
Stub sections are inserted after sec_info is sized, so have higher ids. Test flags that will exclude stub sections before looking at the sec_info array. PR 26489 * elf64-ppc.c (ppc64_elf_size_stubs): Test code_sec->has_toc_reloc and code_sec->makes_toc_func_call before sec_info[code_sec->id]. (cherry picked from commit 918dc783deadc206691dcc20bf8aa6c807c10244)
-rw-r--r--bfd/ChangeLog5
-rw-r--r--bfd/elf64-ppc.c6
2 files changed, 8 insertions, 3 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 8615b08cc5..4d94806609 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -2,6 +2,11 @@
Apply from master
2020-08-25 Alan Modra <amodra@gmail.com>
+ PR 26489
+ * elf64-ppc.c (ppc64_elf_size_stubs): Test code_sec->has_toc_reloc
+ and code_sec->makes_toc_func_call before sec_info[code_sec->id].
+
+ 2020-08-25 Alan Modra <amodra@gmail.com>
PR 26492
* elf64-ppc.c (ppc_hash_table): Test is_elf_hash_table before
accessing elf_hash_table_id.
diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c
index aef161c029..f1bce4a703 100644
--- a/bfd/elf64-ppc.c
+++ b/bfd/elf64-ppc.c
@@ -13504,10 +13504,10 @@ ppc64_elf_size_stubs (struct bfd_link_info *info)
fact a call needing a TOC adjustment. */
if ((code_sec != NULL
&& code_sec->output_section != NULL
- && (htab->sec_info[code_sec->id].toc_off
- != htab->sec_info[section->id].toc_off)
&& (code_sec->has_toc_reloc
- || code_sec->makes_toc_func_call))
+ || code_sec->makes_toc_func_call)
+ && (htab->sec_info[code_sec->id].toc_off
+ != htab->sec_info[section->id].toc_off))
|| (((hash ? hash->elf.other : sym->st_other)
& STO_PPC64_LOCAL_MASK)
== 1 << STO_PPC64_LOCAL_BIT))