Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GCC Map Analyzer

A single-file, browser-based viewer for GNU ld / binutils linker map files.

Drop a .map file onto the page and get an interactive breakdown of where your firmware's flash and RAM actually went — by memory region, output section, object file, library, input section and symbol.

Live version


Target support

The tool was developed and tested against STM32 (arm-none-eabi) projects, so that is where it is best proven. It should, however, work with any GNU ld / binutils map file: no section names, target or vendor conventions are hard-coded. Whether a section occupies bytes in the image is deduced from the map's own structure — ld's OUTPUT() marker, run-time address aliasing, overlapping ranges, and whether the load-address counter advanced. Sections the map genuinely cannot resolve are flagged as unconfirmed rather than guessed at, and any classification can be overridden by hand.

That should cover other vendors and other architectures — RISC-V, AVR, MSP430, Xtensa, MIPS, PowerPC — as well as hosted (non-bare-metal) targets. If a Memory Configuration block is absent, regions are synthesised from the section layout. Reports of maps that parse badly are welcome.


Features

  • Tree view — Region → Section → Object file → Symbols, or Region → Section → Input section → Symbols. Sort by size, address or name; filter across symbols, objects and sections; toggle hex sizes and zero-size entries.
  • Memory map view — a graphical, zoomable layout of the address space at symbol, input-section or output-section granularity. Colour by output section, object file or library; scale to the used range or the full region; highlight matching items; optionally show unused gaps.
  • Sections view — every output section with its VMA, LMA, size and how it is being counted (in the image / no image bytes / not in the image at all). Any classification can be overridden manually, and all totals update.
  • CSV export — flat Region, Section, Archive, Object, InputSection, Symbol, Address, Size rows for spreadsheet or script analysis.
  • Light / dark theme.

Usage

Open the hosted page above, or clone the repo and open index.html directly in a browser — it is one self-contained file with no build step, no dependencies and no server required.

Then drop your .map file onto the page (or click to browse).

Example map

If you just want to try it, LwIP_UDP_Echo_Server.map is included in this repo — the STM32Cube LwIP UDP echo server example built for a NUCLEO-H723ZG. Download it and drop it onto the page.


Generating a map file

Pass -Wl,-Map=<file> to the compiler driver at link time.

CMake

target_link_options(${PROJECT_NAME} PRIVATE
    -Wl,-Map=$<TARGET_FILE_DIR:${PROJECT_NAME}>/${PROJECT_NAME}.map
)

This writes <project>.map next to the linked binary in the build tree.

Make

LDFLAGS += -Wl,-Map=$(TARGET).map

Directly

arm-none-eabi-gcc ... -Wl,-Map=firmware.map -o firmware.elf

For the richest output, also enable cross references and keep the default verbosity of the map — the analyzer reads the Memory Configuration and Linker script and memory map sections.


AI-generated

This tool was generated with AI assistance (Anthropic's Claude). The parsing logic, heuristics and UI were produced by a language model and reviewed by a human, but they have not been formally verified. Treat the numbers as a guide for investigation rather than an authoritative accounting of your binary — cross check anything that matters against size, nm or objdump.

About

Single-file, browser-based viewer for GNU ld linker map files — see where your firmware's flash and RAM went, by region, section, object, library and symbol.

Topics

Resources

Stars

Watchers

Forks

Contributors

Languages