[Android armeabi-v7a] dump_syms error - CFI frame description entry at offset 0x2d78 in '.debug_frame': CIE specifies unexpected address size: 4

64 views
Skip to first unread message

Rafał Kanus

unread,
Mar 11, 2019, 6:02:47 AM3/11/19
to google-breakpad-discuss

dump_syms does not generate breakpad symbols correctly.

When dump_syms is run in verbose mode it produce a lot of errors/warnings messages like:
" CFI frame description entry at offset 0x2d78 in '.debug_frame': CIE specifies unexpected address size: 4"

This only happens on armeabi-v7a. Other architecture does not generate this messages (arm64-v8a, x86, x86_64).

In the output breakpad symbols` STACK CFI` ("Call Frame Information") records are missing which cause that crashed call stack is generated (using minidump_stackwalk) by "stack scanning" which produce strange calls.
Full output from dump_syms is attached.

Also on other architectures generated call stack is OK and all frames are resolved by "Found by: call frame info".

Is this a bug or breakpad is missing implementation?
In source file /breakpad/src/common/dwarf/dwarf2reader.cc line 2335, where this message is reported, I have founded an comment "// TODO(scottmg): Only supporting x64 for now."


This errors can be reproduce on android ndk example https://github.com/googlesamples/android-ndk/tree/master/audio-echo.
Just import project to Android Studio set Android NDK path to r19. Build APK.
Use dump_syms tool on ⁨android-ndk-samples⁩/audio-echo⁩/app⁩/build⁩/intermediates⁩/cmake⁩/debug⁩/obj⁩/armeabi-v7a⁩/libecho.so


dump_syms was compiled on macOS and Linux in 32bit and 64bit. The results are the same on both platforms and architectures.
The library itself have all debug symbols inside.
Here is section dump from libecho.so.

arm-linux-androideabi-readelf -S libecho.so
There are 39 section headers, starting at offset 0x181f44:

Section Headers:
  [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
  [ 0]                   NULL            00000000 000000 000000 00      0   0  0
  [ 1] .note.android.ide NOTE            00000134 000134 000098 00   A  0   0  4
  [ 2] .note.gnu.build-i NOTE            000001cc 0001cc 000024 00   A  0   0  4
  [ 3] .dynsym           DYNSYM          000001f0 0001f0 002df0 10   A  4   1  4
  [ 4] .dynstr           STRTAB          00002fe0 002fe0 004ed8 00   A  0   0  1
  [ 5] .hash             HASH            00007eb8 007eb8 0013a8 04   A  3   0  4
  [ 6] .gnu.version      VERSYM          00009260 009260 0005be 02   A  3   0  2
  [ 7] .gnu.version_d    VERDEF          00009820 009820 00001c 00   A  4   1  4
  [ 8] .gnu.version_r    VERNEED         0000983c 00983c 000040 00   A  4   2  4
  [ 9] .rel.dyn          REL             0000987c 00987c 002d68 08   A  3   0  4
  [10] .rel.plt          REL             0000c5e4 00c5e4 000888 08   A  3   0  4
  [11] .plt              PROGBITS        0000ce6c 00ce6c 000ce0 00  AX  0   0  4
  [12] .text             PROGBITS        0000db4c 00db4c 010c10 00  AX  0   0  4
  [13] .ARM.exidx        ARM_EXIDX       0001e75c 01e75c 001338 08  AL 12   0  4
  [14] .ARM.extab        PROGBITS        0001fa94 01fa94 001a18 00   A  0   0  4
  [15] .rodata           PROGBITS        000214b0 0214b0 002f57 00   A  0   0 16
  [16] .fini_array       FINI_ARRAY      00026180 025180 000008 00  WA  0   0  4
  [17] .data.rel.ro      PROGBITS        00026190 025190 001830 00  WA  0   0 16
  [18] .dynamic          DYNAMIC         000279c0 0269c0 000118 08  WA  4   0  4
  [19] .got              PROGBITS        00027adc 026adc 000524 00  WA  0   0  4
  [20] .data             PROGBITS        00028000 027000 000058 00  WA  0   0  4
  [21] .bss              NOBITS          00028060 027060 0002b9 00  WA  0   0 16
  [22] .comment          PROGBITS        00000000 027058 00012f 01  MS  0   0  1
  [23] .debug_str        PROGBITS        00000000 027187 03701e 01  MS  0   0  1
  [24] .debug_abbrev     PROGBITS        00000000 05e1a5 007e21 00      0   0  1
  [25] .debug_info       PROGBITS        00000000 065fc6 0677f1 00      0   0  1
  [26] .debug_ranges     PROGBITS        00000000 0cd7b7 003850 00      0   0  1
  [27] .debug_macinfo    PROGBITS        00000000 0d1007 00001e 00      0   0  1
  [28] .debug_pubnames   PROGBITS        00000000 0d1025 017cc0 00      0   0  1
  [29] .debug_pubtypes   PROGBITS        00000000 0e8ce5 010f3f 00      0   0  1
  [30] .debug_frame      PROGBITS        00000000 0f9c24 005528 00      0   0  4
  [31] .debug_line       PROGBITS        00000000 0ff14c 01a0b0 00      0   0  1
  [32] .debug_loc        PROGBITS        00000000 1191fc 013d39 00      0   0  1
  [33] .debug_aranges    PROGBITS        00000000 12cf38 000160 00      0   0  8
  [34] .note.gnu.gold-ve NOTE            00000000 12d098 00001c 00      0   0  4
  [35] .ARM.attributes   ARM_ATTRIBUTES  00000000 12d0b4 000034 00      0   0  1
  [36] .symtab           SYMTAB          00000000 12d0e8 0464b0 10     37 17261  4
  [37] .strtab           STRTAB          00000000 173598 00e7fc 00      0   0  1
  [38] .shstrtab         STRTAB          00000000 181d94 0001b0 00      0   0  1
Key to Flags:
  W (write), A (alloc), X (execute), M (merge), S (strings), I (info),
  L (link order), O (extra OS processing required), G (group), T (TLS),
  C (compressed), x (unknown), o (OS specific), E (exclude),
  y (noread), p (processor specific)


dump_syms: compiled from sources on macOS (x86 and x86_64) and Linux (x86 and x86_64)
Toolchain: Android NDK 19 / clang compiler
Architecture: armeabi-v7a



libecho_dump_syms.txt
Reply all
Reply to author
Forward
0 new messages