A fork of https://github.com/crosspoint-reader/crosspoint-reader
1#!/bin/bash
2
3ELF_FILE=".pio/build/default/firmware.elf"
4
5list_top_symbols() {
6 local section_pattern="$1"
7 local section_name="$2"
8 local num_symbols=$3
9
10 # objdump -t format: address flags section size name
11 # Filter by section, extract size and name, calculate total
12 local data=$(objdump -t "$ELF_FILE" | \
13 awk -v pattern="$section_pattern" '$4 ~ pattern { print $5, $6 }' | \
14 while read hex name; do
15 dec=$((16#$hex))
16 echo "$dec $hex $name"
17 done | \
18 sort -k1 -r -n)
19
20 local total=$(echo "$data" | awk '{ sum += $1 } END { print sum }')
21 local total_kb=$(echo "$total" | awk '{ printf "%.2f", $1 / 1024 }')
22
23 echo "============================================"
24 echo "Top $num_symbols largest symbols in section: $section_name"
25 echo "Total section size: $total bytes ($total_kb KB)"
26 echo "============================================"
27
28 echo "$data" | \
29 head -$num_symbols | \
30 awk '{
31 size_kb = $1 / 1024
32 printf " %10s (%7.2f KB) %s\n", $2, size_kb, $3
33 }'
34
35 echo ""
36}
37
38list_top_symbols "\\.dram0\\.bss" ".dram0.bss" 10
39list_top_symbols "\\.dram0\\.data" ".dram0.data" 10
40list_top_symbols "\\.flash\\.rodata" ".flash.rodata" 200
41list_top_symbols "\\.flash\\.text" ".flash.text" 40
42list_top_symbols "\\.iram0\\.text" ".iram0.text" 10