]> rtime.felk.cvut.cz Git - arc.git/blob - scripts/memory_footprint2_cw.awk
Merge branch 'mikulka' of git@rtime.felk.cvut.cz:arc into mikulka
[arc.git] / scripts / memory_footprint2_cw.awk
1 \r
2\r
3 # A small script that parses a codewarrior mapfile and produces\r
4 # lists of object files and how much .data and .bss they take.\r
5\r
6 # Usage: gawk -f <this_file> <mapfile>\r
7 \r
8 function collect( section ) {\r
9     getline\r
10         getline \r
11         getline \r
12         while( getline > 0 ) {\r
13                 if( $0 ~ /^.$/ ) {\r
14                         break;\r
15                 }\r
16                 \r
17                 if ( $6 ~ /^\.[a-z]/ ) {\r
18                         curr_obj = $7\r
19                         section[curr_obj]=strtonum("0x" $2)\r
20                 } \r
21         }\r
22\r
23 \r
24 # sorting\r
25 # http://stackoverflow.com/questions/5342782/sort-associative-array-with-awk\r
26 \r
27 function sort_and_print( arr ,  indices ,  tmpidx ) {\r
28         \r
29         for (i in arr) {\r
30                 tmpidx[sprintf("%12s", arr[i]),i] = i\r
31         }\r
32         num = asorti(tmpidx)\r
33         j = 0\r
34         for (i=1; i<=num; i++) {\r
35                 split(tmpidx[i], tmp, SUBSEP)\r
36                 indices[++j] = tmp[2]\r
37         }\r
38         for (i=num; i>0; i--) {\r
39                 printf("%35s %d\n",indices[i], arr[indices[i]])\r
40         }\r
41 }\r
42 \r
43 /^\.data/{\r
44         collect(data_sec)\r
45 }\r
46 \r
47 /^\.bss/{\r
48         collect(bss_sec)\r
49 }\r
50 \r
51 END {\r
52         printf " .data\n----------------------------------------------\n"\r
53         sort_and_print(data_sec)\r
54 \r
55         printf " .bss\n----------------------------------------------\n"\r
56         sort_and_print(bss_sec)\r
57 }\r
58 \r
59 \r