elf_mem_map: cleanup
This commit is contained in:
parent
7bdee552ce
commit
676b925c5f
|
|
@ -84,9 +84,7 @@ def get_array_dims(DIE):
|
||||||
return array_dim
|
return array_dim
|
||||||
|
|
||||||
|
|
||||||
def get_struct_members(DIE, size, expand_structs, struct_gaps):
|
def get_struct_members(DIE, entry, expand_structs, struct_gaps):
|
||||||
if not expand_structs or size[0].tag == 'DW_TAG_pointer_type':
|
|
||||||
return []
|
|
||||||
struct_DIE = get_type_def(DIE, 'DW_TAG_structure_type')
|
struct_DIE = get_type_def(DIE, 'DW_TAG_structure_type')
|
||||||
if struct_DIE is None:
|
if struct_DIE is None:
|
||||||
return []
|
return []
|
||||||
|
|
@ -140,8 +138,8 @@ def get_struct_members(DIE, size, expand_structs, struct_gaps):
|
||||||
members = list(sorted(members, key=lambda x: x.off))
|
members = list(sorted(members, key=lambda x: x.off))
|
||||||
last = members[-1]
|
last = members[-1]
|
||||||
last_end = last.off + last.size
|
last_end = last.off + last.size
|
||||||
if size[1] > last_end:
|
if entry.size > last_end:
|
||||||
members.append(Member('*UNKNOWN*', last_end, byte_size - last_end))
|
members.append(Member('*UNKNOWN*', last_end, entry.size - last_end))
|
||||||
|
|
||||||
return members
|
return members
|
||||||
|
|
||||||
|
|
@ -212,7 +210,11 @@ def get_elf_globals(path, expand_structs, struct_gaps=True):
|
||||||
array_dim = get_array_dims(DIE)
|
array_dim = get_array_dims(DIE)
|
||||||
|
|
||||||
# fetch structure members (one level only)
|
# fetch structure members (one level only)
|
||||||
members = get_struct_members(DIE, size, expand_structs, struct_gaps)
|
entry = Entry(name, loc, byte_size, declpos)
|
||||||
|
if not expand_structs or size[0].tag == 'DW_TAG_pointer_type':
|
||||||
|
members = []
|
||||||
|
else:
|
||||||
|
members = get_struct_members(DIE, entry, expand_structs, struct_gaps)
|
||||||
|
|
||||||
def expand_members(entry, members):
|
def expand_members(entry, members):
|
||||||
if len(members) == 0:
|
if len(members) == 0:
|
||||||
|
|
@ -228,10 +230,11 @@ def get_elf_globals(path, expand_structs, struct_gaps=True):
|
||||||
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, declpos), members)
|
expand_members(entry, 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], declpos))
|
grefs.append(Entry(entry.name + '[]', entry.loc,
|
||||||
|
array_dim[0], entry.declpos))
|
||||||
else:
|
else:
|
||||||
# expand array entries
|
# expand array entries
|
||||||
array_pos = loc
|
array_pos = loc
|
||||||
|
|
@ -241,9 +244,8 @@ def get_elf_globals(path, expand_structs, struct_gaps=True):
|
||||||
sfx = ''
|
sfx = ''
|
||||||
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(entry.name + sfx, array_pos,
|
||||||
expand_members(Entry(name + sfx, array_pos, byte_size, declpos), members)
|
byte_size, entry.declpos), members)
|
||||||
|
|
||||||
# advance
|
# advance
|
||||||
if array_inc(array_loc, array_dim):
|
if array_inc(array_loc, array_dim):
|
||||||
break
|
break
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue