[lldb-dev] Symbolicate user processes when kernel debugging

John Otter via lldb-dev lldb-dev at lists.llvm.org
Wed Jun 22 03:38:56 PDT 2016


> "I want a GDB server port for user space process 123"

How would I start this gdb server? Do you mean a gdb-server running in
the target userspace? Wouldn't that make impossible to use it when the
kernel is stopped?

I tried searching around and the only resources I found is this old
macros file for gdb
(http://opensource.apple.com/source/xnu/xnu-1456.1.26/kgmacros) that
had a switchtouserthread command that seems to do something similar to
what I want to achieve. (but obviously I want to use lldb so that
doesn't apply, also I'm not sure it would work since it is pretty
old).
The other interesting file I found is
https://opensource.apple.com/source/xnu/xnu-3247.1.106/tools/lldbmacros/usertaskgdbserver.py?txt
that has a beginusertaskdebugging that from the description seems to
do what you were describing, but strangely it doesn't seem to be
available/implemented?

John Otter

2016-06-21 0:57 GMT+02:00 Greg Clayton <gclayton at apple.com>:
> The right way to do this is to say "I want a GDB server port for user space process 123". The python would then start up a socket that can be connected to that can vend the information about the user space process directly through a dedicated GDB server port. Memory reads would translate the memory asked for through the GDB server port into a physical address and do the read for you as if the memory read came from user space process 123. I know someone had this code working here at Apple, but I am not sure if it made it into the macros. You might check around for such a thing as it might already be in there. Then you can also read memory and read registers just as you would with a core file. Then you can skip all of the manual symbolication stuff as the process will set itself up correctly if the GDB server is responding to all the right questions.
>
> So check around and make sure this isn't already checked into the code.
>
> Greg Clayton
>> On Jun 16, 2016, at 1:38 AM, John Otter via lldb-dev <lldb-dev at lists.llvm.org> wrote:
>>
>> I'm using lldb to debug the OS X kernel, and it works great.
>> I would like to have more flexibility in analysing user programs while
>> debugging the kernel itself,
>> and specifically symbolicate the code of the user programs.
>>
>> For example I often use the command showthreaduserstack defined here
>> http://opensource.apple.com//source/xnu/xnu-2422.1.72/tools/lldbmacros/userspace.py
>> to take
>> a look at the user stack of a process running in kernel mode that just
>> scripts the process of
>> obtaining the thread saved state, but the output unfortunately isn't
>> symbolicated.
>>
>> Is there a way to add symbols for a user process (programs and shared libs?)
>> I looked into the target modules add command, but when I try to add a
>> copy of the executable
>> it just says that the file I pick doesn't exist (even though it clearly exist).
>> Also I'm not entirely sure how that would work since the user space
>> addressing space changes
>> for every process, even if I manually set the loading address.
>> Would that work only for that specific process and execution?
>>
>> Regards,
>> John
>> _______________________________________________
>> lldb-dev mailing list
>> lldb-dev at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev
>


More information about the lldb-dev mailing list