From 6e40f9bb31be2f3656df97a1fcba4d6a30081e24 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Fri, 4 Oct 2024 17:04:59 +0930 Subject: is_target_special_symbol fixes for commit 68bbe1183379 * elf.c (_bfd_elf_is_local_label_name): Don't segv on NULL name. * elf32-v850.c (v850_elf_is_local_label_name): Likewise. * elfnn-riscv.c (riscv_elf_is_target_special_symbol): Likewise. --- bfd/elf.c | 3 +++ bfd/elf32-v850.c | 9 +++++++-- bfd/elfnn-riscv.c | 4 +++- 3 files changed, 13 insertions(+), 3 deletions(-) (limited to 'bfd') diff --git a/bfd/elf.c b/bfd/elf.c index 39ee641..4012d99 100644 --- a/bfd/elf.c +++ b/bfd/elf.c @@ -9725,6 +9725,9 @@ bool _bfd_elf_is_local_label_name (bfd *abfd ATTRIBUTE_UNUSED, const char *name) { + if (!name) + return false; + /* Normal local symbols start with ``.L''. */ if (name[0] == '.' && name[1] == 'L') return true; diff --git a/bfd/elf32-v850.c b/bfd/elf32-v850.c index 85cbcbc..8d61ebb6 100644 --- a/bfd/elf32-v850.c +++ b/bfd/elf32-v850.c @@ -1933,8 +1933,13 @@ v850_elf_info_to_howto_rela (bfd *abfd, static bool v850_elf_is_local_label_name (bfd *abfd ATTRIBUTE_UNUSED, const char *name) { - return ( (name[0] == '.' && (name[1] == 'L' || name[1] == '.')) - || (name[0] == '_' && name[1] == '.' && name[2] == 'L' && name[3] == '_')); + if (!name) + return false; + if (name[0] == '.' && (name[1] == 'L' || name[1] == '.')) + return true; + if (name[0] == '_' && name[1] == '.' && name[2] == 'L' && name[3] == '_') + return true; + return false; } static bool diff --git a/bfd/elfnn-riscv.c b/bfd/elfnn-riscv.c index 90ecc27..4844412 100644 --- a/bfd/elfnn-riscv.c +++ b/bfd/elfnn-riscv.c @@ -5610,9 +5610,11 @@ riscv_maybe_function_sym (const asymbol *sym, static bool riscv_elf_is_target_special_symbol (bfd *abfd, asymbol *sym) { + if (!sym->name) + return false; /* PR27584, local and empty symbols. Since they are usually generated for pcrel relocations. */ - return (!strcmp (sym->name, "") + return (!sym->name[0] || _bfd_elf_is_local_label_name (abfd, sym->name) /* PR27916, mapping symbols. */ || riscv_elf_is_mapping_symbols (sym->name)); -- cgit v1.1