[lldb-dev] LLDB using Valgrind's embedded gdbserver

2015-12-03 Thread Daniel Trebbien via lldb-dev
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

2015-12-05 Thread Daniel Trebbien via lldb-dev
="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=