All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Maciej W. Rozycki" <macro@orcam.me.uk>
To: Jinyang He <hejinyang@loongson.cn>
Cc: "open list:MIPS" <linux-mips@vger.kernel.org>
Subject: Re: [Question] How to save_stack_trace_tsk_reliable() on mips?
Date: Mon, 1 Mar 2021 01:10:19 +0100 (CET)	[thread overview]
Message-ID: <alpine.DEB.2.21.2103010043260.44210@angie.orcam.me.uk> (raw)
In-Reply-To: <a0823990-420f-8091-7866-8ad588ef542d@loongson.cn>

On Thu, 4 Feb 2021, Jinyang He wrote:

> Excuse me. Here is a question mail. How to get a reliable stack
> of tasks on mips?

 You need stack unwinding information.  High-level programming language 
exception handling uses that too.  The information is in the DWARF format, 
also used for debugging, and stored in a separate section within the ELF 
module in question (for debugging it can be stored separately, but for 
exception handling obviously it cannot, as the runtime needs to have it 
mapped in memory and accessible without referring to other files).

> First, why save_stack_trace_tsk() to get stack is unreliable? Is it
> because the asm code does not obey with gcc's stack rules, or others?

 The stack frame as specified by the MIPS psABI does not have a fixed 
format, so it is not possible to interpret its contents by just examining 
them without additional information.

> Secondly, can we use some methods to make the task stack reliable? For
> example, use the fp register, can this method work? But it seems make
> no sense for asm code unless each asm code do some fp work.

 The use of a hard frame pointer register does not change anything, 
because the variable stack frame format does not provide the information 
as to where exactly the previous frame pointer or the return address have 
been stored.  You still need additional information.

> I found that the powerpc implemented save_stack_trace_tsk_reliable(),
> and the x86 and s390 implemented the arch_stack_walk_reliable(). x86
> implemented it through ORC unwind. For powerpc, it may implement it
> through its ABI (I guess, I'm not familiar with them). Do we have a
> chance to implement it in some way?

 I worked with the Power psABI and it has a fixed stack frame format where 
you can figure out the location of the previous frame pointer and the link 
register from the current frame pointer.  This is enough information to be 
able to backtrace.  ISTR x86 has a similar stack frame design, though I'm 
not sure offhand how the case of `-fomit-frame-pointer' code is handled.  
No idea as to the S/390, but I guess it follows the pattern.

> Finally, I found that some emails related to ORC unwind on ARM from the
> livepatch mail list. It is difficult for me to understand. Is anyone
> interested in ORC unwind on MIPS and have researched it?

 I can't comment on this part, I don't know what ORC is.

 HTH,

  Maciej

  reply	other threads:[~2021-03-01  0:11 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-04 12:31 [Question] How to save_stack_trace_tsk_reliable() on mips? Jinyang He
2021-03-01  0:10 ` Maciej W. Rozycki [this message]
2021-03-01  2:46   ` Jinyang He
2021-03-01 17:17     ` Maciej W. Rozycki

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=alpine.DEB.2.21.2103010043260.44210@angie.orcam.me.uk \
    --to=macro@orcam.me.uk \
    --cc=hejinyang@loongson.cn \
    --cc=linux-mips@vger.kernel.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.