Messages in this thread | | | Date | Mon, 15 Aug 2016 15:06:27 -0500 | From | Josh Poimboeuf <> | Subject | Re: [PATCH v3 16/51] x86/32: put real return address on stack in entry code |
| |
On Mon, Aug 15, 2016 at 12:22:33PM -0700, H. Peter Anvin wrote: > On 08/15/16 11:25, Josh Poimboeuf wrote: > > On Mon, Aug 15, 2016 at 11:04:42AM -0700, H. Peter Anvin wrote: > >> On 08/15/16 08:09, Josh Poimboeuf wrote: > >>> On Sun, Aug 14, 2016 at 12:31:47AM -0700, Andy Lutomirski wrote: > >>>> On Fri, Aug 12, 2016 at 7:28 AM, Josh Poimboeuf <jpoimboe@redhat.com> wrote: > >>>>> This standardizes the stacks of idle tasks to be consistent with other > >>>>> tasks on 32-bit. > >>>> > >>>> It might be nice to stick a ud2 or 1: hlt; jmp 1b or similar > >>>> afterwards to make it clear that initial_code can't return. > >>> > >>> Yeah, I'll do something like that. > >>> > >> > >> "Standardizing the stack" how? A zero on the stack terminates the stack > >> trace. > > > > Instead of zero, user tasks have a real return address at that spot. > > This makes idle tasks consistent with that, so we have a well defined > > "end of stack". Also it makes the stack trace more useful since it > > shows what entry code was involved in calling into C. > > > > So how is the stack terminated, and does things like kdb and kgdb need > modifications? Or is there now a stack termination above the struct > pt_regs?
Even in today's code, there's no real "terminator". The unwinder just stops when it leaves the stack bounds. See print_context_stack() in mainline.
-- Josh
| |