| 
															
																@@ -10,7 +10,7 @@ EEPROM_OFFSET = 0x810000 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 FILL_BYTE = b'\0' 
															 | 
															
															 | 
															
																 FILL_BYTE = b'\0' 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																-Entry = namedtuple('Entry', ['name', 'loc', 'size']) 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+Entry = namedtuple('Entry', ['name', 'loc', 'size', 'declpos']) 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 Member = namedtuple('Member', ['name', 'off', 'size']) 
															 | 
															
															 | 
															
																 Member = namedtuple('Member', ['name', 'off', 'size']) 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -160,6 +160,8 @@ def get_elf_globals(path, expand_structs, struct_gaps=True): 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																     grefs = [] 
															 | 
															
															 | 
															
																     grefs = [] 
															 | 
														
													
												
													
														
															| 
															 | 
															
																     for CU in dwarfinfo.iter_CUs(): 
															 | 
															
															 | 
															
																     for CU in dwarfinfo.iter_CUs(): 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        file_entries = dwarfinfo.line_program_for_CU(CU).header["file_entry"] 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+ 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         for DIE in CU.iter_DIEs(): 
															 | 
															
															 | 
															
																         for DIE in CU.iter_DIEs(): 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             # handle only variable types 
															 | 
															
															 | 
															
																             # handle only variable types 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             if DIE.tag != 'DW_TAG_variable': 
															 | 
															
															 | 
															
																             if DIE.tag != 'DW_TAG_variable': 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -196,6 +198,16 @@ def get_elf_globals(path, expand_structs, struct_gaps=True): 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 continue 
															 | 
															
															 | 
															
																                 continue 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             byte_size = size[1] 
															 | 
															
															 | 
															
																             byte_size = size[1] 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            # location of main definition 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            declpos = '' 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            if 'DW_AT_decl_file' in DIE.attributes and \ 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+               'DW_AT_decl_line' in DIE.attributes: 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                line = DIE.attributes['DW_AT_decl_line'].value 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                fname = DIE.attributes['DW_AT_decl_file'].value 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                if fname and fname - 1 < len(file_entries): 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                    fname = file_entries[fname-1].name.decode('ascii') 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                    declpos = '{}:{}'.format(fname, line) 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+ 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             # fetch array dimensions (if known) 
															 | 
															
															 | 
															
																             # fetch array dimensions (if known) 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             array_dim = get_array_dims(DIE) 
															 | 
															
															 | 
															
																             array_dim = get_array_dims(DIE) 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -208,17 +220,18 @@ def get_elf_globals(path, expand_structs, struct_gaps=True): 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 else: 
															 | 
															
															 | 
															
																                 else: 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                     for member in members: 
															 | 
															
															 | 
															
																                     for member in members: 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                         grefs.append(Entry(entry.name + '.' + member.name, 
															 | 
															
															 | 
															
																                         grefs.append(Entry(entry.name + '.' + member.name, 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                                           entry.loc + member.off, member.size)) 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                                           entry.loc + member.off, member.size, 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                                           entry.declpos)) 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																             if byte_size == 1 and len(array_dim) > 1: 
															 | 
															
															 | 
															
																             if byte_size == 1 and len(array_dim) > 1: 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 # likely string, remove one dimension 
															 | 
															
															 | 
															
																                 # likely string, remove one dimension 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 byte_size *= array_dim.pop() 
															 | 
															
															 | 
															
																                 byte_size *= array_dim.pop() 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             if len(array_dim) == 0 or (len(array_dim) == 1 and array_dim[0] == 1): 
															 | 
															
															 | 
															
																             if len(array_dim) == 0 or (len(array_dim) == 1 and array_dim[0] == 1): 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 # plain entry 
															 | 
															
															 | 
															
																                 # plain entry 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                expand_members(Entry(name, loc, byte_size), members) 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                expand_members(Entry(name, loc, byte_size, declpos), members) 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             elif len(array_dim) == 1 and byte_size == 1: 
															 | 
															
															 | 
															
																             elif len(array_dim) == 1 and byte_size == 1: 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 # likely string, avoid expansion 
															 | 
															
															 | 
															
																                 # likely string, avoid expansion 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                grefs.append(Entry(name + '[]', loc, array_dim[0])) 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                grefs.append(Entry(name + '[]', loc, array_dim[0], declpos)) 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             else: 
															 | 
															
															 | 
															
																             else: 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 # expand array entries 
															 | 
															
															 | 
															
																                 # expand array entries 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 array_pos = loc 
															 | 
															
															 | 
															
																                 array_pos = loc 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -229,7 +242,7 @@ def get_elf_globals(path, expand_structs, struct_gaps=True): 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                     for d in range(len(array_dim)): 
															 | 
															
															 | 
															
																                     for d in range(len(array_dim)): 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                         sfx += '[{}]'.format(str(array_loc[d]).rjust(len(str(array_dim[d]-1)), '0')) 
															 | 
															
															 | 
															
																                         sfx += '[{}]'.format(str(array_loc[d]).rjust(len(str(array_dim[d]-1)), '0')) 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                    expand_members(Entry(name + sfx, array_pos, byte_size), members) 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                    expand_members(Entry(name + sfx, array_pos, byte_size, declpos), members) 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																                     # advance 
															 | 
															
															 | 
															
																                     # advance 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                     if array_inc(array_loc, array_dim): 
															 | 
															
															 | 
															
																                     if array_inc(array_loc, array_dim): 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -316,9 +329,9 @@ def annotate_refs(grefs, addr, data, width, gaps=True, overlaps=True): 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																 def print_map(grefs): 
															 | 
															
															 | 
															
																 def print_map(grefs): 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-    print('OFFSET\tSIZE\tNAME') 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    print('OFFSET\tSIZE\tNAME\tDECLPOS') 
															 | 
														
													
												
													
														
															| 
															 | 
															
																     for entry in grefs: 
															 | 
															
															 | 
															
																     for entry in grefs: 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-        print('{:x}\t{}\t{}'.format(entry.loc, entry.size, entry.name)) 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        print('{:x}\t{}\t{}\t{}'.format(entry.loc, entry.size, entry.name, entry.declpos)) 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																 def main(): 
															 | 
															
															 | 
															
																 def main(): 
															 |