diff options
author | Alan Modra <amodra@gmail.com> | 2023-04-20 07:01:22 +0930 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2023-04-20 09:03:53 +0930 |
commit | 509fdd5a8720250b8e0ddb5691ec94352c85e970 (patch) | |
tree | 0fb2b5f0f1e3262f1b1afaa36f7be495e06a3bc1 /bfd/elf32-sh.c | |
parent | 2605f35cda6ec0710ad87e14912dd4ee537e674e (diff) | |
download | binutils-509fdd5a8720250b8e0ddb5691ec94352c85e970.zip binutils-509fdd5a8720250b8e0ddb5691ec94352c85e970.tar.gz binutils-509fdd5a8720250b8e0ddb5691ec94352c85e970.tar.bz2 |
sh4-linux segfaults running ld testsuite
Segmentation fault
FAIL: pr22269-1 (static pie undefined weak)
and others running "visibility (hidden undef)" tests
No code has any right to access bfd_link_hash_entry u.def without
first checking the type, and SYMBOL_REFERENCES_LOCAL isn't sufficient.
* elf32-sh.c (sh_elf_finish_dynamic_symbol): Don't use relative
relocs in GOT unless symbol is defined.
Diffstat (limited to 'bfd/elf32-sh.c')
-rw-r--r-- | bfd/elf32-sh.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/bfd/elf32-sh.c b/bfd/elf32-sh.c index fdcc587..499233d 100644 --- a/bfd/elf32-sh.c +++ b/bfd/elf32-sh.c @@ -6174,6 +6174,8 @@ sh_elf_finish_dynamic_symbol (bfd *output_bfd, struct bfd_link_info *info, The entry in the global offset table will already have been initialized in the relocate_section function. */ if (bfd_link_pic (info) + && (h->root.type == bfd_link_hash_defined + || h->root.type == bfd_link_hash_defweak) && SYMBOL_REFERENCES_LOCAL (info, h)) { if (htab->fdpic_p) |