From 3bf616a63c18ba9d5cc281f9b0ca6aa7d8fc6e99 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 31 Mar 2019 16:36:57 -0400 Subject: [PATCH] generate_memory_usage_report/gcc_map_reader BUG? #721 --- java_tools/gcc_map_reader.jar | Bin 9447 -> 9585 bytes .../src/rusefi/GccMapReader.java | 32 ++++++++++-------- .../src/rusefi/GccMapReaderTest.java | 17 +++++++--- 3 files changed, 30 insertions(+), 19 deletions(-) diff --git a/java_tools/gcc_map_reader.jar b/java_tools/gcc_map_reader.jar index 57a95de06a72fdee7d238f37fb26c1b7d3149619..af6baf723b56aab276074fc9627b7b799b2f507b 100644 GIT binary patch literal 9585 zcmeI2g;SL4+sBvgZbWKH>0CfUnnhws0g+mkj+NRa6^ZNtdcetOqpP0F>?|t1f_dIjWXTFf@c=)6M05JfNg1Tb>_>VyX zzz67SnyQL`4Yb5gdjJ5)|ArC+lFvi+SHqYB&%@)+C;j>SD^y?A0Ia2HVk)YyrJqns z+96JT?Xc|!I#GeAa|!ZljNCvK4$qK!?NG?GNK14!*VO#x5LsYs-7FjG{8ZvG2^BUX zXM`i0EQ$&0e5;_3CY`Pf8?SsP?1#%|Xia3;6b<4=QH{h)VP3L&<%!5I^l1T?#uSQL zgq{sqtL>P2>5-8MKy3dk^}IB*u)pn!=)6=Pe_xoBtJt4G#D8p^sIA2rjtc;k;{yPk zzk{@)PSon7masa1Ylui~j#@5G)JQRP_VxHyCyfLNBZZ@EoH%sQ@K^%b4Z>m7Ke zG9LyIC}z~gjgG$l_Ih{vbZRtiCd14)wYrU_kptKZVLFq6G}N?Q3MHVDxrZ!SsEyz! zHyR8RW46fGh}lkiFg3HhjjZj@H?LiM)i7dZAKUy0hG3&L_v|{TAdfcU2w)rkfQW4x zccr~O^XW69S*YQv#&h1vq-n=@8%e+!tK8s%9cIQv{l>L8P{3|8?DdCPk@nn<{^&WO zz#gARi@qBo*$v;kaxKhS>1;6Kun*cR)h|%<#N`RhsrFNHi~DW}LyNGs%Grn}8mc0Cf8>ZK|=#s#0l1*iHk@lx&^4+=5BzXqSwe#7` zY~Hozo1Av#tBegVcbi;?woEfnCI$wkqf^`{E8iwPn>`+w4hL_ZWU{!EC|g8!l)6UWin>PYwJ^N^_`)r|ZDRYW z6Ve8a3QO>v4&?FO0U8DEV`dd%2gb;WG=L<*DLDHgyziMUvCGE?NMz;b{^(V0=qiYUkxhHe+%2*4Nl(9?Gl~4 zL)oTva%Tq1 zpZ`{pVAy^1A|Xvuxp?9EQ6B0$PhRS6D^&oZM-I5WXFbE@sMqsgN%1i(FXMJ=0t<_6 z`tDtnFL|{xFjcac+)X@Nx-Y4zz~GWAA!4v<_D6gBmfaIyxO4EGJI=PTsvC39I7V}& z%!TJXSba76+wk*{5 z>F>ux!Hra2?%UoRpS`!ahcHPu{7On5kjoxUCSN*7?>1w9) zv6ctzV@tyzXQ??c3?vHrS{oKB;H5)6X;7GgOi^8DOJ;_eCw$OB#uoYX>1ihTy;NeE z1(OR$`@fMtKy(e8yGsbtzUhQ8CMELt3qezjK_ZF`fxER0k1C1BDrw0tJ<~W+qb0F* zVh*eR!gN_m$`vX%KEn`4jS7usm+7lFIHAUiuE6?9d46?VGOxUv$(Y_jm6 z(Tt#}&`DrDeL9(n|&wnZ9vO#MT^!@Rs?cbFXaz zt9mvKVe&I1ygL_o`)a%?YDjF+p24;qNIr(HZCcd-M1sCQEvpI#&zJHe**C>Yua4L`LLcfzWK~KGUkSUrcg5J+luGRiVXdJi zefm~%#SvFn$r8zl1t#r?q_q6r!zJe{VM(^)l`o}_uY|>EH_f&h@4BBvUx{l}fvw;6 zRtT6NP7!UzY%`ZLy6FWlE`o_oh%a+OMrfpDodWkAM{~t#1@}@wMQKy5T^!67bb%@4 zD>K1EB8!3ycRC*ml$xDnZ?I{rVFVn=R{{oPeD>mw82zLwx1^pN^MHxO#;VgnYA_M4 zI)9r5x!%@=XQq2<*d`cyl{fsRj$JUKCjQfxy3;w&*EriL?Y*xM>GUPBDLXIjwJvUx z*Au9#XLqL9dl_bv%=X-P7f9cZoM9eXHVqPiQfiKE8L>MlK5NRnse>oc2~7%0D$mmH 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 literal 9447 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 diff --git a/java_tools/gcc_map_reader/src/rusefi/GccMapReader.java b/java_tools/gcc_map_reader/src/rusefi/GccMapReader.java index 76444f0157..21da0a3722 100644 --- a/java_tools/gcc_map_reader/src/rusefi/GccMapReader.java +++ b/java_tools/gcc_map_reader/src/rusefi/GccMapReader.java @@ -1,8 +1,9 @@ package rusefi; -import java.io.*; +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; import java.util.ArrayList; -import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.regex.Matcher; @@ -16,8 +17,9 @@ import java.util.regex.Pattern; */ public class GccMapReader { private static final Pattern MULTI_LINE_PATTERN = Pattern.compile(".*0x(\\S*)(.*)"); - private static final String REGIONS[] = {"bss", "text", "data", "rodata"}; + private static final String[] REGIONS = {"bss", "text", "data", "rodata"}; private static final Pattern SINGLE_LINE_PATTERN = Pattern.compile(".*\\.(bss|text|data|rodata)\\.(\\S*).*0x.*0x(\\S*)(.*)"); + static final String START_OF_DATA_TAG = "Linker script and memory map"; public static void main(String[] args) throws IOException { if (args.length != 1) { @@ -42,7 +44,7 @@ public class GccMapReader { private static void processAndPrint(List lines, String region) { List records = process(lines, region); - Collections.sort(records, Comparator.reverseOrder()); + records.sort(Comparator.reverseOrder()); int totalSize = 0; for (Record record : records) { @@ -55,9 +57,15 @@ public class GccMapReader { static List process(List lines, String region) { - List result = new ArrayList(); + List result = new ArrayList<>(); + boolean isUsefulData = false; for (int i = 0; i < lines.size(); i++) { String line = lines.get(i); + if (line.contains(START_OF_DATA_TAG)) { + isUsefulData = true; + } + if (!isUsefulData) + continue; if (!line.contains("." + region + ".")) continue; debug("Got: " + line); @@ -118,6 +126,7 @@ public class GccMapReader { String region = m1.group(i++); String suffix = m1.group(i++); String sizeString = m1.group(i++); + //noinspection UnusedAssignment String prefix = m1.group(i++); String name = prefix + "@" + suffix; @@ -135,6 +144,7 @@ public class GccMapReader { result.add(new Record(size, name, region)); } + @SuppressWarnings("unused") private static void debug(String s) { // System.out.println(s); } @@ -144,7 +154,7 @@ public class GccMapReader { private final String name; private String region; - public Record(int size, String name, String region) { + Record(int size, String name, String region) { this.size = size; this.name = name; this.region = region; @@ -167,16 +177,8 @@ public class GccMapReader { '}'; } - public int getSize() { + int getSize() { return size; } - - public String getName() { - return name; - } - - public String getRegion() { - return region; - } } } diff --git a/java_tools/gcc_map_reader/src/rusefi/GccMapReaderTest.java b/java_tools/gcc_map_reader/src/rusefi/GccMapReaderTest.java index 1d71366642..66065a603d 100644 --- a/java_tools/gcc_map_reader/src/rusefi/GccMapReaderTest.java +++ b/java_tools/gcc_map_reader/src/rusefi/GccMapReaderTest.java @@ -3,7 +3,6 @@ package rusefi; import org.junit.Test; import java.util.Arrays; -import java.util.Collections; import java.util.List; import static org.junit.Assert.assertEquals; @@ -13,8 +12,13 @@ public class GccMapReaderTest { private static final String BSS = "bss"; @Test - public void testSingleLine() { - List r = GccMapReader.process(Collections.singletonList(" .bss.PWMD1 0x1fff9a0c 0x18 build_kinetis/obj/hal_pwm_lld.o"), BSS); + public void testSimpleLinesWithTagInTheMiddle() { + List r = GccMapReader.process(Arrays.asList( + " .bss.PWMD1 0x1fff9a0c 0x18 build_kinetis/obj/hal_pwm_lld.o", + GccMapReader.START_OF_DATA_TAG, + " .bss.PWMD2 0x1fff9a0c 0x18 build_kinetis/obj/hal_pwm_lld.o" + + ), BSS); assertNotNull(r); assertEquals(1, r.size()); assertEquals(0x18, r.get(0).getSize()); @@ -23,6 +27,7 @@ public class GccMapReaderTest { @Test public void testMultiLine() { List r = GccMapReader.process(Arrays.asList( + GccMapReader.START_OF_DATA_TAG, " .bss._ZL12turnOffEvent", "0x1fff9db8 0x60 build_kinetis/obj/aux_valves.o"), BSS); assertNotNull(r); @@ -33,6 +38,7 @@ public class GccMapReaderTest { @Test public void testThreeLine() { List r = GccMapReader.process(Arrays.asList( + GccMapReader.START_OF_DATA_TAG, " .bss.ch_idle_thread_wa", " 0x1fff8d10 0x610 build_kinetis/obj/chsys.o", " 0x1fff8d10 ch_idle_thread_wa"), BSS); @@ -44,6 +50,7 @@ public class GccMapReaderTest { @Test public void testIssue() { List r = GccMapReader.process(Arrays.asList( + GccMapReader.START_OF_DATA_TAG, ".bss 0x1fff8d10 0xf2e4 load address 0x0002b1bc", " 0x1fff8d10 . = ALIGN (0x4)", " 0x1fff8d10 _bss_start = .", @@ -62,7 +69,9 @@ public class GccMapReaderTest { @Test public void testData() { - String[] strings = {" .text._dbg_check_suspend", + String[] strings = { + GccMapReader.START_OF_DATA_TAG, + " .text._dbg_check_suspend", " 0x00000000 0x1c build_kinetis/obj/chdebug.o", " .rodata._dbg_check_disable.str1.4", " 0x00000000 0x5 build_kinetis/obj/chdebug.o",