diff options
author | Jason Molenda <jmolenda@apple.com> | 2016-05-24 21:46:23 +0000 |
---|---|---|
committer | Jason Molenda <jmolenda@apple.com> | 2016-05-24 21:46:23 +0000 |
commit | 94ddce2c0e27d40813086823487eaabcccd97b7b (patch) | |
tree | c7355e5547f0b4f7e51fdaf5d0d80dce24b10fcb /lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp | |
parent | 315e49d213565478fd2fbc6eeac896d21bc0bef6 (diff) | |
download | bcm5719-llvm-94ddce2c0e27d40813086823487eaabcccd97b7b.tar.gz bcm5719-llvm-94ddce2c0e27d40813086823487eaabcccd97b7b.zip |
In r268475 I made a change to ObjectFileMachO so that if it is
missing an LC_FUNCTION_STARTS section, we assume it has been
aggressively stripped (it is *very* unusual for anyone to strip
LC_FUNCTION_STARTS) so we disable assembly instruction unwind plan
creation.
Kernel extensions (kexts) don't have LC_FUNCTION_STARTS, but we
almost always have good symbol bounds just with the linker symbols.
So add an exception to allow assembly instruction unwind plan
creation for kexts even though they lack LC_FUNCTION_STARTS.
<rdar://problem/26453952>
llvm-svn: 270618
Diffstat (limited to 'lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp')
-rw-r--r-- | lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp index ed101dcb84f..0577f84f97f 100644 --- a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp +++ b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp @@ -2607,7 +2607,10 @@ ObjectFileMachO::ParseSymtab () const size_t function_starts_count = function_starts.GetSize(); - if (function_starts_count == 0) + // kext bundles don't have LC_FUNCTION_STARTS / eh_frame sections, but we can assume that we have + // accurate symbol boundaries for them, they're a special case. + + if (function_starts_count == 0 && header.filetype != MH_KEXT_BUNDLE) { // No LC_FUNCTION_STARTS/eh_frame section in this binary, we're going to assume the binary // has been stripped. Don't allow assembly language instruction emulation because we don't |