[prev in list] [next in list] [prev in thread] [next in thread] 

List:       binutils
Subject:    PR29626, Segfault when disassembling ARM code
From:       Alan Modra via Binutils <binutils () sourceware ! org>
Date:       2022-09-30 0:57:38
Message-ID: YzZALNAOwb0TtzN7 () squeak ! grove ! modra ! org
[Download RAW message or body]

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
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic