forked from KittenBot/uf2-meowbit
/
meminfo.js
65 lines (59 loc) · 1.65 KB
/
meminfo.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#!/usr/bin/env node
"use strict";
function main() {
let fs = require("fs");
let mfn = process.argv[2]
if (!mfn) {
console.log("usage: node " + process.argv[1] + " build/mytarget/source/myprog.map")
return
}
console.log("Map file: " + mfn)
let map = fs.readFileSync(mfn, "utf8")
let inSect = 0
let byFileRAM = {}
let byFileROM = {}
for (let ln of map.split(/\r?\n/)) {
if (ln == "Linker script and memory map") {
inSect = 1
}
if (/^OUTPUT\(/.test(ln)) {
inSect = 2
}
if (inSect == 1) {
let m = /^\s*(\S*)\s+0x00000([0-9a-f]+)\s+0x([0-9a-f]+)\s+(\S+)/.exec(ln)
if (m) {
let mark = m[1]
if (mark == "*fill*" || mark == ".bss" || mark == ".relocate")
continue;
let addr = parseInt(m[2], 16)
let sz = parseInt(m[3], 16)
let fn = m[4]
if (fn == "load" && mark) fn = mark;
fn = fn.replace(/.*armv6-m/, "")
if (sz) {
let mm = addr < 0x10000000 ? byFileROM : byFileRAM
mm[fn] = (mm[fn] || 0) + sz
}
}
}
}
console.log("*\n* ROM\n*")
dumpMap(byFileROM)
console.log("*\n* RAM\n*")
dumpMap(byFileRAM)
}
function printEnt(sz, s) {
let ff = (" " + sz).slice(-7)
console.log(ff + " " + s)
}
function dumpMap(m) {
let k = Object.keys(m)
k.sort((a, b) => m[a] - m[b])
let sum = 0
for (let s of k) {
printEnt(m[s], s)
sum += m[s]
}
printEnt(sum, "TOTAL")
}
main()