On Sat Jan 30, 2021 at 7:44 AM CST, Nicholas Piggin wrote: > Excerpts from Michael Ellerman's message of January 30, 2021 9:32 pm: > > "Christopher M. Riedl" <c...@codefail.de> writes: > >> The idle entry/exit code saves/restores GPRs in the stack "red zone" > >> (Protected Zone according to PowerPC64 ELF ABI v2). However, the offset > >> used for the first GPR is incorrect and overwrites the back chain - the > >> Protected Zone actually starts below the current SP. In practice this is > >> probably not an issue, but it's still incorrect so fix it. > > > > Nice catch. > > > > Corrupting the back chain means you can't backtrace from there, which > > could be confusing for debugging one day. > > Yeah, we seem to have got away without noticing because the CPU will > wake up and return out of here before it tries to unwind the stack, > but if you tried to walk it by hand if the CPU got stuck in idle or > something, then we'd get confused. > > > It does make me wonder why we don't just create a stack frame and use > > the normal macros? It would use a bit more stack space, but we shouldn't > > be short of stack space when going idle. > > > > Nick, was there a particular reason for using the red zone? > > I don't recall a particular reason, I think a normal stack frame is > probably a good idea.
I'll send a version using STACKFRAMESIZE - I assume that's the "normal" stack frame :) I admit I am a bit confused when I saw the similar but much smaller STACK_FRAME_OVERHEAD which is also used in _some_ cases to save/restore a few registers. > > Thanks, > Nick