Skip to content

[LLDB][Minidump] Backtrace broken on minidumps when binary also loaded #119598

Closed
@strangewiz

Description

@strangewiz

After e9c8f75 [LLDB][Minidump] Have Minidumps save off and properly read TLS data (#109477), minidumps loaded with the binary adjacent cannot show a correct backtrace beyond the first frame.

e.g. we see:

(lldb) bt
* thread #1
  * frame #0: 0x000000018d8813c8
    frame #1: 0x000000018d760714

instead of:

(lldb) bt
* thread #1
  * frame #0: 0x000000018d8813c8 libsystem_kernel.dylib`__semwait_signal + 8
    frame #1: 0x000000018d760714 libsystem_c.dylib`nanosleep + 220
    frame #2: 0x000000018d7696f8 libsystem_c.dylib`sleep + 52
    frame #3: 0x0000000100373f40 simple`func4 + 16
    frame #4: 0x0000000100373f54 simple`func3 + 12
    frame #5: 0x0000000100373f68 simple`func2 + 12
    frame #6: 0x0000000100373f7c simple`func1 + 12
    frame #7: 0x0000000100373f90 simple`main + 12
    frame #8: 0x000000018d53c274 dyld`start + 2840

Steps to reproduce:

lldb built with:

 cmake -GNinja -DCMAKE_BUILD_TYPE=Debug -DLLVM_ENABLE_ASSERTIONS=ON       -DLLVM_ENABLE_PROJECTS='clang;lld;compiler-rt;lldb'       -DCMAKE_C_COMPILER=$CLANG_BASE_PATH/bin/clang       -DCMAKE_CXX_COMPILER=$CLANG_BASE_PATH/bin/clang++       -DCMAKE_ASM_COMPILER=$CLANG_BASE_PATH/bin/clang       -DCMAKE_ASM_COMPILER_ID="Clang"   -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi"    -DCMAKE_OSX_SYSROOT=$PWD/../sysroot/MacOSX.sdk       -DDARWIN_macosx_CACHED_SYSROOT=$PWD/../sysroot/MacOSX.sdk       -DDARWIN_iphoneos_CACHED_SYSROOT=$PWD/../sysroot/iPhoneOS.sdk       -DDARWIN_iphonesimulator_CACHED_SYSROOT=$PWD/../sysroot/iPhoneSimulator.sdk       ../llvm

and:

 $ ninja lldb

at revision: e9c8f75

$ cd reproduce_folder
$ cat simple.c
#include <unistd.h>

[[clang::optnone]]
void func4() {
    sleep(1000);
}

[[clang::optnone]]
void func3() {
    func4();
}

[[clang::optnone]]
void func2() {
    func3();
}

[[clang::optnone]]
void func1() {
    func2();
}

int main() {
    func1();
    return 0;
}

$ clang -Os simple.c -o simple

$ ./simple &
[1] 88598

$ sudo generate_dump 88598
Password:

$ ~/llvm-project/build/bin/lldb
error: invalid value path 'symbols.swift-module-loading-mode'
(lldb) target create -c minidump.88598
warning: (arm64e) /usr/lib/system/libsystem_kernel.dylib address 0x000000018d8c5000 maps to more than one section: libsystem_kernel.dylib.__DATA_DIRTY and libdyld.dylib.__TEXT
warning: (arm64e) /usr/lib/system/libsystem_platform.dylib address 0x000000018d8f8000 maps to more than one section: libsystem_platform.dylib.__DATA_CONST and libsystem_info.dylib.__TEXT
Core file 'reproduce_folder/minidump.88598' (aarch64) was loaded.
(lldb) bt
* thread #1
  * frame #0: 0x000000018d8813c8
    frame #1: 0x000000018d760714
(lldb) ^D

// rebuild with DynamicLoader *GetDynamicLoader() override { return nullptr; }, or just reset to previous revision, 2ff4c25

diff --git a/lldb/source/Plugins/Process/minidump/ProcessMinidump.h b/lldb/source/Plugins/Process/minidump/ProcessMinidump.h
index 3d235670a3..83ff1512cc 100644
--- a/lldb/source/Plugins/Process/minidump/ProcessMinidump.h
+++ b/lldb/source/Plugins/Process/minidump/ProcessMinidump.h
@@ -53,6 +53,7 @@ public:

   Status DoLoadCore() override;

+  DynamicLoader *GetDynamicLoader() override { return nullptr; }
   // Returns AUXV structure found in the core file
   lldb_private::DataExtractor GetAuxvData() override;

// and recompile lldb

$ ~/work/llvm-project/build/bin/lldb
error: invalid value path 'symbols.swift-module-loading-mode'
(lldb) target create -c minidump.88598
warning: (arm64e) /usr/lib/system/libsystem_kernel.dylib address 0x000000018d8c5000 maps to more than one section: libsystem_kernel.dylib.__DATA_DIRTY and libdyld.dylib.__TEXT
warning: (arm64e) /usr/lib/system/libsystem_platform.dylib address 0x000000018d8f8000 maps to more than one section: libsystem_platform.dylib.__DATA_CONST and libsystem_info.dylib.__TEXT
Core file 'reproduce_folder/minidump.88598' (aarch64) was loaded.
(lldb) bt
* thread #1
  * frame #0: 0x000000018d8813c8 libsystem_kernel.dylib`__semwait_signal + 8
    frame #1: 0x000000018d760714 libsystem_c.dylib`nanosleep + 220
    frame #2: 0x000000018d7696f8 libsystem_c.dylib`sleep + 52
    frame #3: 0x0000000100373f40 simple`func4 + 16
    frame #4: 0x0000000100373f54 simple`func3 + 12
    frame #5: 0x0000000100373f68 simple`func2 + 12
    frame #6: 0x0000000100373f7c simple`func1 + 12
    frame #7: 0x0000000100373f90 simple`main + 12
    frame #8: 0x000000018d53c274 dyld`start + 2840
(lldb) ^D

// rebuild again with change commented out or go back to revision e9c8f75

$ ~/work/llvm-project/build/bin/lldb
error: invalid value path 'symbols.swift-module-loading-mode'
(lldb) target create -c minidump.88598
warning: (arm64e) /usr/lib/system/libsystem_kernel.dylib address 0x000000018d8c5000 maps to more than one section: libsystem_kernel.dylib.__DATA_DIRTY and libdyld.dylib.__TEXT
warning: (arm64e) /usr/lib/system/libsystem_platform.dylib address 0x000000018d8f8000 maps to more than one section: libsystem_platform.dylib.__DATA_CONST and libsystem_info.dylib.__TEXT
Core file 'reproduce_folder/minidump.88598' (aarch64) was loaded.
(lldb) bt
* thread #1
  * frame #0: 0x000000018d8813c8
    frame #1: 0x000000018d760714
(lldb)

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions