With a few hacks and some Makefiles, I have lldb running on Linux
(I'll contribute them once I have a couple more things taken care of).
Great!
However, when I try using it, I get the following not-so-useful
results on the attached ELF-32 file:
eli@eli-laptop:~/llvmgbuild/tools/lldb$ ~/llvmgbuild/Release/bin/lldb
(lldb) file /tmp/a
Current executable set to '/tmp/a' (x86_64).
This has to do with the default architecture that is currently being set. We will need to set the following macros correctly for linux:
LLDB_ARCH_DEFAULT
LLDB_ARCH_DEFAULT_32BIT
LLDB_ARCH_DEFAULT_64BIT
These don't make as much sense in linux as they do on Mac OS X. In Mac OS X we can run either 32 or 64 bit versions of apps on the same OS install if it is 64 bit capable (85% of our Intel machines are 64 bit capable).
So we probably want to set the LLDB_ARCH_DEFAULT defines correctly for the current linux host OS with #ifdefs. This will then mean that you won't have to set the architecture unless you are doing cross debugging.
(lldb) disassemble -n main
(lldb) quit
Segmentation fault
The segfault is probably an issue in my own code, but I'm sort of
suprised the attempted disassembly leads to no output. Any ideas?
We do currently have two ReadMemory calls:
Target::ReadMemory(...)
Process::ReadMemory(...)
The Target version should be able to read memory from constant sections in executable files when we aren't running, I just need to hook it up (read the section contents from the file instead of from live memory). It shouldn't take long, I will try and get to this today as this feature is quite useful.
The rules are simple for ReadMemory:
- use the target if you know your memory might come from a constant section, or you would like us to try and read from the constant sections to avoid a ton of packets going to/from your Process plug-in.
- use the Process version if you want to read from the inferior process and skip the constant section caches.