1d95961f2SMed Ismail Bennani# REQUIRES: python, native && target-aarch64 && system-darwin
2d95961f2SMed Ismail Bennani
3*80c836ecSJonas Devlieghere# rdar://93655633
4*80c836ecSJonas Devlieghere# UNSUPPORTED: arm64
5*80c836ecSJonas Devlieghere
60a65112cSMed Ismail Bennani# RUN: %clangxx_host -std=c++17 -g %S/Inputs/multithread-test.cc -o %t.out
77c54ffdcSMed Ismail Bennani
87c54ffdcSMed Ismail Bennani# RUN: cp %S/Inputs/scripted_crashlog.ips %t.crash
90a65112cSMed Ismail Bennani# RUN: %python %S/patch-crashlog.py --binary %t.out --crashlog %t.crash --offsets '{"main":160, "bar":20, "foo":24}' --json
1012301d61SMed Ismail Bennani# RUN: %lldb %t.out -o 'command script import lldb.macosx.crashlog' -o 'crashlog -a -i %t.crash' 2>&1 -o "thread list" -o "bt all" | FileCheck %s
117c54ffdcSMed Ismail Bennani
127c54ffdcSMed Ismail Bennani# CHECK: "crashlog" {{.*}} commands have been installed, use the "--help" options on these commands
130a65112cSMed Ismail Bennani
148d097a6bSMed Ismail Bennani# CHECK: (lldb) process status
150a65112cSMed Ismail Bennani# CHECK-NEXT: Process 24991 stopped
1612301d61SMed Ismail Bennani# CHECK-NEXT: * thread #3, stop reason = EXC_BAD_ACCESS
170a65112cSMed Ismail Bennani# CHECK-NEXT:     frame #0: 0x00000001047f5970 scripted_crashlog_json.test.tmp.out`bar
188d097a6bSMed Ismail Bennani
198d097a6bSMed Ismail Bennani# CHECK: (lldb) thread backtrace
2012301d61SMed Ismail Bennani# CHECK-NEXT: * thread #3, stop reason = EXC_BAD_ACCESS
210a65112cSMed Ismail Bennani# CHECK-NEXT:   * frame #0: 0x00000001047f5970 scripted_crashlog_json.test.tmp.out`bar
220a65112cSMed Ismail Bennani# CHECK-NEXT:     frame #1: 0x00000001047f5998 scripted_crashlog_json.test.tmp.out`foo
230a65112cSMed Ismail Bennani# CHECK-NEXT:     frame #2: 0x00000001047f5b04 scripted_crashlog_json.test.tmp.out`compute_pow
240a65112cSMed Ismail Bennani# CHECK-NEXT:     frame #3: 0x00000001047f7690 scripted_crashlog_json.test.tmp.out`decltype
250a65112cSMed Ismail Bennani# CHECK-NEXT:     frame #4: 0x00000001047f7614 scripted_crashlog_json.test.tmp.out`void std::__1::__thread_execute
260a65112cSMed Ismail Bennani# CHECK-NEXT:     frame #5: 0x00000001047f6d58 scripted_crashlog_json.test.tmp.out`void* std::__1::__thread_proxy
270a65112cSMed Ismail Bennani# CHECK-NEXT:     frame #6: 0x000000018bf5326c libsystem_pthread.dylib`_pthread_start
280a65112cSMed Ismail Bennani# CHECK-NEXT:     frame #7: 0x000000018bf4e08c libsystem_pthread.dylib`thread_start
290a65112cSMed Ismail Bennani
3012301d61SMed Ismail Bennani# CHECK: (lldb) thread list
3112301d61SMed Ismail Bennani# CHECK-NEXT: Process 24991 stopped
3212301d61SMed Ismail Bennani# CHECK-NEXT:  thread #1: tid = 0x4ea840, 0x000000018bf17854 libsystem_kernel.dylib`__ulock_wait{{.*}}, queue = 'com.apple.main-thread'
3312301d61SMed Ismail Bennani# CHECK-NEXT:  thread #2: tid = 0x4ea850, 0x00000001047f59e8 scripted_crashlog_json.test.tmp.out`call_and_wait
3412301d61SMed Ismail Bennani# CHECK-NEXT: * thread #3: tid = 0x4ea851, 0x00000001047f5970 scripted_crashlog_json.test.tmp.out`bar{{.*}}, stop reason = EXC_BAD_ACCESS
3512301d61SMed Ismail Bennani
3612301d61SMed Ismail Bennani
370a65112cSMed Ismail Bennani# CHECK: (lldb) bt all
3812301d61SMed Ismail Bennani# CHECK-NEXT:   thread #1
390a65112cSMed Ismail Bennani# CHECK-NEXT:     frame #0: 0x000000018bf17854 libsystem_kernel.dylib`__ulock_wait
400a65112cSMed Ismail Bennani# CHECK-NEXT:     frame #1: 0x000000018bf555a0 libsystem_pthread.dylib`_pthread_join
410a65112cSMed Ismail Bennani# CHECK-NEXT:     frame #2: 0x000000018beae9c0 libc++.1.dylib`std::__1::thread::join
420a65112cSMed Ismail Bennani# CHECK-NEXT:     frame #3: 0x00000001047f5bb8 scripted_crashlog_json.test.tmp.out`main
430a65112cSMed Ismail Bennani# CHECK-NEXT:     frame #4: 0x0000000104ae5088 dyld`start
4412301d61SMed Ismail Bennani# CHECK-NEXT:   thread #2
450a65112cSMed Ismail Bennani# CHECK-NEXT:     frame #0: 0x00000001047f59e8 scripted_crashlog_json.test.tmp.out`call_and_wait
460a65112cSMed Ismail Bennani# CHECK-NEXT:     frame #1: 0x00000001047f59d4 scripted_crashlog_json.test.tmp.out`call_and_wait
470a65112cSMed Ismail Bennani# CHECK-NEXT:     frame #2: 0x00000001047f7690 scripted_crashlog_json.test.tmp.out`decltype
480a65112cSMed Ismail Bennani# CHECK-NEXT:     frame #3: 0x00000001047f7614 scripted_crashlog_json.test.tmp.out`void std::__1::__thread_execute
490a65112cSMed Ismail Bennani# CHECK-NEXT:     frame #4: 0x00000001047f6d58 scripted_crashlog_json.test.tmp.out`void* std::__1::__thread_proxy
500a65112cSMed Ismail Bennani# CHECK-NEXT:     frame #5: 0x000000018bf5326c libsystem_pthread.dylib`_pthread_start
510a65112cSMed Ismail Bennani# CHECK-NEXT:     frame #6: 0x000000018bf4e08c libsystem_pthread.dylib`thread_start
5212301d61SMed Ismail Bennani# CHECK-NEXT: * thread #3, stop reason = EXC_BAD_ACCESS
530a65112cSMed Ismail Bennani# CHECK-NEXT:   * frame #0: 0x00000001047f5970 scripted_crashlog_json.test.tmp.out`bar
540a65112cSMed Ismail Bennani# CHECK-NEXT:     frame #1: 0x00000001047f5998 scripted_crashlog_json.test.tmp.out`foo
550a65112cSMed Ismail Bennani# CHECK-NEXT:     frame #2: 0x00000001047f5b04 scripted_crashlog_json.test.tmp.out`compute_pow
560a65112cSMed Ismail Bennani# CHECK-NEXT:     frame #3: 0x00000001047f7690 scripted_crashlog_json.test.tmp.out`decltype
570a65112cSMed Ismail Bennani# CHECK-NEXT:     frame #4: 0x00000001047f7614 scripted_crashlog_json.test.tmp.out`void std::__1::__thread_execute
580a65112cSMed Ismail Bennani# CHECK-NEXT:     frame #5: 0x00000001047f6d58 scripted_crashlog_json.test.tmp.out`void* std::__1::__thread_proxy
590a65112cSMed Ismail Bennani# CHECK-NEXT:     frame #6: 0x000000018bf5326c libsystem_pthread.dylib`_pthread_start
600a65112cSMed Ismail Bennani# CHECK-NEXT:     frame #7: 0x000000018bf4e08c libsystem_pthread.dylib`thread_start
61