From: Alan Modra Date: Tue, 10 Mar 2020 02:52:25 +0000 (+1030) Subject: objdump disassembly of files without symbols X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=41da082238bbc3bbe8bac1b0fbcab716fe7c87f2;p=binutils-gdb.git objdump disassembly of files without symbols ubsan complains about memcpy with a NULL src even when size is zero. * objdump.c (disassemble_section): Don't call qsort unless sym count is at least two. (disassemble_data): Don't call memcpy with NULL src. --- diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 05c29397f83..fc456a2259d 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,9 @@ +2020-03-10 Alan Modra + + * objdump.c (disassemble_section): Don't call qsort unless + sym count is at least two. + (disassemble_data): Don't call memcpy with NULL src. + 2020-03-09 Alan Modra PR 25645 diff --git a/binutils/objdump.c b/binutils/objdump.c index 6eef38f0e28..211be9239f8 100644 --- a/binutils/objdump.c +++ b/binutils/objdump.c @@ -3109,7 +3109,8 @@ disassemble_section (bfd *abfd, asection *section, void *inf) /* Sort the symbols into value and section order. */ compare_section = section; - qsort (sorted_syms, sorted_symcount, sizeof (asymbol *), compare_symbols); + if (sorted_symcount > 1) + qsort (sorted_syms, sorted_symcount, sizeof (asymbol *), compare_symbols); /* Skip over the relocs belonging to addresses below the start address. */ @@ -3376,10 +3377,13 @@ disassemble_data (bfd *abfd) sorted_symcount = symcount ? symcount : dynsymcount; sorted_syms = (asymbol **) xmalloc ((sorted_symcount + synthcount) * sizeof (asymbol *)); - memcpy (sorted_syms, symcount ? syms : dynsyms, - sorted_symcount * sizeof (asymbol *)); + if (sorted_symcount != 0) + { + memcpy (sorted_syms, symcount ? syms : dynsyms, + sorted_symcount * sizeof (asymbol *)); - sorted_symcount = remove_useless_symbols (sorted_syms, sorted_symcount); + sorted_symcount = remove_useless_symbols (sorted_syms, sorted_symcount); + } for (i = 0; i < synthcount; ++i) {