objdump disassembly of files without symbols

Alan Modra amodra@gmail.com
Tue Mar 10 03:24:23 GMT 2020


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/objdump.c b/binutils/objdump.c
index 6eef38f0e2..211be9239f 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)
     {

-- 
Alan Modra
Australia Development Lab, IBM



More information about the Binutils mailing list