From 78a53d07a613bac023cfca7ebdfa6dd356400ac2 Mon Sep 17 00:00:00 2001 From: EpochFlame <82550703+EpochFlame@users.noreply.github.com> Date: Wed, 19 Jan 2022 13:12:11 -0500 Subject: [PATCH] repair calcprogress to work with r40 Co-Authored-By: GibHaltmannKill <67860669+GibHaltmannKill@users.noreply.github.com> --- tools/calcprogress.py | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/tools/calcprogress.py b/tools/calcprogress.py index e19e8813e..fc0337cbc 100644 --- a/tools/calcprogress.py +++ b/tools/calcprogress.py @@ -58,9 +58,9 @@ REGEX_TO_USE = MW_GC_SYMBOL_REGEX TEXT_SECTIONS = ["init", "text"] DATA_SECTIONS = [ -"rodata", "data", "bss", "sdata", "sbss", "sdata2", "sbss2", "file", +"rodata", "data", "bss", "sdata", "sbss", "sdata2", "sbss2", "ctors", "_ctors", "dtors", "ctors$99", "_ctors$99", "ctors$00", "dtors$99", -"extab_", "extabindex_" +"extab_", "extabindex_", "_extab", "_exidx" ] # DOL info @@ -131,7 +131,10 @@ if __name__ == "__main__": first_section = 0 while (symbols[first_section].startswith(".") == False and "section layout" not in symbols[first_section]): first_section += 1 assert(first_section < len(symbols)), "Map file contains no sections!!!" - + + cur_object = None + cur_size = 0 + j = 0 for i in range(first_section, len(symbols)): # New section if (symbols[i].startswith(".") == True or "section layout" in symbols[i]): @@ -141,21 +144,39 @@ if __name__ == "__main__": section_type = SECTION_DATA if (sectionName in DATA_SECTIONS) else SECTION_TEXT # Parse symbols until we hit the next section declaration else: - if ("entry of" in symbols[i]) or ("UNUSED" in symbols[i]): continue + if "UNUSED" in symbols[i]: continue + if "entry of" in symbols[i]: + if j == i - 1: + if section_type == SECTION_TEXT: + decomp_code_size -= cur_size + else: + decomp_data_size -= cur_size + cur_size = 0 + #print(f"Line* {j}: {symbols[j]}") + #print(f"Line {i}: {symbols[i]}") + continue assert(section_type != None), f"Symbol found outside of a section!!!\n{symbols[i]}" match_obj = re.search(REGEX_TO_USE, symbols[i]) # Should be a symbol in ASM (so we discard it) - if (match_obj == None): continue + if (match_obj == None): + #print(f"Line {i}: {symbols[i]}") + continue + # Has the object file changed? + last_object = cur_object + cur_object = match_obj.group("Object").strip() + if last_object != cur_object: continue # Is the symbol a file-wide section? symb = match_obj.group("Symbol") if (symb.startswith("*fill*")) or (symb.startswith(".") and symb[1:] in TEXT_SECTIONS or symb[1:] in DATA_SECTIONS): continue # For sections that don't start with "." if (symb in DATA_SECTIONS): continue # If not, we accumulate the file size + cur_size = int(match_obj.group("Size"), 16) + j = i if (section_type == SECTION_TEXT): - decomp_code_size += int(match_obj.group("Size"), 16) + decomp_code_size += cur_size else: - decomp_data_size += int(match_obj.group("Size"), 16) + decomp_data_size += cur_size # Calculate percentages codeCompletionPcnt = (decomp_code_size / dol_code_size)