How can I graphically display a memory layout from a .map file?

My gcc build toolchain creates a .map file. How to graphically display a memory card?

+57
c ++ c linker
Sep 07 '08 at 13:26
source share
2 answers

Here is the beginning of a script in Python. It loads the map file into the list of sections and symbols (first half). Then it displays the map using HTML (or do whatever you want with the sections and symbols lists).

You can control the script by changing the following lines:

 with open('t.map') as f: colors = ['9C9F84', 'A97D5D', 'F7DCB4', '5C755E'] total_height = 32.0 

map2html.py

 from __future__ import with_statement import re class Section: def __init__(self, address, size, segment, section): self.address = address self.size = size self.segment = segment self.section = section def __str__(self): return self.section+"" class Symbol: def __init__(self, address, size, file, name): self.address = address self.size = size self.file = file self.name = name def __str__(self): return self.name #=============================== # Load the Sections and Symbols # sections = [] symbols = [] with open('t.map') as f: in_sections = True for line in f: m = re.search('^([0-9A-Fx]+)\s+([0-9A-Fx]+)\s+((\[[ 0-9]+\])|\w+)\s+(.*?)\s*$', line) if m: if in_sections: sections.append(Section(eval(m.group(1)), eval(m.group(2)), m.group(3), m.group(5))) else: symbols.append(Symbol(eval(m.group(1)), eval(m.group(2)), m.group(3), m.group(5))) else: if len(sections) > 0: in_sections = False #=============================== # Gererate the HTML File # colors = ['9C9F84', 'A97D5D', 'F7DCB4', '5C755E'] total_height = 32.0 segments = set() for s in sections: segments.add(s.segment) segment_colors = dict() i = 0 for s in segments: segment_colors[s] = colors[i % len(colors)] i += 1 total_size = 0 for s in symbols: total_size += s.size sections.sort(lambda a,b: a.address - b.address) symbols.sort(lambda a,b: a.address - b.address) def section_from_address(addr): for s in sections: if addr >= s.address and addr < (s.address + s.size): return s return None print "<html><head>" print " <style>a { color: black; text-decoration: none; font-family:monospace }</style>" print "<body>" print "<table cellspacing='1px'>" for sym in symbols: section = section_from_address(sym.address) height = (total_height/total_size) * sym.size font_size = 1.0 if height > 1.0 else height print "<tr style='background-color:#%s;height:%gem;line-height:%gem;font-size:%gem'><td style='overflow:hidden'>" % \ (segment_colors[section.segment], height, height, font_size) print "<a href='#%s'>%s</a>" % (sym.name, sym.name) print "</td></tr>" print "</table>" print "</body></html>" 

And here's the poor rendering of the HTML output:

Map

+23
Sep 21 '08 at 20:45
source share

I wrote a C # program to display information in a map file along with information that is not usually present in a map file (for example, static characters if you can use binutils ). The code is available here . In short, it parses the map file and also uses binutils (if available) to collect additional information. To run it, you need to download the code and run the project under the visual studio, go to the path to the map file and click Analyze .

Note. Only works for GCC/LD card files

Screenshot: [ 3]

+4
Mar 09 '16 at 14:01
source share



All Articles