google / bloaty

Bloaty: a size profiler for binaries

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

short DWARF compilation unit error on MIPS binary

matthewlingscheitsonos opened this issue · comments

I have a binary that bloaty can show the sections and segments for, but it gives the error bloaty: short DWARF compilation unit when I attempt to use -d compileunits.

Readelf and dwarfdump are able to parse the binary, and bloaty itself assigns a reasonable size to the section:

    FILE SIZE        VM SIZE    
 --------------  -------------- 
  24.6%  23.0Ki  80.4%  23.0Ki    .text
  19.7%  18.4Ki   0.0%       0    .debug_info
  17.9%  16.8Ki   0.0%       0    .debug_loc
   8.1%  7.57Ki   0.0%       0    .debug_line
   5.4%  5.04Ki   0.0%       0    .debug_abbrev
   5.0%  4.70Ki   0.0%       0    .debug_str
...
   0.9%     816   0.0%       0    .debug_ranges
...
   0.6%     616   0.0%       0    .debug_aranges
   0.6%     608   2.1%     608    .MIPS.stubs
....
 100.0%  93.5Ki 100.0%  28.7Ki    TOTAL

However, if I dump the remaining size and length just before the error, the remaining size is correct, but the length is a wildly large number:

bloaty libuuid.so.1.3.0 -d compileunits
size: 0x264, len: 0x24000000
bloaty: short DWARF compilation unit

More information about binary in question:

  Magic:   7f 45 4c 46 01 02 01 00 00 00 00 00 00 00 00 00 
  Class:                             ELF32
  Data:                              2's complement, big endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              EXEC (Executable file)
  Machine:                           MIPS R3000
  Version:                           0x1
  Entry point address:               0x40a270
  Start of program headers:          52 (bytes into file)
  Start of section headers:          14672868 (bytes into file)
  Flags:                             0x70001005, noreorder, cpic, o32, mips32r2
  Size of this header:               52 (bytes)
  Size of program headers:           32 (bytes)
  Number of program headers:         9
  Size of section headers:           40 (bytes)
  Number of section headers:         46
  Section header string table index: 43

Readelf is able to parse the debug info section:

readelf --debug-dump=info libuuid.so.1.3.0 | grep -A 2 'Compilation Unit @'
  Compilation Unit @ offset 0x0:
   Length:        0xd2 (32-bit)
   Version:       2
--
  Compilation Unit @ offset 0xd6:
   Length:        0xb7 (32-bit)
   Version:       4
--

Do you have any advice on why this may be occurring or additional debugging steps to take?