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 <yetist@gmail.com> Suggested-by: Wang Xuerui <i@xen0n.name> Signed-off-by: Xi Ruoyao <xry111@mengyan1223.wang>
This commit is contained in:
parent
c54a62119a
commit
83c5f3aea9
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user