CodeSizer: una herramienta para analizar el tamaño del código en firmware embebido

Fuentes: CodeSizer: a static code size profiling tool for embedded firmware

CodeSizer es una herramienta de código abierto diseñada para perfil estático del tamaño de código en proyectos de firmware embebido donde el binario final está sometido a una intensa fase de inlining y optimización en tiempo de enlazado. Su objetivo es responder a una pregunta habitual entre desarrolladores: ¿por qué el binario ocupa tanto?

La herramienta trabaja con archivos ELF. Para ello se apoya en dos utilidades estándar de GNU: objdump, que desensambla el binario, y addr2line, que reconstruye la pila de llamadas con las funciones expandidas en línea. De este modo, cada dirección de instrucción queda asignada al nodo correcto del árbol de inlining dentro de cada función, lo que permite repartir el peso del binario entre los símbolos fuente reales y no entre los símbolos intermedios generados por el compilador.

El flujo de uso es directo: se ejecuta el script codesizer.py indicando el prefijo de la toolchain cruzada (por ejemplo, arm-none-eabi- o /opt/riscv/gcc15/bin/riscv32-unknown-elf-) y, opcionalmente, las secciones ELF a analizar; por defecto se examina .text. Como salida se genera un informe HTML estático con un pequeño componente de JavaScript que permite desplegar y contraer ramas del árbol, facilitando la navegación.

El repositorio incluye un ejemplo práctico generado a partir del ELF de la bootrom A4 del microcontrolador RP2350 de Raspberry Pi, donde se analizan las secciones .text y .secure_gateways con la toolchain de ARM. Esto ilustra su utilidad en proyectos de ROM de arranque y, en general, en cualquier firmware embebido donde reducir el tamaño del binario es un requisito de diseño.