[Lldb-commits] [lldb] r282529 - Adding a RegisterContextMinidump_x86_64 converter
Tim Hammerquist via lldb-commits
lldb-commits at lists.llvm.org
Wed Sep 28 13:48:05 PDT 2016
Looks like there was some work to address this in r282565 here:
http://lab.llvm.org:8080/green/view/LLDB/job/lldb_build_test/20756/
However, the issue occurred again on the very next run.
On Wed, Sep 28, 2016 at 1:41 PM, Tim Hammerquist <penryu at gmail.com> wrote:
> This change seems to have introduced a linker failure while building the
> gtest suite:
>
>
> Ld build/Release/lldb-gtest normal x86_64
> cd "/Users/buildslave/jenkins/sharedspace/lldb at 2/lldb"
> export MACOSX_DEPLOYMENT_TARGET=10.9
> /Applications/Xcode.app/Contents/Developer/Toolchains/
> XcodeDefault.xctoolchain/usr/bin/clang++ -arch x86_64 -isysroot
> /Applications/Xcode.app/Contents/Developer/Platforms/
> MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk
> -L/Users/buildslave/jenkins/sharedspace/lldb at 2/lldb/build/Release
> -F/Users/buildslave/jenkins/sharedspace/lldb at 2/lldb/build/Release
> -F/Applications/Xcode.app/Contents/Developer/Platforms/
> MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/System/Library/PrivateFrameworks
> -F/Applications/Xcode.app/Contents/Developer/Platforms/
> MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/System/Library/Frameworks/
> CoreServices.framework/Frameworks -filelist /Users/buildslave/jenkins/
> sharedspace/lldb at 2/lldb/build/lldb.build/Release/lldb-gtest-
> build.build/Objects-normal/x86_64/lldb-gtest.LinkFileList
> -mmacosx-version-min=10.9 -weak-lcompression -lz -filelist
> /Users/buildslave/jenkins/sharedspace/lldb at 2/lldb/llvm-
> build/Release+Asserts/archives.txt -framework Foundation -framework
> DebugSymbols -framework Security -framework CoreServices -framework
> ApplicationServices /Users/buildslave/jenkins/sharedspace/lldb at 2
> /lldb/llvm-build/Release+Asserts/x86_64/lib/libgtest.a -L
> /System/Library/Frameworks/Python.framework/Versions/2.7/lib -l python2.7
> -stdlib=libc++ -lxml2.2 -lpanel -ledit -lz -lncurses
> /Users/buildslave/jenkins/sharedspace/lldb at 2/lldb/build/Release/liblldb-core.a
> -Xlinker -dependency_info -Xlinker /Users/buildslave/jenkins/
> sharedspace/lldb at 2/lldb/build/lldb.build/Release/lldb-gtest-
> build.build/Objects-normal/x86_64/lldb-gtest_dependency_info.dat -o
> /Users/buildslave/jenkins/sharedspace/lldb at 2/lldb/build/Release/lldb-gtest
> Undefined symbols for architecture x86_64:
> "lldb_private::minidump::ConvertMinidumpContextToRegIface(llvm::ArrayRef<unsigned
> char>, lldb_private::RegisterInfoInterface*)", referenced from:
> MinidumpParserTest_ConvertRegisterContext_Test::TestBody() in
> MinidumpParserTest.o
> ld: symbol(s) not found for architecture x86_64
>
>
> It first struck yesterday afternoon:
>
> http://lab.llvm.org:8080/green/view/LLDB/job/lldb_build_test/20745/console
>
> and recurring through today:
>
> http://lab.llvm.org:8080/green/view/LLDB/job/lldb_build_test/20770/console
>
> Is there a change that needs to be made to the test suite to address this?
>
>
> On Tue, Sep 27, 2016 at 12:05 PM, Dimitar Vlahovski via lldb-commits <
> lldb-commits at lists.llvm.org> wrote:
>
>> Author: dvlahovski
>> Date: Tue Sep 27 14:05:55 2016
>> New Revision: 282529
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=282529&view=rev
>> Log:
>> Adding a RegisterContextMinidump_x86_64 converter
>>
>> Summary:
>> This is a register context converter from Minidump to Linux reg context.
>> This knows the layout of the register context in the Minidump file
>> (which is the same as in Windows FYI) and as a result emits a binary data
>> buffer that matches the Linux register context binary layout.
>> This way we can reuse the existing RegisterContextLinux_x86_64 and
>> RegisterContextCorePOSIX_x86_64 classes.
>>
>> Reviewers: labath, zturner
>>
>> Subscribers: beanz, mgorny, lldb-commits, amccarth
>>
>> Differential Revision: https://reviews.llvm.org/D24919
>>
>> Added:
>> lldb/trunk/source/Plugins/Process/minidump/RegisterContextMi
>> nidump_x86_64.cpp
>> lldb/trunk/source/Plugins/Process/minidump/RegisterContextMi
>> nidump_x86_64.h
>> Modified:
>> lldb/trunk/include/lldb/lldb-private-types.h
>> lldb/trunk/source/Plugins/Process/minidump/CMakeLists.txt
>> lldb/trunk/source/Plugins/Process/minidump/MinidumpParser.cpp
>> lldb/trunk/source/Plugins/Process/minidump/MinidumpParser.h
>> lldb/trunk/unittests/Process/minidump/MinidumpParserTest.cpp
>>
>> Modified: lldb/trunk/include/lldb/lldb-private-types.h
>> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/
>> lldb-private-types.h?rev=282529&r1=282528&r2=282529&view=diff
>> ============================================================
>> ==================
>> --- lldb/trunk/include/lldb/lldb-private-types.h (original)
>> +++ lldb/trunk/include/lldb/lldb-private-types.h Tue Sep 27 14:05:55 2016
>> @@ -14,6 +14,8 @@
>>
>> #include "lldb/lldb-private.h"
>>
>> +#include "llvm/ADT/ArrayRef.h"
>> +
>> namespace llvm {
>> namespace sys {
>> class DynamicLibrary;
>> @@ -61,6 +63,15 @@ struct RegisterInfo {
>> // the byte size of this register.
>> size_t dynamic_size_dwarf_len; // The length of the DWARF expression
>> in bytes
>> // in the dynamic_size_dwarf_expr_bytes
>> member.
>> +
>> + llvm::ArrayRef<uint8_t> data(const uint8_t *context_base) const {
>> + return llvm::ArrayRef<uint8_t>(context_base + byte_offset,
>> byte_size);
>> + }
>> +
>> + llvm::MutableArrayRef<uint8_t> mutable_data(uint8_t *context_base)
>> const {
>> + return llvm::MutableArrayRef<uint8_t>(context_base + byte_offset,
>> + byte_size);
>> + }
>> };
>>
>> //----------------------------------------------------------------------
>>
>> Modified: lldb/trunk/source/Plugins/Process/minidump/CMakeLists.txt
>> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugin
>> s/Process/minidump/CMakeLists.txt?rev=282529&r1=282528&r2=
>> 282529&view=diff
>> ============================================================
>> ==================
>> --- lldb/trunk/source/Plugins/Process/minidump/CMakeLists.txt (original)
>> +++ lldb/trunk/source/Plugins/Process/minidump/CMakeLists.txt Tue Sep 27
>> 14:05:55 2016
>> @@ -3,4 +3,5 @@ include_directories(../Utility)
>> add_lldb_library(lldbPluginProcessMinidump
>> MinidumpTypes.cpp
>> MinidumpParser.cpp
>> + RegisterContextMinidump_x86_64.cpp
>> )
>>
>> Modified: lldb/trunk/source/Plugins/Process/minidump/MinidumpParser.cpp
>> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugin
>> s/Process/minidump/MinidumpParser.cpp?rev=282529&r1=282528&
>> r2=282529&view=diff
>> ============================================================
>> ==================
>> --- lldb/trunk/source/Plugins/Process/minidump/MinidumpParser.cpp
>> (original)
>> +++ lldb/trunk/source/Plugins/Process/minidump/MinidumpParser.cpp Tue
>> Sep 27 14:05:55 2016
>> @@ -64,8 +64,9 @@ MinidumpParser::MinidumpParser(
>> : m_data_sp(data_buf_sp), m_header(header),
>> m_directory_map(directory_map) {
>> }
>>
>> -lldb::offset_t MinidumpParser::GetByteSize() {
>> - return m_data_sp->GetByteSize();
>> +llvm::ArrayRef<uint8_t> MinidumpParser::GetData() {
>> + return llvm::ArrayRef<uint8_t>(m_data_sp->GetBytes(),
>> + m_data_sp->GetByteSize());
>> }
>>
>> llvm::ArrayRef<uint8_t>
>>
>> Modified: lldb/trunk/source/Plugins/Process/minidump/MinidumpParser.h
>> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugin
>> s/Process/minidump/MinidumpParser.h?rev=282529&r1=282528&r2=
>> 282529&view=diff
>> ============================================================
>> ==================
>> --- lldb/trunk/source/Plugins/Process/minidump/MinidumpParser.h
>> (original)
>> +++ lldb/trunk/source/Plugins/Process/minidump/MinidumpParser.h Tue Sep
>> 27 14:05:55 2016
>> @@ -39,7 +39,7 @@ public:
>> static llvm::Optional<MinidumpParser>
>> Create(const lldb::DataBufferSP &data_buf_sp);
>>
>> - lldb::offset_t GetByteSize();
>> + llvm::ArrayRef<uint8_t> GetData();
>>
>> llvm::ArrayRef<uint8_t> GetStream(MinidumpStreamType stream_type);
>>
>> @@ -71,6 +71,6 @@ private:
>> llvm::DenseMap<uint32_t, MinidumpLocationDescriptor>
>> &&directory_map);
>> };
>>
>> -} // namespace minidump
>> -} // namespace lldb_private
>> +} // end namespace minidump
>> +} // end namespace lldb_private
>> #endif // liblldb_MinidumpParser_h_
>>
>> Added: lldb/trunk/source/Plugins/Process/minidump/RegisterContextMi
>> nidump_x86_64.cpp
>> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugin
>> s/Process/minidump/RegisterContextMinidump_x86_64.cpp?rev=
>> 282529&view=auto
>> ============================================================
>> ==================
>> --- lldb/trunk/source/Plugins/Process/minidump/RegisterContextMinidump_x86_64.cpp
>> (added)
>> +++ lldb/trunk/source/Plugins/Process/minidump/RegisterContextMinidump_x86_64.cpp
>> Tue Sep 27 14:05:55 2016
>> @@ -0,0 +1,158 @@
>> +//===-- RegisterContextMinidump_x86_64.cpp ----------------------*- C++
>> -*-===//
>> +//
>> +// The LLVM Compiler Infrastructure
>> +//
>> +// This file is distributed under the University of Illinois Open Source
>> +// License. See LICENSE.TXT for details.
>> +//
>> +//===------------------------------------------------------
>> ----------------===//
>> +
>> +// Project includes
>> +#include "RegisterContextMinidump_x86_64.h"
>> +
>> +// Other libraries and framework includes
>> +#include "lldb/Core/DataBufferHeap.h"
>> +
>> +// C includes
>> +// C++ includes
>> +
>> +using namespace lldb_private;
>> +using namespace minidump;
>> +
>> +void writeRegister(llvm::ArrayRef<uint8_t> ®_src,
>> + llvm::MutableArrayRef<uint8_t> reg_dest) {
>> + memcpy(reg_dest.data(), reg_src.data(), reg_dest.size());
>> + reg_src = reg_src.drop_front(reg_dest.size());
>> +}
>> +
>> +llvm::MutableArrayRef<uint8_t> getDestRegister(uint8_t *context,
>> + uint32_t lldb_reg_num,
>> + const RegisterInfo ®) {
>> + auto bytes = reg.mutable_data(context);
>> +
>> + switch (lldb_reg_num) {
>> + case lldb_cs_x86_64:
>> + case lldb_ds_x86_64:
>> + case lldb_es_x86_64:
>> + case lldb_fs_x86_64:
>> + case lldb_gs_x86_64:
>> + case lldb_ss_x86_64:
>> + return bytes.take_front(2);
>> + break;
>> + case lldb_rflags_x86_64:
>> + return bytes.take_front(4);
>> + break;
>> + default:
>> + return bytes.take_front(8);
>> + break;
>> + }
>> +}
>> +
>> +lldb::DataBufferSP lldb_private::minidump::Conver
>> tMinidumpContextToRegIface(
>> + llvm::ArrayRef<uint8_t> source_data,
>> + RegisterInfoInterface *target_reg_interface) {
>> +
>> + const RegisterInfo *reg_info = target_reg_interface->GetRegis
>> terInfo();
>> +
>> + lldb::DataBufferSP result_context_buf(
>> + new DataBufferHeap(target_reg_interface->GetGPRSize(), 0));
>> + uint8_t *result_base = result_context_buf->GetBytes();
>> +
>> + source_data = source_data.drop_front(6 * 8); // p[1-6] home registers
>> + const uint32_t *context_flags;
>> + consumeObject(source_data, context_flags);
>> + const uint32_t x86_64_Flag =
>> + static_cast<uint32_t>(MinidumpContext_x86_64_Flags::x86_64_Flag);
>> + const uint32_t ControlFlag =
>> + static_cast<uint32_t>(MinidumpContext_x86_64_Flags::Control);
>> + const uint32_t IntegerFlag =
>> + static_cast<uint32_t>(MinidumpContext_x86_64_Flags::Integer);
>> + const uint32_t SegmentsFlag =
>> + static_cast<uint32_t>(MinidumpContext_x86_64_Flags::Segments);
>> + const uint32_t DebugRegistersFlag =
>> + static_cast<uint32_t>(MinidumpContext_x86_64_Flags::DebugReg
>> isters);
>> +
>> + if (!(*context_flags & x86_64_Flag)) {
>> + return result_context_buf; // error
>> + }
>> +
>> + source_data = source_data.drop_front(4); // mx_csr
>> +
>> + if (*context_flags & ControlFlag) {
>> + writeRegister(source_data, getDestRegister(result_base,
>> lldb_cs_x86_64,
>> +
>> reg_info[lldb_cs_x86_64]));
>> + }
>> +
>> + if (*context_flags & SegmentsFlag) {
>> + writeRegister(source_data, getDestRegister(result_base,
>> lldb_ds_x86_64,
>> +
>> reg_info[lldb_ds_x86_64]));
>> + writeRegister(source_data, getDestRegister(result_base,
>> lldb_es_x86_64,
>> +
>> reg_info[lldb_es_x86_64]));
>> + writeRegister(source_data, getDestRegister(result_base,
>> lldb_fs_x86_64,
>> +
>> reg_info[lldb_fs_x86_64]));
>> + writeRegister(source_data, getDestRegister(result_base,
>> lldb_gs_x86_64,
>> +
>> reg_info[lldb_gs_x86_64]));
>> + }
>> +
>> + if (*context_flags & ControlFlag) {
>> + writeRegister(source_data, getDestRegister(result_base,
>> lldb_ss_x86_64,
>> +
>> reg_info[lldb_ss_x86_64]));
>> + writeRegister(source_data, getDestRegister(result_base,
>> lldb_rflags_x86_64,
>> +
>> reg_info[lldb_rflags_x86_64]));
>> + }
>> +
>> + if (*context_flags & DebugRegistersFlag) {
>> + source_data =
>> + source_data.drop_front(6 * 8); // 6 debug registers 64 bit each
>> + }
>> +
>> + if (*context_flags & IntegerFlag) {
>> + writeRegister(source_data, getDestRegister(result_base,
>> lldb_rax_x86_64,
>> +
>> reg_info[lldb_rax_x86_64]));
>> + writeRegister(source_data, getDestRegister(result_base,
>> lldb_rcx_x86_64,
>> +
>> reg_info[lldb_rcx_x86_64]));
>> + writeRegister(source_data, getDestRegister(result_base,
>> lldb_rdx_x86_64,
>> +
>> reg_info[lldb_rdx_x86_64]));
>> + writeRegister(source_data, getDestRegister(result_base,
>> lldb_rbx_x86_64,
>> +
>> reg_info[lldb_rbx_x86_64]));
>> + }
>> +
>> + if (*context_flags & ControlFlag) {
>> + writeRegister(source_data, getDestRegister(result_base,
>> lldb_rsp_x86_64,
>> +
>> reg_info[lldb_rsp_x86_64]));
>> + }
>> +
>> + if (*context_flags & IntegerFlag) {
>> + writeRegister(source_data, getDestRegister(result_base,
>> lldb_rbp_x86_64,
>> +
>> reg_info[lldb_rbp_x86_64]));
>> + writeRegister(source_data, getDestRegister(result_base,
>> lldb_rsi_x86_64,
>> +
>> reg_info[lldb_rsi_x86_64]));
>> + writeRegister(source_data, getDestRegister(result_base,
>> lldb_rdi_x86_64,
>> +
>> reg_info[lldb_rdi_x86_64]));
>> + writeRegister(source_data, getDestRegister(result_base,
>> lldb_r8_x86_64,
>> +
>> reg_info[lldb_r8_x86_64]));
>> + writeRegister(source_data, getDestRegister(result_base,
>> lldb_r9_x86_64,
>> +
>> reg_info[lldb_r9_x86_64]));
>> + writeRegister(source_data, getDestRegister(result_base,
>> lldb_r10_x86_64,
>> +
>> reg_info[lldb_r10_x86_64]));
>> + writeRegister(source_data, getDestRegister(result_base,
>> lldb_r11_x86_64,
>> +
>> reg_info[lldb_r11_x86_64]));
>> + writeRegister(source_data, getDestRegister(result_base,
>> lldb_r12_x86_64,
>> +
>> reg_info[lldb_r12_x86_64]));
>> + writeRegister(source_data, getDestRegister(result_base,
>> lldb_r13_x86_64,
>> +
>> reg_info[lldb_r13_x86_64]));
>> + writeRegister(source_data, getDestRegister(result_base,
>> lldb_r14_x86_64,
>> +
>> reg_info[lldb_r14_x86_64]));
>> + writeRegister(source_data, getDestRegister(result_base,
>> lldb_r15_x86_64,
>> +
>> reg_info[lldb_r15_x86_64]));
>> + }
>> +
>> + if (*context_flags & ControlFlag) {
>> + writeRegister(source_data, getDestRegister(result_base,
>> lldb_rip_x86_64,
>> +
>> reg_info[lldb_rip_x86_64]));
>> + }
>> +
>> + // TODO parse the floating point registers
>> +
>> + return result_context_buf;
>> +}
>>
>> Added: lldb/trunk/source/Plugins/Process/minidump/RegisterContextMi
>> nidump_x86_64.h
>> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugin
>> s/Process/minidump/RegisterContextMinidump_x86_64.h?rev=282529&view=auto
>> ============================================================
>> ==================
>> --- lldb/trunk/source/Plugins/Process/minidump/RegisterContextMinidump_x86_64.h
>> (added)
>> +++ lldb/trunk/source/Plugins/Process/minidump/RegisterContextMinidump_x86_64.h
>> Tue Sep 27 14:05:55 2016
>> @@ -0,0 +1,119 @@
>> +//===-- RegisterContextMinidump_x86_64.h ------------------------*- C++
>> -*-===//
>> +//
>> +// The LLVM Compiler Infrastructure
>> +//
>> +// This file is distributed under the University of Illinois Open Source
>> +// License. See LICENSE.TXT for details.
>> +//
>> +//===------------------------------------------------------
>> ----------------===//
>> +
>> +#ifndef liblldb_RegisterContextMinidump_h_
>> +#define liblldb_RegisterContextMinidump_h_
>> +
>> +// Project includes
>> +#include "MinidumpTypes.h"
>> +
>> +// Other libraries and framework includes
>> +#include "Plugins/Process/Utility/RegisterInfoInterface.h"
>> +#include "Plugins/Process/Utility/lldb-x86-register-enums.h"
>> +
>> +#include "lldb/Target/RegisterContext.h"
>> +
>> +#include "llvm/ADT/ArrayRef.h"
>> +#include "llvm/ADT/BitmaskEnum.h"
>> +
>> +// C includes
>> +// C++ includes
>> +
>> +namespace lldb_private {
>> +
>> +namespace minidump {
>> +
>> +// The content of the Minidump register context is as follows:
>> +// (for reference see breakpad's source or WinNT.h)
>> +// Register parameter home addresses: (p1_home .. p6_home)
>> +// - uint64_t p1_home
>> +// - uint64_t p2_home
>> +// - uint64_t p3_home
>> +// - uint64_t p4_home
>> +// - uint64_t p5_home
>> +// - uint64_t p6_home
>> +//
>> +// - uint32_t context_flags - field that determines the layout of the
>> structure
>> +// and which parts of it are populated
>> +// - uint32_t mx_csr
>> +//
>> +// - uint16_t cs - included if MinidumpContext_x86_64_Flags::Control
>> +//
>> +// - uint16_t ds - included if MinidumpContext_x86_64_Flags::Segments
>> +// - uint16_t es - included if MinidumpContext_x86_64_Flags::Segments
>> +// - uint16_t fs - included if MinidumpContext_x86_64_Flags::Segments
>> +// - uint16_t gs - included if MinidumpContext_x86_64_Flags::Segments
>> +//
>> +// - uint16_t ss - included if MinidumpContext_x86_64_Flags::Control
>> +// - uint32_t rflags - included if MinidumpContext_x86_64_Flags::Control
>> +//
>> +// Debug registers: (included if MinidumpContext_x86_64_Flags::
>> DebugRegisters)
>> +// - uint64_t dr0
>> +// - uint64_t dr1
>> +// - uint64_t dr2
>> +// - uint64_t dr3
>> +// - uint64_t dr6
>> +// - uint64_t dr7
>> +//
>> +// The next 4 registers are included if MinidumpContext_x86_64_Flags::
>> Integer
>> +// - uint64_t rax
>> +// - uint64_t rcx
>> +// - uint64_t rdx
>> +// - uint64_t rbx
>> +//
>> +// - uint64_t rsp - included if MinidumpContext_x86_64_Flags::Control
>> +//
>> +// The next 11 registers are included if MinidumpContext_x86_64_Flags::
>> Integer
>> +// - uint64_t rbp
>> +// - uint64_t rsi
>> +// - uint64_t rdi
>> +// - uint64_t r8
>> +// - uint64_t r9
>> +// - uint64_t r10
>> +// - uint64_t r11
>> +// - uint64_t r12
>> +// - uint64_t r13
>> +// - uint64_t r14
>> +// - uint64_t r15
>> +//
>> +// - uint64_t rip - included if MinidumpContext_x86_64_Flags::Control
>> +//
>> +// TODO: add floating point registers here
>> +
>> +// This function receives an ArrayRef pointing to the bytes of the
>> Minidump
>> +// register context and returns a DataBuffer that's ordered by the
>> offsets
>> +// specified in the RegisterInfoInterface argument
>> +// This way we can reuse the already existing register contexts
>> +lldb::DataBufferSP
>> +ConvertMinidumpContextToRegIface(llvm::ArrayRef<uint8_t> source_data,
>> + RegisterInfoInterface
>> *target_reg_interface);
>> +
>> +// For context_flags. These values indicate the type of
>> +// context stored in the structure. The high 24 bits identify the CPU,
>> the
>> +// low 8 bits identify the type of context saved.
>> +LLVM_ENABLE_BITMASK_ENUMS_IN_NAMESPACE();
>> +
>> +enum class MinidumpContext_x86_64_Flags : uint32_t {
>> + x86_64_Flag = 0x00100000,
>> + Control = x86_64_Flag | 0x00000001,
>> + Integer = x86_64_Flag | 0x00000002,
>> + Segments = x86_64_Flag | 0x00000004,
>> + FloatingPoint = x86_64_Flag | 0x00000008,
>> + DebugRegisters = x86_64_Flag | 0x00000010,
>> + XState = x86_64_Flag | 0x00000040,
>> +
>> + Full = Control | Integer | FloatingPoint,
>> + All = Full | Segments | DebugRegisters,
>> +
>> + LLVM_MARK_AS_BITMASK_ENUM(/* LargestValue = */ All)
>> +};
>> +
>> +} // end namespace minidump
>> +} // end namespace lldb_private
>> +#endif // liblldb_RegisterContextMinidump_h_
>>
>> Modified: lldb/trunk/unittests/Process/minidump/MinidumpParserTest.cpp
>> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/unittests/Pro
>> cess/minidump/MinidumpParserTest.cpp?rev=282529&r1=282528&
>> r2=282529&view=diff
>> ============================================================
>> ==================
>> --- lldb/trunk/unittests/Process/minidump/MinidumpParserTest.cpp
>> (original)
>> +++ lldb/trunk/unittests/Process/minidump/MinidumpParserTest.cpp Tue Sep
>> 27 14:05:55 2016
>> @@ -8,8 +8,10 @@
>> //===------------------------------------------------------
>> ----------------===//
>>
>> // Project includes
>> +#include "Plugins/Process/Utility/RegisterContextLinux_x86_64.h"
>> #include "Plugins/Process/minidump/MinidumpParser.h"
>> #include "Plugins/Process/minidump/MinidumpTypes.h"
>> +#include "Plugins/Process/minidump/RegisterContextMinidump_x86_64.h"
>>
>> // Other libraries and framework includes
>> #include "gtest/gtest.h"
>> @@ -18,6 +20,7 @@
>> #include "lldb/Core/DataExtractor.h"
>> #include "lldb/Host/FileSpec.h"
>>
>> +#include "llvm/ADT/ArrayRef.h"
>> #include "llvm/ADT/Optional.h"
>> #include "llvm/Support/FileSystem.h"
>> #include "llvm/Support/Path.h"
>> @@ -50,7 +53,7 @@ public:
>> MinidumpParser::Create(data_sp);
>> ASSERT_TRUE(optional_parser.hasValue());
>> parser.reset(new MinidumpParser(optional_parser.getValue()));
>> - ASSERT_GT(parser->GetByteSize(), 0UL);
>> + ASSERT_GT(parser->GetData().size(), 0UL);
>> }
>>
>> llvm::SmallString<128> inputs_folder;
>> @@ -167,3 +170,61 @@ TEST_F(MinidumpParserTest, GetPidWindows
>> ASSERT_TRUE(pid.hasValue());
>> ASSERT_EQ(4440UL, pid.getValue());
>> }
>> +
>> +// Register stuff
>> +// TODO probably split register stuff tests into different file?
>> +#define REG_VAL(x) *(reinterpret_cast<uint64_t *>(x))
>> +
>> +TEST_F(MinidumpParserTest, ConvertRegisterContext) {
>> + SetUpData("linux-x86_64.dmp");
>> + llvm::ArrayRef<MinidumpThread> thread_list = parser->GetThreads();
>> + const MinidumpThread thread = thread_list[0];
>> + llvm::ArrayRef<uint8_t> registers(parser->GetData().data() +
>> + thread.thread_context.rva,
>> + thread.thread_context.data_size);
>> +
>> + ArchSpec arch = parser->GetArchitecture();
>> + RegisterInfoInterface *reg_interface = new
>> RegisterContextLinux_x86_64(arch);
>> + lldb::DataBufferSP buf =
>> + ConvertMinidumpContextToRegIface(registers, reg_interface);
>> + ASSERT_EQ(reg_interface->GetGPRSize(), buf->GetByteSize());
>> +
>> + const RegisterInfo *reg_info = reg_interface->GetRegisterInfo();
>> +
>> + std::map<uint64_t, uint64_t> reg_values;
>> +
>> + // clang-format off
>> + reg_values[lldb_rax_x86_64] = 0x0000000000000000;
>> + reg_values[lldb_rbx_x86_64] = 0x0000000000000000;
>> + reg_values[lldb_rcx_x86_64] = 0x0000000000000010;
>> + reg_values[lldb_rdx_x86_64] = 0x0000000000000000;
>> + reg_values[lldb_rdi_x86_64] = 0x00007ffceb349cf0;
>> + reg_values[lldb_rsi_x86_64] = 0x0000000000000000;
>> + reg_values[lldb_rbp_x86_64] = 0x00007ffceb34a210;
>> + reg_values[lldb_rsp_x86_64] = 0x00007ffceb34a210;
>> + reg_values[lldb_r8_x86_64] = 0x00007fe9bc1aa9c0;
>> + reg_values[lldb_r9_x86_64] = 0x0000000000000000;
>> + reg_values[lldb_r10_x86_64] = 0x00007fe9bc3f16a0;
>> + reg_values[lldb_r11_x86_64] = 0x0000000000000246;
>> + reg_values[lldb_r12_x86_64] = 0x0000000000401c92;
>> + reg_values[lldb_r13_x86_64] = 0x00007ffceb34a430;
>> + reg_values[lldb_r14_x86_64] = 0x0000000000000000;
>> + reg_values[lldb_r15_x86_64] = 0x0000000000000000;
>> + reg_values[lldb_rip_x86_64] = 0x0000000000401dc6;
>> + reg_values[lldb_rflags_x86_64] = 0x0000000000010206;
>> + reg_values[lldb_cs_x86_64] = 0x0000000000000033;
>> + reg_values[lldb_fs_x86_64] = 0x0000000000000000;
>> + reg_values[lldb_gs_x86_64] = 0x0000000000000000;
>> + reg_values[lldb_ss_x86_64] = 0x0000000000000000;
>> + reg_values[lldb_ds_x86_64] = 0x0000000000000000;
>> + reg_values[lldb_es_x86_64] = 0x0000000000000000;
>> + // clang-format on
>> +
>> + for (uint32_t reg_index = 0; reg_index < reg_interface->GetRegisterCoun
>> t();
>> + ++reg_index) {
>> + if (reg_values.find(reg_index) != reg_values.end()) {
>> + EXPECT_EQ(reg_values[reg_index],
>> + REG_VAL(buf->GetBytes() + reg_info[reg_index].byte_offse
>> t));
>> + }
>> + }
>> +}
>>
>>
>> _______________________________________________
>> lldb-commits mailing list
>> lldb-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
>>
>
>
>
> --
> Tim <penryu at gmail.com>
>
--
Tim <penryu at gmail.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20160928/b14b40fe/attachment-0001.html>
More information about the lldb-commits
mailing list