That's not nice code from the compiler (suboptimal), but it'll work.
leal -24(%ebp),%esp is perfectly ok in the epilogue of a function.
You're right that %esp is lost -- in this case, %ebp has effectively the
same information.

Think like this: a perfectly normal function (without switch_to) can
have this:

f: pushl %ebp
   movl %esp,%ebp
   pushl %ebx
   ... do stuff, decrement %esp a lot to call functions etc. etc. ...
   movl -4(%ebp),%esp
   popl %ebx
   popl %ebp
   ret

Parity Error wrote:
> in schedule(), switch_to() macro changes esp to
> the new process's stack. But, on exit frm schedule,
> how come it does not get overwritten with  ebp-24,
> as the dissasembled code shows. The code was compiled
> without the -fomit-frame-pointer.
> 
>         pushl 508(%ecx)
>         jmp __switch_to
> 1:      popl %ebp
>         popl %edi
>         popl %esi
> 
>         jmp .L1180
> 
> .L1180: 
>       leal -24(%ebp),%esp
>         popl %ebx
>         popl %esi
>         popl %edi
>         movl %ebp,%esp
>         popl %ebp
>         ret
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to