public inbox for gdb@sourceware.org
 help / color / mirror / Atom feed
From: Simon Marchi <simon.marchi@polymtl.ca>
To: David Blaikie <dblaikie@gmail.com>
Cc: Tim Newsome <tim@sifive.com>, gdb <gdb@sourceware.org>
Subject: Re: Remote query for structure layout
Date: Tue, 30 Mar 2021 20:16:09 -0400	[thread overview]
Message-ID: <1c8fec3c-0d7e-d133-bf88-adaf764473f1@polymtl.ca> (raw)
In-Reply-To: <CAENS6EsCMr5oV1DPF5MaP0eLdc2udR2E8pXj=hsKtxYvb9tXOw@mail.gmail.com>

On 2021-03-30 6:44 p.m., David Blaikie wrote:
> If it's "just" some user-code, is there a variable of the desired type being declared around the function call? 

AFAIK, this type wouldn't be used by the FreeRTOS code at all, so no.
Again, here's my understanding, hopefully it's close enough to the
reality.

When a trap occurs, FreeRTOS saves the current task's register values on
the task's stack, using some arch-specific assembly code.  For example,
for RISC-V:

    https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/534eba66ce4a5bda45d5edeeb81ac5a3cf6d0df8/portable/GCC/RISC-V/portASM.S#L121

The way these registers are pushed is an implementation detail of
FreeRTOS.  And we can imagine that it can vary depending on the
compile-time FreeRTOS configuration, which OpenOCD doesn't know about.

To get register values of scheduled out tasks, OpenOCD needs to
interpret these register values from the tasks' stacks.

So Tim's suggestion is: have FreeRTOS declare a structure that has the
exact layout as the saved registers on the stack:

struct freertos_saved_regs {
  int x1;
  int x5;
  int x6;
  ...
};

Consumers could read that structure's layout from the DWARF info, and
read the register values based on that.  That would be a lot more robust
than hard-coding in the consumers how FreeRTOS stores things.

However, since that struct would never actually be used by FreeRTOS'
code, the compiler won't emit it.  Hence the need to find a way to force
the compiler to include it in the DWARF.

Does that clarify the situation?

Simon

  reply	other threads:[~2021-03-31  0:16 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <mailman.6.1616932808.1485743.gdb@sourceware.org>
2021-03-30 20:35 ` Tim Newsome
2021-03-30 21:33   ` Simon Marchi
2021-03-30 21:41     ` David Blaikie
2021-03-30 21:49       ` Simon Marchi
2021-03-30 22:03         ` David Blaikie
2021-03-30 22:38           ` Simon Marchi
2021-03-30 22:44             ` David Blaikie
2021-03-31  0:16               ` Simon Marchi [this message]
2021-03-31  3:27                 ` David Blaikie
2021-03-31 13:00                   ` Simon Marchi
2021-04-02 22:05                     ` David Blaikie
2021-04-03 19:39                       ` Simon Marchi
2021-03-31 14:06                   ` Tim Newsome
2021-03-28 11:06 Thomas Weißschuh
2021-03-29 16:05 ` Simon Marchi
2021-03-29 17:33   ` Thomas Weißschuh
2021-03-29 19:42     ` Simon Marchi
2021-03-29 20:02       ` Philippe Waroquiers
2021-03-29 20:10         ` Simon Marchi
2021-03-29 20:20           ` Philippe Waroquiers

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=1c8fec3c-0d7e-d133-bf88-adaf764473f1@polymtl.ca \
    --to=simon.marchi@polymtl.ca \
    --cc=dblaikie@gmail.com \
    --cc=gdb@sourceware.org \
    --cc=tim@sifive.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).