PR29626, Segfault when disassembling ARM code

Alan Modra amodra@gmail.com
Fri Sep 30 01:02:36 GMT 2022


Note: -w diff shown.  The actual patch applied reindents.

	PR 29626
	* arm-dis.c (mapping_symbol_for_insn): Return false on zero
	symtab_size.  Delete later symtab_size test.

diff --git a/opcodes/arm-dis.c b/opcodes/arm-dis.c
index 684c74f7f20..caf3531ae3d 100644
--- a/opcodes/arm-dis.c
+++ b/opcodes/arm-dis.c
@@ -11865,14 +11865,13 @@ mapping_symbol_for_insn (bfd_vma pc, struct disassemble_info *info,
   struct arm_private_data *private_data;
 
   if (info->private_data == NULL
+      || info->symtab_size == 0
       || bfd_asymbol_flavour (*info->symtab) != bfd_target_elf_flavour)
     return false;
 
   private_data = info->private_data;
 
   /* First, look for mapping symbols.  */
-  if (info->symtab_size != 0)
-  {
   if (pc <= private_data->last_mapping_addr)
     private_data->last_mapping_sym = -1;
 
@@ -11884,8 +11883,8 @@ mapping_symbol_for_insn (bfd_vma pc, struct disassemble_info *info,
      are disassembling a different glob of bytes.  As such the optimization
      would not be safe and we should start over.  */
   can_use_search_opt_p
-      = private_data->last_mapping_sym >= 0
-	&& info->stop_offset == private_data->last_stop_offset;
+    = (private_data->last_mapping_sym >= 0
+       && info->stop_offset == private_data->last_stop_offset);
 
   if (n >= private_data->last_mapping_sym && can_use_search_opt_p)
     n = private_data->last_mapping_sym;
@@ -11935,7 +11934,6 @@ mapping_symbol_for_insn (bfd_vma pc, struct disassemble_info *info,
 	    }
 	}
     }
-  }
 
   /* If no mapping symbol was found, try looking up without a mapping
      symbol.  This is done by walking up from the current PC to the nearest

-- 
Alan Modra
Australia Development Lab, IBM


More information about the Binutils mailing list