Skip to content

Commit c5a35ed

Browse files
Add crash address parsing for GDB. (google#1770)
1 parent 3385415 commit c5a35ed

File tree

4 files changed

+71
-0
lines changed

4 files changed

+71
-0
lines changed

src/python/crash_analysis/stack_parsing/stack_analyzer.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,8 @@
132132
r'cannot open shared object file')
133133
LINUX_GDB_CRASH_TYPE_REGEX = re.compile(r'Program received signal ([a-zA-Z]+),')
134134
LINUX_GDB_CRASH_ADDRESS_REGEX = re.compile(r'rip[ ]+([xX0-9a-fA-F]+)')
135+
LINUX_GDB_CRASH_ADDRESS_NO_REGISTERS_REGEX = re.compile(
136+
r'^(0[xX][0-9a-fA-F]+)\s+in\s+')
135137
LSAN_DIRECT_LEAK_REGEX = re.compile(r'Direct leak of ')
136138
LSAN_INDIRECT_LEAK_REGEX = re.compile(r'Indirect leak of ')
137139
MAC_GDB_CRASH_ADDRESS_REGEX = re.compile(
@@ -334,6 +336,7 @@
334336
# Function names (startswith).
335337
r'^(|\_\_)memcmp',
336338
r'^(|\_\_)memcpy',
339+
r'^(|\_\_)aeabi\_',
337340
r'^(|\_\_)memmove',
338341
r'^(|\_\_)memset',
339342
r'^(|\_\_)strcmp',
@@ -1235,6 +1238,13 @@ def get_crash_data(crash_data, symbolize_flag=True):
12351238
update_state_on_match(
12361239
LINUX_GDB_CRASH_ADDRESS_REGEX, line, state, address_from_group=1)
12371240

1241+
# Platform specific: Linux gdb crash address format no registers
1242+
update_state_on_match(
1243+
LINUX_GDB_CRASH_ADDRESS_NO_REGISTERS_REGEX,
1244+
line,
1245+
state,
1246+
address_from_group=1)
1247+
12381248
# Platform specific: Mac gdb style crash address format.
12391249
update_state_on_match(
12401250
MAC_GDB_CRASH_ADDRESS_REGEX, line, state, address_from_group=1)
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
0x0000000000000ac8 in __aeabi_memcpy ()
2+
3+
Program received signal SIGTRAP, Trace/breakpoint trap.
4+
0x0000000000000ac8 in __aeabi_memcpy ()
5+
#0 0x0000000000000ac8 in __aeabi_memcpy ()
6+
#1 0x00000000000007d8 in memcpy ()
7+
#2 0x000000000000cdc0 in xymodem_trnasfer (target_addr=0x2022000, max_sz=<optimized out>, prot_type=1) at usbdev/protocol_xymodem.c:362
8+
#3 0x0000000000002060 in LoadImageFromUsb30 (uTargetAddr=<optimized out>, uSizeLimit=<optimized out>, req_type=3239010) at usbdev/usbdev_api.c:267
9+
#4 0x0000000000001fec in LoadBL1FromUsb30 () at usbdev/usbdev_api.c:225
10+
#5 0x0000000000004514 in Main () at boot/main.c:94
11+
#6 0x0000000000000044 in GPIO_SetPudBits (SFR_Address=<optimized out>, base=<optimized out>, mask=<optimized out>, value=<optimized out>) at gpio/gpio.c:38
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
0x0000000000000ac8 in __aeabi_memcpy ()
2+
3+
Program received signal SIGTRAP, Trace/breakpoint trap.
4+
0x0000000000000ac8 in __aeabi_memcpy ()
5+
#0 0x0000000000000ac8 in __aeabi_memcpy ()
6+
#1 0x00000000000007d8 in memcpy ()
7+
#2 0x000000000000cdc0 in xymodem_trnasfer (target_addr=0x2022000, max_sz=<optimized out>, prot_type=1) at usbdev/protocol_xymodem.c:362
8+
#3 0x0000000000002060 in LoadImageFromUsb30 (uTargetAddr=<optimized out>, uSizeLimit=<optimized out>, req_type=3239010) at usbdev/usbdev_api.c:267
9+
#4 0x0000000000001fec in LoadBL1FromUsb30 () at usbdev/usbdev_api.c:225
10+
#5 0x0000000000004514 in Main () at boot/main.c:94
11+
#6 0x0000000000000044 in GPIO_SetPudBits (SFR_Address=<optimized out>, base=<optimized out>, mask=<optimized out>, value=<optimized out>) at gpio/gpio.c:38
12+
==111736== ERROR: libFuzzer: deadly signal
13+
#0 0x4b3520 in __sanitizer_print_stack_trace (/usr/local/google/home/xuanxing/Source/WhiteChapel/gsa-rom/external/emu/ap-rom/libfuzzer/fuzzer+0x4b3520)
14+
#1 0x45e158 in fuzzer::PrintStackTrace() (/usr/local/google/home/xuanxing/Source/WhiteChapel/gsa-rom/external/emu/ap-rom/libfuzzer/fuzzer+0x45e158)
15+
#2 0x4438c3 in fuzzer::Fuzzer::CrashCallback() (/usr/local/google/home/xuanxing/Source/WhiteChapel/gsa-rom/external/emu/ap-rom/libfuzzer/fuzzer+0x4438c3)
16+
#3 0x7f57fba5751f (/lib/x86_64-linux-gnu/libpthread.so.0+0x1351f)
17+
#4 0x7f57fb74cf60 in raise (/lib/x86_64-linux-gnu/libc.so.6+0x39f60)
18+
#5 0x7f57fb738534 in abort (/lib/x86_64-linux-gnu/libc.so.6+0x25534)
19+
#6 0x4b84d5 in cmd_kill(IGdbTarget*, int, char const*) /usr/local/google/home/xuanxing/Source/WhiteChapel/gsa-rom/external/emu/ap-rom/gdb.cpp:336:5
20+
#7 0x4b88ea in gdb_serve(int, IGdbTarget*) /usr/local/google/home/xuanxing/Source/WhiteChapel/gsa-rom/external/emu/ap-rom/gdb.cpp:379:26
21+
#8 0x4b85c0 in RunGDB(IGdbTarget*, int) /usr/local/google/home/xuanxing/Source/WhiteChapel/gsa-rom/external/emu/ap-rom/gdb.cpp:423:9
22+
#9 0x7f57fc5e296f (/lib/x86_64-linux-gnu/libstdc++.so.6+0xce96f)
23+
#10 0x7f57fba4cfb6 in start_thread (/lib/x86_64-linux-gnu/libpthread.so.0+0x8fb6)
24+
#11 0x7f57fb80d19e in clone (/lib/x86_64-linux-gnu/libc.so.6+0xfa19e)

src/python/tests/core/crash_analysis/stack_parsing/stack_analyzer_test.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2867,3 +2867,29 @@ def test_python_unhandled_exception(self):
28672867
self._validate_get_crash_data(data, expected_type, expected_address,
28682868
expected_state, expected_stacktrace,
28692869
expected_security_flag)
2870+
2871+
def test_gdb_sigtrap(self):
2872+
"""Test for GDB stack."""
2873+
data = self._read_test_data('gdb_sigtrap.txt')
2874+
expected_type = 'SIGTRAP'
2875+
expected_address = '0x000000000ac8'
2876+
expected_state = (
2877+
'xymodem_trnasfer\nLoadImageFromUsb30\nLoadBL1FromUsb30\n')
2878+
expected_stacktrace = data
2879+
expected_security_flag = True
2880+
self._validate_get_crash_data(data, expected_type, expected_address,
2881+
expected_state, expected_stacktrace,
2882+
expected_security_flag)
2883+
2884+
def test_gdb_sigtrap_and_libfuzzer(self):
2885+
"""Test for GDB stack with libfuzzer."""
2886+
data = self._read_test_data('gdb_sigtrap_and_libfuzzer.txt')
2887+
expected_type = 'SIGTRAP'
2888+
expected_address = '0x000000000ac8'
2889+
expected_state = (
2890+
'xymodem_trnasfer\nLoadImageFromUsb30\nLoadBL1FromUsb30\n')
2891+
expected_stacktrace = data
2892+
expected_security_flag = True
2893+
self._validate_get_crash_data(data, expected_type, expected_address,
2894+
expected_state, expected_stacktrace,
2895+
expected_security_flag)

0 commit comments

Comments
 (0)