aboutsummaryrefslogtreecommitdiff
path: root/lldb/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.h
diff options
context:
space:
mode:
authorKate Stone <katherine.stone@apple.com>2016-09-06 20:57:50 +0000
committerKate Stone <katherine.stone@apple.com>2016-09-06 20:57:50 +0000
commitb9c1b51e45b845debb76d8658edabca70ca56079 (patch)
treedfcb5a13ef2b014202340f47036da383eaee74aa /lldb/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.h
parentd5aa73376966339caad04013510626ec2e42c760 (diff)
downloadllvm-b9c1b51e45b845debb76d8658edabca70ca56079.zip
llvm-b9c1b51e45b845debb76d8658edabca70ca56079.tar.gz
llvm-b9c1b51e45b845debb76d8658edabca70ca56079.tar.bz2
*** This commit represents a complete reformatting of the LLDB source code
*** to conform to clang-format’s LLVM style. This kind of mass change has *** two obvious implications: Firstly, merging this particular commit into a downstream fork may be a huge effort. Alternatively, it may be worth merging all changes up to this commit, performing the same reformatting operation locally, and then discarding the merge for this particular commit. The commands used to accomplish this reformatting were as follows (with current working directory as the root of the repository): find . \( -iname "*.c" -or -iname "*.cpp" -or -iname "*.h" -or -iname "*.mm" \) -exec clang-format -i {} + find . -iname "*.py" -exec autopep8 --in-place --aggressive --aggressive {} + ; The version of clang-format used was 3.9.0, and autopep8 was 1.2.4. Secondly, “blame” style tools will generally point to this commit instead of a meaningful prior commit. There are alternatives available that will attempt to look through this change and find the appropriate prior commit. YMMV. llvm-svn: 280751
Diffstat (limited to 'lldb/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.h')
-rw-r--r--lldb/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.h549
1 files changed, 242 insertions, 307 deletions
diff --git a/lldb/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.h b/lldb/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.h
index 47fba086..fc3216f 100644
--- a/lldb/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.h
+++ b/lldb/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.h
@@ -18,354 +18,289 @@
// Other libraries and framework includes
// Project includes
-#include "lldb/Target/DynamicLoader.h"
+#include "lldb/Core/UUID.h"
#include "lldb/Host/FileSpec.h"
#include "lldb/Host/TimeValue.h"
-#include "lldb/Core/UUID.h"
+#include "lldb/Target/DynamicLoader.h"
#include "lldb/Target/Process.h"
-class DynamicLoaderDarwinKernel : public lldb_private::DynamicLoader
-{
+class DynamicLoaderDarwinKernel : public lldb_private::DynamicLoader {
public:
- DynamicLoaderDarwinKernel(lldb_private::Process *process, lldb::addr_t kernel_addr);
+ DynamicLoaderDarwinKernel(lldb_private::Process *process,
+ lldb::addr_t kernel_addr);
- ~DynamicLoaderDarwinKernel() override;
+ ~DynamicLoaderDarwinKernel() override;
- //------------------------------------------------------------------
- // Static Functions
- //------------------------------------------------------------------
- static void
- Initialize();
+ //------------------------------------------------------------------
+ // Static Functions
+ //------------------------------------------------------------------
+ static void Initialize();
- static void
- Terminate();
+ static void Terminate();
- static lldb_private::ConstString
- GetPluginNameStatic();
+ static lldb_private::ConstString GetPluginNameStatic();
- static const char *
- GetPluginDescriptionStatic();
+ static const char *GetPluginDescriptionStatic();
- static lldb_private::DynamicLoader *
- CreateInstance (lldb_private::Process *process, bool force);
+ static lldb_private::DynamicLoader *
+ CreateInstance(lldb_private::Process *process, bool force);
- static void
- DebuggerInitialize (lldb_private::Debugger &debugger);
+ static void DebuggerInitialize(lldb_private::Debugger &debugger);
- static lldb::addr_t
- SearchForDarwinKernel (lldb_private::Process *process);
+ static lldb::addr_t SearchForDarwinKernel(lldb_private::Process *process);
- //------------------------------------------------------------------
- /// Called after attaching a process.
- ///
- /// Allow DynamicLoader plug-ins to execute some code after
- /// attaching to a process.
- //------------------------------------------------------------------
- void
- DidAttach() override;
+ //------------------------------------------------------------------
+ /// Called after attaching a process.
+ ///
+ /// Allow DynamicLoader plug-ins to execute some code after
+ /// attaching to a process.
+ //------------------------------------------------------------------
+ void DidAttach() override;
- void
- DidLaunch() override;
+ void DidLaunch() override;
- lldb::ThreadPlanSP
- GetStepThroughTrampolinePlan(lldb_private::Thread &thread,
- bool stop_others) override;
+ lldb::ThreadPlanSP GetStepThroughTrampolinePlan(lldb_private::Thread &thread,
+ bool stop_others) override;
- lldb_private::Error
- CanLoadImage() override;
+ lldb_private::Error CanLoadImage() override;
- //------------------------------------------------------------------
- // PluginInterface protocol
- //------------------------------------------------------------------
- lldb_private::ConstString
- GetPluginName() override;
+ //------------------------------------------------------------------
+ // PluginInterface protocol
+ //------------------------------------------------------------------
+ lldb_private::ConstString GetPluginName() override;
- uint32_t
- GetPluginVersion() override;
+ uint32_t GetPluginVersion() override;
protected:
- void
- PrivateInitialize (lldb_private::Process *process);
+ void PrivateInitialize(lldb_private::Process *process);
+
+ void PrivateProcessStateChanged(lldb_private::Process *process,
+ lldb::StateType state);
+
+ void UpdateIfNeeded();
+
+ void LoadKernelModuleIfNeeded();
+
+ void Clear(bool clear_process);
+
+ void PutToLog(lldb_private::Log *log) const;
+
+ static bool
+ BreakpointHitCallback(void *baton,
+ lldb_private::StoppointCallbackContext *context,
+ lldb::user_id_t break_id, lldb::user_id_t break_loc_id);
+
+ bool BreakpointHit(lldb_private::StoppointCallbackContext *context,
+ lldb::user_id_t break_id, lldb::user_id_t break_loc_id);
+ uint32_t GetAddrByteSize() { return m_kernel.GetAddressByteSize(); }
+
+ static lldb::ByteOrder GetByteOrderFromMagic(uint32_t magic);
+
+ enum {
+ KERNEL_MODULE_MAX_NAME = 64u,
+ // Versions less than 2 didn't have an entry size,
+ // they had a 64 bit name, 16 byte UUID, 8 byte addr,
+ // 8 byte size, 8 byte version, 4 byte load tag, and
+ // 4 byte flags
+ KERNEL_MODULE_ENTRY_SIZE_VERSION_1 = 64u + 16u + 8u + 8u + 8u + 4u + 4u
+ };
+
+ // class KextImageInfo represents a single kext or kernel binary image.
+ // The class was designed to hold the information from the
+ // OSKextLoadedKextSummary
+ // structure (in libkern/libkern/OSKextLibPrivate.h from xnu). The kernel
+ // maintains
+ // a list of loded kexts in memory (the OSKextLoadedKextSummaryHeader
+ // structure,
+ // which points to an array of OSKextLoadedKextSummary's).
+ //
+ // A KextImageInfos may have -
+ //
+ // 1. The load address, name, UUID, and size of a kext/kernel binary in memory
+ // (read straight out of the kernel's list-of-kexts loaded)
+ // 2. A ModuleSP based on a MemoryModule read out of the kernel's memory
+ // (very unlikely to have any symbolic information)
+ // 3. A ModuleSP for an on-disk copy of the kext binary, possibly with debug
+ // info
+ // or a dSYM
+ //
+ // For performance reasons, the developer may prefer that lldb not load the
+ // kexts out
+ // of memory at the start of a kernel session. But we should build up /
+ // maintain a
+ // list of kexts that the kernel has told us about so we can relocate a kext
+ // module
+ // later if the user explicitly adds it to the target.
+
+ class KextImageInfo {
+ public:
+ KextImageInfo()
+ : m_name(), m_module_sp(), m_memory_module_sp(),
+ m_load_process_stop_id(UINT32_MAX), m_uuid(),
+ m_load_address(LLDB_INVALID_ADDRESS), m_size(0),
+ m_kernel_image(false) {}
+
+ void Clear() {
+ m_load_address = LLDB_INVALID_ADDRESS;
+ m_size = 0;
+ m_name.clear();
+ m_uuid.Clear();
+ m_module_sp.reset();
+ m_memory_module_sp.reset();
+ m_load_process_stop_id = UINT32_MAX;
+ }
+
+ bool LoadImageAtFileAddress(lldb_private::Process *process);
+
+ bool LoadImageUsingMemoryModule(lldb_private::Process *process);
+
+ bool IsLoaded() { return m_load_process_stop_id != UINT32_MAX; }
+
+ void SetLoadAddress(
+ lldb::addr_t load_addr); // Address of the Mach-O header for this binary
+
+ lldb::addr_t
+ GetLoadAddress() const; // Address of the Mach-O header for this binary
+
+ lldb_private::UUID GetUUID() const;
+
+ void SetUUID(const lldb_private::UUID &uuid);
- void
- PrivateProcessStateChanged (lldb_private::Process *process,
- lldb::StateType state);
+ void SetName(const char *);
- void
- UpdateIfNeeded();
+ std::string GetName() const;
- void
- LoadKernelModuleIfNeeded ();
+ void SetModule(lldb::ModuleSP module);
- void
- Clear (bool clear_process);
+ lldb::ModuleSP GetModule();
- void
- PutToLog (lldb_private::Log *log) const;
+ // try to fill in m_memory_module_sp from memory based on the m_load_address
+ bool ReadMemoryModule(lldb_private::Process *process);
- static bool
- BreakpointHitCallback (void *baton,
- lldb_private::StoppointCallbackContext *context,
- lldb::user_id_t break_id,
- lldb::user_id_t break_loc_id);
+ bool IsKernel()
+ const; // true if this is the mach_kernel; false if this is a kext
+
+ void SetIsKernel(bool is_kernel);
+
+ uint64_t GetSize() const;
+
+ void SetSize(uint64_t size);
- bool
- BreakpointHit (lldb_private::StoppointCallbackContext *context,
- lldb::user_id_t break_id,
- lldb::user_id_t break_loc_id);
uint32_t
- GetAddrByteSize()
- {
- return m_kernel.GetAddressByteSize();
+ GetProcessStopId() const; // the stop-id when this binary was first noticed
+
+ void SetProcessStopId(uint32_t stop_id);
+
+ bool operator==(const KextImageInfo &rhs);
+
+ uint32_t GetAddressByteSize(); // as determined by Mach-O header
+
+ lldb::ByteOrder GetByteOrder(); // as determined by Mach-O header
+
+ lldb_private::ArchSpec
+ GetArchitecture() const; // as determined by Mach-O header
+
+ void PutToLog(lldb_private::Log *log) const;
+
+ typedef std::vector<KextImageInfo> collection;
+ typedef collection::iterator iterator;
+ typedef collection::const_iterator const_iterator;
+
+ private:
+ std::string m_name;
+ lldb::ModuleSP m_module_sp;
+ lldb::ModuleSP m_memory_module_sp;
+ uint32_t m_load_process_stop_id; // the stop-id when this module was added
+ // to the Target
+ lldb_private::UUID
+ m_uuid; // UUID for this dylib if it has one, else all zeros
+ lldb::addr_t m_load_address;
+ uint64_t m_size;
+ bool m_kernel_image; // true if this is the kernel, false if this is a kext
+ };
+
+ struct OSKextLoadedKextSummaryHeader {
+ uint32_t version;
+ uint32_t entry_size;
+ uint32_t entry_count;
+ lldb::addr_t image_infos_addr;
+
+ OSKextLoadedKextSummaryHeader()
+ : version(0), entry_size(0), entry_count(0),
+ image_infos_addr(LLDB_INVALID_ADDRESS) {}
+
+ uint32_t GetSize() {
+ switch (version) {
+ case 0:
+ return 0; // Can't know the size without a valid version
+ case 1:
+ return 8; // Version 1 only had a version + entry_count
+ default:
+ break;
+ }
+ // Version 2 and above has version, entry_size, entry_count, and reserved
+ return 16;
}
- static lldb::ByteOrder
- GetByteOrderFromMagic (uint32_t magic);
-
- enum
- {
- KERNEL_MODULE_MAX_NAME = 64u,
- // Versions less than 2 didn't have an entry size,
- // they had a 64 bit name, 16 byte UUID, 8 byte addr,
- // 8 byte size, 8 byte version, 4 byte load tag, and
- // 4 byte flags
- KERNEL_MODULE_ENTRY_SIZE_VERSION_1 = 64u + 16u + 8u + 8u + 8u + 4u + 4u
- };
-
- // class KextImageInfo represents a single kext or kernel binary image.
- // The class was designed to hold the information from the OSKextLoadedKextSummary
- // structure (in libkern/libkern/OSKextLibPrivate.h from xnu). The kernel maintains
- // a list of loded kexts in memory (the OSKextLoadedKextSummaryHeader structure,
- // which points to an array of OSKextLoadedKextSummary's).
- //
- // A KextImageInfos may have -
- //
- // 1. The load address, name, UUID, and size of a kext/kernel binary in memory
- // (read straight out of the kernel's list-of-kexts loaded)
- // 2. A ModuleSP based on a MemoryModule read out of the kernel's memory
- // (very unlikely to have any symbolic information)
- // 3. A ModuleSP for an on-disk copy of the kext binary, possibly with debug info
- // or a dSYM
- //
- // For performance reasons, the developer may prefer that lldb not load the kexts out
- // of memory at the start of a kernel session. But we should build up / maintain a
- // list of kexts that the kernel has told us about so we can relocate a kext module
- // later if the user explicitly adds it to the target.
-
- class KextImageInfo
- {
- public:
- KextImageInfo () :
- m_name (),
- m_module_sp (),
- m_memory_module_sp (),
- m_load_process_stop_id (UINT32_MAX),
- m_uuid (),
- m_load_address (LLDB_INVALID_ADDRESS),
- m_size (0),
- m_kernel_image (false)
- { }
-
- void
- Clear ()
- {
- m_load_address = LLDB_INVALID_ADDRESS;
- m_size = 0;
- m_name.clear ();
- m_uuid.Clear();
- m_module_sp.reset();
- m_memory_module_sp.reset();
- m_load_process_stop_id = UINT32_MAX;
- }
-
- bool
- LoadImageAtFileAddress (lldb_private::Process *process);
-
- bool
- LoadImageUsingMemoryModule (lldb_private::Process *process);
-
- bool
- IsLoaded ()
- {
- return m_load_process_stop_id != UINT32_MAX;
- }
-
- void
- SetLoadAddress (lldb::addr_t load_addr); // Address of the Mach-O header for this binary
-
- lldb::addr_t
- GetLoadAddress () const; // Address of the Mach-O header for this binary
-
- lldb_private::UUID
- GetUUID () const;
-
- void
- SetUUID (const lldb_private::UUID &uuid);
-
- void
- SetName (const char *);
-
- std::string
- GetName () const;
-
- void
- SetModule (lldb::ModuleSP module);
-
- lldb::ModuleSP
- GetModule ();
-
- // try to fill in m_memory_module_sp from memory based on the m_load_address
- bool
- ReadMemoryModule (lldb_private::Process *process);
-
- bool
- IsKernel () const; // true if this is the mach_kernel; false if this is a kext
-
- void
- SetIsKernel (bool is_kernel);
-
- uint64_t
- GetSize () const;
-
- void
- SetSize (uint64_t size);
-
- uint32_t
- GetProcessStopId () const; // the stop-id when this binary was first noticed
-
- void
- SetProcessStopId (uint32_t stop_id);
-
- bool
- operator== (const KextImageInfo &rhs);
-
- uint32_t
- GetAddressByteSize (); // as determined by Mach-O header
-
- lldb::ByteOrder
- GetByteOrder(); // as determined by Mach-O header
-
- lldb_private::ArchSpec
- GetArchitecture () const; // as determined by Mach-O header
-
- void
- PutToLog (lldb_private::Log *log) const;
-
- typedef std::vector<KextImageInfo> collection;
- typedef collection::iterator iterator;
- typedef collection::const_iterator const_iterator;
-
- private:
- std::string m_name;
- lldb::ModuleSP m_module_sp;
- lldb::ModuleSP m_memory_module_sp;
- uint32_t m_load_process_stop_id; // the stop-id when this module was added to the Target
- lldb_private::UUID m_uuid; // UUID for this dylib if it has one, else all zeros
- lldb::addr_t m_load_address;
- uint64_t m_size;
- bool m_kernel_image; // true if this is the kernel, false if this is a kext
- };
-
- struct OSKextLoadedKextSummaryHeader
- {
- uint32_t version;
- uint32_t entry_size;
- uint32_t entry_count;
- lldb::addr_t image_infos_addr;
-
- OSKextLoadedKextSummaryHeader() :
- version (0),
- entry_size (0),
- entry_count (0),
- image_infos_addr (LLDB_INVALID_ADDRESS)
- {
- }
-
- uint32_t
- GetSize()
- {
- switch (version)
- {
- case 0: return 0; // Can't know the size without a valid version
- case 1: return 8; // Version 1 only had a version + entry_count
- default: break;
- }
- // Version 2 and above has version, entry_size, entry_count, and reserved
- return 16;
- }
-
- void
- Clear()
- {
- version = 0;
- entry_size = 0;
- entry_count = 0;
- image_infos_addr = LLDB_INVALID_ADDRESS;
- }
-
- bool
- IsValid() const
- {
- return version >= 1 || version <= 2;
- }
- };
-
- void
- RegisterNotificationCallbacks();
-
- void
- UnregisterNotificationCallbacks();
-
- void
- SetNotificationBreakpointIfNeeded ();
-
- bool
- ReadAllKextSummaries ();
-
- bool
- ReadKextSummaryHeader ();
-
- bool
- ParseKextSummaries (const lldb_private::Address &kext_summary_addr,
- uint32_t count);
-
- void
- UpdateImageInfosHeaderAndLoadCommands(KextImageInfo::collection &image_infos,
- uint32_t infos_count,
- bool update_executable);
+ void Clear() {
+ version = 0;
+ entry_size = 0;
+ entry_count = 0;
+ image_infos_addr = LLDB_INVALID_ADDRESS;
+ }
- uint32_t
- ReadKextSummaries (const lldb_private::Address &kext_summary_addr,
- uint32_t image_infos_count,
- KextImageInfo::collection &image_infos);
+ bool IsValid() const { return version >= 1 || version <= 2; }
+ };
+
+ void RegisterNotificationCallbacks();
+
+ void UnregisterNotificationCallbacks();
+
+ void SetNotificationBreakpointIfNeeded();
+
+ bool ReadAllKextSummaries();
+
+ bool ReadKextSummaryHeader();
+
+ bool ParseKextSummaries(const lldb_private::Address &kext_summary_addr,
+ uint32_t count);
+
+ void
+ UpdateImageInfosHeaderAndLoadCommands(KextImageInfo::collection &image_infos,
+ uint32_t infos_count,
+ bool update_executable);
+
+ uint32_t ReadKextSummaries(const lldb_private::Address &kext_summary_addr,
+ uint32_t image_infos_count,
+ KextImageInfo::collection &image_infos);
- static lldb::addr_t
- SearchForKernelAtSameLoadAddr (lldb_private::Process *process);
+ static lldb::addr_t
+ SearchForKernelAtSameLoadAddr(lldb_private::Process *process);
- static lldb::addr_t
- SearchForKernelWithDebugHints (lldb_private::Process *process);
+ static lldb::addr_t
+ SearchForKernelWithDebugHints(lldb_private::Process *process);
- static lldb::addr_t
- SearchForKernelNearPC (lldb_private::Process *process);
+ static lldb::addr_t SearchForKernelNearPC(lldb_private::Process *process);
- static lldb::addr_t
- SearchForKernelViaExhaustiveSearch (lldb_private::Process *process);
+ static lldb::addr_t
+ SearchForKernelViaExhaustiveSearch(lldb_private::Process *process);
- static lldb_private::UUID
- CheckForKernelImageAtAddress (lldb::addr_t addr, lldb_private::Process *process);
+ static lldb_private::UUID
+ CheckForKernelImageAtAddress(lldb::addr_t addr,
+ lldb_private::Process *process);
- lldb::addr_t m_kernel_load_address;
- KextImageInfo m_kernel; // Info about the current kernel image being used
+ lldb::addr_t m_kernel_load_address;
+ KextImageInfo m_kernel; // Info about the current kernel image being used
- lldb_private::Address m_kext_summary_header_ptr_addr;
- lldb_private::Address m_kext_summary_header_addr;
- OSKextLoadedKextSummaryHeader m_kext_summary_header;
- KextImageInfo::collection m_known_kexts;
- mutable std::recursive_mutex m_mutex;
- lldb::user_id_t m_break_id;
+ lldb_private::Address m_kext_summary_header_ptr_addr;
+ lldb_private::Address m_kext_summary_header_addr;
+ OSKextLoadedKextSummaryHeader m_kext_summary_header;
+ KextImageInfo::collection m_known_kexts;
+ mutable std::recursive_mutex m_mutex;
+ lldb::user_id_t m_break_id;
private:
- DISALLOW_COPY_AND_ASSIGN (DynamicLoaderDarwinKernel);
+ DISALLOW_COPY_AND_ASSIGN(DynamicLoaderDarwinKernel);
};
#endif // liblldb_DynamicLoaderDarwinKernel_h_