[lldb-dev] Using file-defined registers on Android

Todd Fiala tfiala at google.com
Tue Nov 26 15:57:43 PST 2013

Hi all,

I'm attempting to follow the platform definition approach that Greg laid
out when attempting to attach to a gdbserver running on an Android device.
 In particular, Android arm v7a devices (Nexus 10 and Nexus 7).

I went ahead and created a python register definition.  I generated the
definition file based on referencing these:

svn cat
svn cat

and the output from using one of gdb's commands when gdb was attached to
the gdbserver:

(gdb) maint print raw-registers

Now I'm attempting to do some debugging with lldb.

I created an app, fired it up on the Android, and attempt to attach to the
running process.  Since I can debug this app fine remotely with gdb, I
believe the basic pipe should be okay.

Here's what I do on the lldb side.  The Android app to be debugged is
running at this point.


# set the platform file
(lldb) settings set plugin.process.gdb-remote.target-definition-file

# note I tried to use armv7-pc-linux, which said the file didn't match, and
# doesn't appear to be an armv7a-pc-linux.  Should I be using something
else here?
(lldb) target create --arch arm-pc-linux

# As above, only arm-pc-linux seemed to accept this file.  The .so file
# is an armv7a-built lib in this case and runs fine on Nexus 7 and 10
(lldb) file --arch arm-pc-linux libs/armeabi-v7a/libnative-activity.so

# Now ready for the connect: the adb redirector to communicate with
# gdbserver is localhost:5039
(lldb) gdb-remote 5039

Here's what I get:
(lldb) thread list
Process 8176 stopped
* thread #1: tid = 8176, , stop reason = signal SIGTRAP
(lldb) bt
* thread #1: tid = 8176, , stop reason = signal SIGTRAP
  * frame #0:

The app itself is still running on the Android device - at least the main
thread is.  So the listing of it as stopped appears to be incorrect.  If I
do "(lldb) exit", it will kill the main thread fwiw, but not nuke the
process.  I'm not particularly concerned with that piece yet as it might be
related to the dual-heritage java/native aspect.

I've got the architecture definition file indicating the triple it provides
is arm-*-linux (at least, I think).  I have no idea if the file is working
since I haven't (yet) figured out how to get output from the loading

I'm attaching my architecture definition file and the maintenance dump in
case anybody sees something obviously wrong.

Some questions:

* Am I running the right commands in the right order to connect to a
gdbserver where I'm specifying the register information explicitly?  Are
the target and file commands needed with the architecture file?

* Why is LLDB telling me the armv7a object files are not valid armv7 files?

* Is the "pc" part of the arm-pc-linux part right, wrong, or a don't care
for my scenario?

* Is it the mere fact that I'm attaching remotely good enough for lldb to
be using the architecture definition specified with "settings set
plugin.process.gdb-remote.target-definition-file ...", or is it keying off
of some of the meta data it has (like me specifying the "target create" and
"file --arch" commands)?

* How do I debug python loaded via lldb or get feedback from the lldb
python support (e.g. if there's a syntax error or something else goofy)
when running lldb?

I assume I have something really basic wrong at this point since the arch
definition file specified seems to make no difference on the output vs.
what I see when I attach with lldb without specifying the architecture file.

Thanks for any suggestions and for helping fill in my understanding!

Todd Fiala
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-dev/attachments/20131126/46442036/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: armv7a_linux_target_definition.py
Type: text/x-python-script
Size: 18331 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-dev/attachments/20131126/46442036/attachment.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: gdb-reg-output-armv7a.out
Type: application/octet-stream
Size: 9113 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-dev/attachments/20131126/46442036/attachment.obj>

More information about the lldb-dev mailing list