35 lines
1.3 KiB
Diff
35 lines
1.3 KiB
Diff
|
--- 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 '.'. */
|