--- binutils.orig/binutils/objdump.c 2023-03-03 11:37:39.209614222 +0000 +++ binutils-2.35.2/binutils/objdump.c 2023-03-03 11:39:45.492428807 +0000 @@ -1090,20 +1090,19 @@ compare_symbols (const void *ap, const v return 1; } - if (bfd_get_flavour (bfd_asymbol_bfd (a)) == bfd_target_elf_flavour + /* Sort larger size ELF symbols before smaller. See PR20337. */ + bfd_vma asz = 0; + if ((a->flags & (BSF_SECTION_SYM | BSF_SYNTHETIC)) == 0 + && bfd_get_flavour (bfd_asymbol_bfd (a)) == bfd_target_elf_flavour) + asz = ((elf_symbol_type *) a)->internal_elf_sym.st_size; + + bfd_vma bsz = 0; + if ((b->flags & (BSF_SECTION_SYM | BSF_SYNTHETIC)) == 0 && bfd_get_flavour (bfd_asymbol_bfd (b)) == bfd_target_elf_flavour) - { - bfd_vma asz, bsz; + bsz = ((elf_symbol_type *) b)->internal_elf_sym.st_size; - asz = 0; - if ((a->flags & (BSF_SECTION_SYM | BSF_SYNTHETIC)) == 0) - asz = ((elf_symbol_type *) a)->internal_elf_sym.st_size; - bsz = 0; - if ((b->flags & (BSF_SECTION_SYM | BSF_SYNTHETIC)) == 0) - bsz = ((elf_symbol_type *) b)->internal_elf_sym.st_size; - if (asz != bsz) - return asz > bsz ? -1 : 1; - } + if (asz != bsz) + return asz > bsz ? -1 : 1; /* Symbols that start with '.' might be section names, so sort them after symbols that don't start with '.'. */