From 83c5f3aea9a0d55be73e6d5dedd653fc32f0d6d3 Mon Sep 17 00:00:00 2001 From: Xi Ruoyao Date: Fri, 29 Apr 2022 01:25:20 +0800 Subject: [PATCH] loongarch: Don't check ABI flags if no code section Various packages (glib and gtk4 for example) produces data-only objects using `ld -r -b binary` or `objcopy`, with no elf header flags set. But these files also have no code sections, so they should be compatible with all ABIs. bfd/ * elfnn-loongarch.c (elfNN_loongarch_merge_private_bfd_data): Skip ABI checks if the input has no code sections. Reported-by: Wu Xiaotian Suggested-by: Wang Xuerui Signed-off-by: Xi Ruoyao --- bfd/elfnn-loongarch.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/bfd/elfnn-loongarch.c b/bfd/elfnn-loongarch.c index 3c7268c02b8..307757f5dd5 100644 --- a/bfd/elfnn-loongarch.c +++ b/bfd/elfnn-loongarch.c @@ -389,6 +389,27 @@ elfNN_loongarch_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info) if (!_bfd_elf_merge_object_attributes (ibfd, info)) return false; + /* If the input BFD is not a dynamic object and it does not contain any + non-data sections, do not account its ABI. For example, various + packages produces such data-only relocatable objects with + `ld -r -b binary` or `objcopy`, and these objects have zero e_flags. + But they are compatible with all ABIs. */ + if (!(ibfd->flags & DYNAMIC)) + { + asection *sec; + bool have_code_sections = false; + for (sec = ibfd->sections; sec != NULL; sec = sec->next) + if ((bfd_section_flags (sec) + & (SEC_LOAD | SEC_CODE | SEC_HAS_CONTENTS)) + == (SEC_LOAD | SEC_CODE | SEC_HAS_CONTENTS)) + { + have_code_sections = true; + break; + } + if (!have_code_sections) + return true; + } + if (!elf_flags_init (obfd)) { elf_flags_init (obfd) = true; -- 2.30.2