[Lldb-commits] [lldb] r277065 - Small refinement on the memory segment support in core files that
Jason Molenda via lldb-commits
lldb-commits at lists.llvm.org
Thu Jul 28 15:43:11 PDT 2016
Author: jmolenda
Date: Thu Jul 28 17:43:10 2016
New Revision: 277065
URL: http://llvm.org/viewvc/llvm-project?rev=277065&view=rev
Log:
Small refinement on the memory segment support in core files that
Greg added in r272276 -- when working with a non-user-process mach-o
core file, force the permissions to readable + executable, else the
unwinder can stop backtracing early if it gets a pc value in a segment
that it thinks is non-executable.
<rdar://problem/27138456>
<rdar://problem/27462904>
Modified:
lldb/trunk/source/Plugins/Process/mach-core/ProcessMachCore.cpp
Modified: lldb/trunk/source/Plugins/Process/mach-core/ProcessMachCore.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/mach-core/ProcessMachCore.cpp?rev=277065&r1=277064&r2=277065&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Process/mach-core/ProcessMachCore.cpp (original)
+++ lldb/trunk/source/Plugins/Process/mach-core/ProcessMachCore.cpp Thu Jul 28 17:43:10 2016
@@ -418,6 +418,23 @@ ProcessMachCore::DoLoadCore ()
}
}
+ if (m_dyld_plugin_name != DynamicLoaderMacOSXDYLD::GetPluginNameStatic())
+ {
+ // For non-user process core files, the permissions on the core file segments are usually
+ // meaningless, they may be just "read", because we're dealing with kernel coredumps or
+ // early startup coredumps and the dumper is grabbing pages of memory without knowing
+ // what they are. If they aren't marked as "exeuctable", that can break the unwinder
+ // which will check a pc value to see if it is in an executable segment and stop the
+ // backtrace early if it is not ("executable" and "unknown" would both be fine, but
+ // "not executable" will break the unwinder).
+ size_t core_range_infos_size = m_core_range_infos.GetSize();
+ for (size_t i = 0; i < core_range_infos_size; i++)
+ {
+ VMRangeToPermissions::Entry *ent = m_core_range_infos.GetMutableEntryAtIndex (i);
+ ent->data = lldb::ePermissionsReadable | lldb::ePermissionsExecutable;
+ }
+ }
+
// Even if the architecture is set in the target, we need to override
// it to match the core file which is always single arch.
ArchSpec arch (m_core_module_sp->GetArchitecture());
More information about the lldb-commits
mailing list