On 02/12/2013 10:17:00 PM, Bhushan Bharat-R65777 wrote:


> -----Original Message-----
> From: Wood Scott-B07421
> Sent: Wednesday, February 13, 2013 6:53 AM
> To: Bhushan Bharat-R65777
> Cc: Wood Scott-B07421; Michael Neuling; linuxppc-dev@lists.ozlabs.org
> Subject: Re: BOOKE KVM calling load_up_fpu from C?
>
> On 02/12/2013 07:18:14 PM, Bhushan Bharat-R65777 wrote:
> >
> >
> > > -----Original Message-----
> > > From: Wood Scott-B07421
> > > Sent: Wednesday, February 13, 2013 12:03 AM
> > > To: Bhushan Bharat-R65777
> > > Cc: Michael Neuling; Wood Scott-B07421;
> > linuxppc-dev@lists.ozlabs.org
> > > Subject: Re: BOOKE KVM calling load_up_fpu from C?
> > >
> > >  On 64-bit, though, there's a store to the caller's stack frame
> > > (yuck) which the kvm/booke.h caller is not prepared for.
> >
> > So if caller is using r12 then it can lead to come corruption, right ?
>
> No, r12 is a volatile register in the ABI, as is r9. The issue is that the
> stack can be corrupted.

What do you mean by stack is corrupted?

load_up_fpu() makes assumptions about the caller's stack frame that aren't true when called from C code.

My understanding is that when calling the assembly function from C function then stack frame will not be pushed and assembly function uses the caller stack frame.

Huh? Assembly functions obey the same ABI as C functions (at least, asm functions meant to be callable from C do). If the above were true, how would C code know that it's calling an asm function, and how would it know how much stack to create and which portions would be clobbered?

The issue with load_up_fpu() is that it was apparently not meant to be called directly from C code.

-Scott
_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to