[lldb-dev] LLDB using Valgrind's embedded gdbserver
Hello, I am working on enhancing Valgrind's embedded gdbserver to allow LLDB to use it (https://bugs.kde.org/show_bug.cgi?id=356174 ). After adding support for 'qC' packets to the embedded gdbserver, LLDB is able to continue the halted program running under Valgrind; however, a short moment later LLDB crashes. I am using OS X 10.11.1 (15B42) and lldb-340.4.110.1. The location of the segmentation fault is ABISysV_x86_64::GetArgumentValues(lldb_private::Thread&, lldb_private::ValueList&) const + 147: [ 0] 0x00010432d7ad LLDB`ABISysV_x86_64::GetArgumentValues(lldb_private::Thread&, lldb_private::ValueList&) const + 147 at ABISysV_x86_64.cpp:485:32 481 addr_t current_stack_argument = sp + 8; // jump over return address 482 483 uint32_t argument_register_ids[6]; 484 -> 485 argument_register_ids[0] = reg_ctx->GetRegisterInfo (eRegisterKindGeneric, LLDB_REGNUM_GENERIC_ARG1)->kinds[eRegisterKindLLDB]; Someone at Apple Developer Relations (ADR) informed me that unlike gdb, lldb does not have an initial target definition set, and relies on the gdbserver to tell it which registers the gdbserver supports. This can be done either by responding to 'qRegisterInfo XX' packets or to 'qXfer:features:read:target.xml'. ADR also informed me about the plugin.process.gdb-remote.target-definition-file LLDB setting and the example target definitions at http://llvm.org/svn/llvm-project/lldb/trunk/examples/python/ I can confirm that using either x86_64_linux_target_definition.py or x86_64_target_definition.py fixes the segfault issue. Valgrind's gdbserver does not support qRegisterInfo, but it does support qXfer:features:read:target.xml. Enabling LLDB's gdb-remote logging, I am seeing that the Valgrind embedded gdbserver is sending: target.xml: ``` i386:x86-64 ``` 64bit-core.xml: ``` ``` (64bit-sse.xml and 64bit-avx.xml omitted.) Can anyone see why this XML target definition would be causing the crash? Daniel Trebbien ___ lldb-dev mailing list lldb-dev@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev
Re: [lldb-dev] LLDB using Valgrind's embedded gdbserver
="8" generic="arg5"/> >altname="arg6" group_id="1" gcc_regnum="9" dwarf_regnum="9" generic="arg6"/> >group_id="1" gcc_regnum="10" dwarf_regnum="10"/> >group_id="1" gcc_regnum="11" dwarf_regnum="11"/> >group_id="1" gcc_regnum="12" dwarf_regnum="12"/> >group_id="1" gcc_regnum="13" dwarf_regnum="13"/> >group_id="1" gcc_regnum="14" dwarf_regnum="14"/> >group_id="1" gcc_regnum="15" dwarf_regnum="15"/> >altname="pc" group_id="1" gcc_regnum="16" dwarf_regnum="16" generic="pc"/> >altname="flags" group_id="1" generic="flags"/> >group_id="1"/> >group_id="1"/> >group_id="1"/> >group_id="2"/> >group_id="2"/> >group_id="2"/> >group_id="2"/> >group_id="2"/> >group_id="2"/> >group_id="2"/> >group_id="2"/> >group_id="2"/> >group="general" group_id="2"/> >type="float" encoding="vector" format="vector-uint8" group_id="2" > gcc_regnum="33" dwarf_regnum="33"/> >type="float" encoding="vector" format="vector-uint8" group_id="2" > gcc_regnum="34" dwarf_regnum="34"/> >type="float" encoding="vector" format="vector-uint8" group_id="2" > gcc_regnum="35" dwarf_regnum="35"/> >type="float" encoding="vector" format="vector-uint8" group_id="2" > gcc_regnum="36" dwarf_regnum="36"/> >type="float" encoding="vector" format="vector-uint8" group_id="2" > gcc_regnum="37" dwarf_regnum="37"/> >type="float" encoding="vector" format="vector-uint8" group_id="2" > gcc_regnum="38" dwarf_regnum="38"/> >type="float" encoding="vector" format="vector-uint8" group_id="2" > gcc_regnum="39" dwarf_regnum="39"/> >type="float" encoding="vector" format="vector-uint8" group_id="2" > gcc_regnum="40" dwarf_regnum="40"/> >type="float" encoding="vector" format="vector-uint8" group_id="2" > gcc_regnum="17" dwarf_regnum="17"/> >type="float" encoding="vector" format="vector-uint8" group_id="2" > gcc_regnum="18" dwarf_regnum="18"/> >type="float" encoding="vector" format="vector-uint8" group_id="2" > gcc_regnum="19" dwarf_regnum="19"/> >type="float" encoding="vector" format="vector-uint8" group_id="2" > gcc_regnum="20" dwarf_regnum="20"/> >type="float" encoding="vector" format="vector-uint8" group_id="2" > gcc_regnum="21" dwarf_regnum="21"/> >type="float" encoding="vector" format="vector-uint8" group_id="2" > gcc_regnum="22" dwarf_regnum="22"/> >type="float" encoding="vector" format="vector-uint8" group_id="2" > gcc_regnum="23" dwarf_regnum="23"/> >type="float" encoding="vector" format="vector-uint8" group_id="2" > gcc_regnum="24" dwarf_regnum="24"/> >type="float" encoding="vector" format="vector-uint8" group_id="2" > gcc_regnum="25" dwarf_regnum="25"/> >type="float" encoding="vector" format="vector-uint8" group_id="2" > gcc_regnum="26" dwarf_regnum="26"/> >type="float" encoding="vector" format="vector-uint8" group_id="2" > gcc_regnum="27" dwarf_regnum="27"/> >type="float" encoding="vector" format="vector-uint8" group_id="2" > gcc_regnum="28" dwarf_regnum=