Re: [PATCH v3 07/19] unwind: Add user space unwinding API
Josh Poimboeuf <[email protected]>
| Newsgroups | org.kernel.vger.linux-toolchains,org.kernel.vger.linux-kernel,org.kernel.vger.linux-perf-users |
|---|---|
| Message-ID | <20241211174830.3l3kxbjg6ctyxnqq@jpoimboe> |
On Wed, Dec 11, 2024 at 03:53:26PM +0100, Jens Remus wrote: > On 09.12.2024 21:54, Josh Poimboeuf wrote: > > if (cfa <= state->sp) > > goto the_end; > > Assuming the x86 definition of the CFA (CFA == SP at call site) this > translates into: > > if (sp <= state->sp) > goto the_end; > > That won't work for architectures that pass the return address in a > register instead of on the stack, such as s390. At least in the > topmost frame the unwound SP may be unchanged. For instance when in > the function prologue or when in a leaf function. > > One of my patches for s390 support introduces a state->first flag, > indicating whether it is the topmost user space frame. Using that > your check could be extended to: > > if ((state->first && sp < state->sp) || (!state->first && sp <= state->sp)) > goto the_end; > > Which could be simplified to: > > if (sp <= state->sp - state->first) > goto the_end; Since my patches are x86-only, how about I leave the "sp <= state->sp" check and then you add something like that in your patches on top? > Btw. neither would work for architectures with an upwards-growing > stack, such as hppa. Not sure if that needs to be considered. I don't think that's needed until if/when sframe becomes supported for such an arch. -- Josh