Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 24 Jul 2001 11:54:18 -0700 (PDT)
From:      John Baldwin <jhb@FreeBSD.org>
To:        j mckitrick <jcm@FreeBSD-uk.eu.org>
Cc:        freebsd-chat@FreeBSD.org, Greg Lehey <grog@FreeBSD.org>
Subject:   Re: stack use preference
Message-ID:  <XFMail.010724115418.jhb@FreeBSD.org>
In-Reply-To: <20010724022658.A63186@dogma.freebsd-uk.eu.org>

next in thread | previous in thread | raw e-mail | index | archive | help

On 24-Jul-01 j mckitrick wrote:
> IIUC, here is what happens:
> 
> foo:                  ; (int i, char *s)
>       push %ebp       ; save current stack frame
>       mov %esp, %ebp  ; make a new one at the current stack pointer
>       sub $8, %ebp    ; make space for local vars
>       mov 8(%ebp), ebx; get char * param
>       mov 4(%ebp), eax; get int param
>       [...]
>       leave           
>       ret
>                       ; same as ???
>       mov %ebp, %esp  ; reset stack pointer
>       pop %ebp        ; restore old frame
>       ret

Yes.  On x86, doing

        enter $8, $0    ; 8 bytes of local storage

is equivalent to:

        push %ebp
        mov %esp, %ebp
        sub $8, %esp

but most compilers that I've seen unroll 'enter' rather than using it directly.
*shrug*

Thus, you could do:

foo:
        enter $8, $0
        mov 12(%ebp), %ebx ; get char * param
        mov 8(%ebp), %eax ; get int param
                        ; note that 4(%ebp) is the saved IP, not a param
        ...
        leave
        ret

> main:
>       push %eax       ; char *
>       push %ebx       ; int
>       call foo
>       [...]

-- 

John Baldwin <jhb@FreeBSD.org> -- http://www.FreeBSD.org/~jhb/
PGP Key: http://www.baldwin.cx/~john/pgpkey.asc
"Power Users Use the Power to Serve!"  -  http://www.FreeBSD.org/

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-chat" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?XFMail.010724115418.jhb>