public inbox for gdb@sourceware.org
 help / color / mirror / Atom feed
From: Simon Marchi <simon.marchi@polymtl.ca>
To: Rajinikanth Pandurangan <rajinikanth.p@gmail.com>, gdb@sourceware.org
Subject: Re: GDB with PCIe device
Date: Fri, 8 Jan 2021 10:17:41 -0500	[thread overview]
Message-ID: <601fecb1-538b-13b9-8974-f92ef8ef5ca5@polymtl.ca> (raw)
In-Reply-To: <CAGsSNHDFJ7HJNt6sC3mUoy_OuU-wH8ti=ZnagFsnSzN=CdiYaA@mail.gmail.com>

On 2020-12-26 1:48 a.m., Rajinikanth Pandurangan via Gdb wrote:
> Hello,
> 
> As per my understanding, gdb calls ptrace system calls which intern uses
> kernel implementation of architecture specific action (updating debug
> registers,reading context memory...) to set breakpoints, and so on.
> 
> But in case of running gdb with PCIe devices such as gpu or fpga, how does
> the hardware specific actions are being done?
> 
> Should device drivers provide ptrace equivalent kernel implementation?
> 
>  Could any of the gdb gurus shed some light on debug software stacks in
> debugging software that runs on one of the mentioned pcie devices?
> 
> Thanks in advance,
> 

One such gdb port that is in development is ROCm-GDB, by AMD:

  https://github.com/ROCm-Developer-Tools/ROCgdb

It uses a helper library to debug the GPU threads:

  https://github.com/ROCm-Developer-Tools/ROCdbgapi

I don't want to get too much into how this library works, because I'm
sure I'll say something wrong / misleading.  You can look at the code.
But I'm pretty sure the GPU isn't debugged through ptrace.
The library communicates with the kernel driver somehow, however.

So, the GPU devices can use whatever debug interface, as long as a
corresponding target exist in GDB to communicate with it.

Today, one GDB can communicate with multiple debugging target, but only
with one target per inferior.  So you can be debugging a local program
while debugging another remote program.

In the GPU / coprocessor programming world, the model is often that you
run a program on the host, which spawns some threads on the GPU /
coprocessor.  From the point of view of the user, the threads on the host
and the threads on the GPU / coprocessor belong to the same program, so
would ideally appear in the same inferior.  ROCm-GDB does this, but it's
still done in a slightly hackish way, where the target that talks to the
GPU is installed in the "arch" stratum (this is GDB internal stuff) of
the inferior's target stack and hijacks the calls to the native Linux
target.

The better long term / general solution is probably to make GDB able to
connect to multiple debug targets for a single inferior.

Simon

  reply	other threads:[~2021-01-08 15:17 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-26  6:48 Rajinikanth Pandurangan
2021-01-08 15:17 ` Simon Marchi [this message]
2021-01-11  9:31   ` Aktemur, Tankut Baris
2021-01-21  8:08     ` Rajinikanth Pandurangan
2021-01-27 16:00       ` Metzger, Markus T
2021-02-01  9:27         ` Aktemur, Tankut Baris

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=601fecb1-538b-13b9-8974-f92ef8ef5ca5@polymtl.ca \
    --to=simon.marchi@polymtl.ca \
    --cc=gdb@sourceware.org \
    --cc=rajinikanth.p@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).