[Lldb-commits] [PATCH] D18334: [JITLoaderGDB] Pack the jit entry struct according to the target arch.
Siva Chandra via lldb-commits
lldb-commits at lists.llvm.org
Mon Mar 21 14:26:37 PDT 2016
sivachandra created this revision.
sivachandra added a reviewer: clayborg.
sivachandra added subscribers: lldb-commits, dsrbecky, tberghammer.
http://reviews.llvm.org/D18334
Files:
source/Plugins/JITLoader/GDB/JITLoaderGDB.cpp
source/Plugins/JITLoader/GDB/JITLoaderGDB.h
Index: source/Plugins/JITLoader/GDB/JITLoaderGDB.h
===================================================================
--- source/Plugins/JITLoader/GDB/JITLoaderGDB.h
+++ source/Plugins/JITLoader/GDB/JITLoaderGDB.h
@@ -83,7 +83,7 @@
bool
ReadJITDescriptor(bool all_entries);
- template <typename ptr_t>
+ template <typename ptr_t, bool packed>
bool
ReadJITDescriptorImpl(bool all_entries);
Index: source/Plugins/JITLoader/GDB/JITLoaderGDB.cpp
===================================================================
--- source/Plugins/JITLoader/GDB/JITLoaderGDB.cpp
+++ source/Plugins/JITLoader/GDB/JITLoaderGDB.cpp
@@ -90,14 +90,24 @@
JIT_UNREGISTER_FN
} jit_actions_t;
-template <typename ptr_t>
+template <typename ptr_t, bool packed_size>
struct jit_code_entry
{
ptr_t next_entry; // pointer
ptr_t prev_entry; // pointer
ptr_t symfile_addr; // pointer
uint64_t symfile_size;
};
+
+template <typename ptr_t>
+struct jit_code_entry<ptr_t, true>
+{
+ ptr_t next_entry; // pointer
+ ptr_t prev_entry; // pointer
+ ptr_t symfile_addr; // pointer
+ uint64_t symfile_size __attribute__ ((packed));
+};
+
template <typename ptr_t>
struct jit_descriptor
{
@@ -269,13 +279,20 @@
JITLoaderGDB::ReadJITDescriptor(bool all_entries)
{
Target &target = m_process->GetTarget();
- if (target.GetArchitecture().GetAddressByteSize() == 8)
- return ReadJITDescriptorImpl<uint64_t>(all_entries);
+ const ArchSpec &arch_spec = target.GetArchitecture();
+ if (arch_spec.GetAddressByteSize() == 8)
+ return ReadJITDescriptorImpl<uint64_t, false>(all_entries);
else
- return ReadJITDescriptorImpl<uint32_t>(all_entries);
+ {
+ ArchSpec::Core core = arch_spec.GetCore();
+ if (ArchSpec::kCore_x86_32_first <= core && core <= ArchSpec::kCore_x86_32_last)
+ return ReadJITDescriptorImpl<uint32_t, true>(all_entries);
+ else
+ return ReadJITDescriptorImpl<uint32_t, false>(all_entries);
+ }
}
-template <typename ptr_t>
+template <typename ptr_t, bool packed>
bool
JITLoaderGDB::ReadJITDescriptorImpl(bool all_entries)
{
@@ -309,7 +326,7 @@
while (jit_relevant_entry != 0)
{
- jit_code_entry<ptr_t> jit_entry;
+ jit_code_entry<ptr_t, packed> jit_entry;
const size_t jit_entry_size = sizeof(jit_entry);
bytes_read = m_process->DoReadMemory(jit_relevant_entry, &jit_entry, jit_entry_size, error);
if (bytes_read != jit_entry_size || !error.Success())
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D18334.51232.patch
Type: text/x-patch
Size: 2563 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20160321/d1cea02e/attachment-0001.bin>
More information about the lldb-commits
mailing list