Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 13 Dec 2000 14:25:40 -0800
From:      Alfred Perlstein <bright@wintelcom.net>
To:        Drew Eckhardt <drew@PoohSticks.ORG>
Cc:        Marc Tardif <intmktg@CAM.ORG>, freebsd-hackers@FreeBSD.ORG, obrien@FreeBSD.ORG
Subject:   Re: syscall assembly
Message-ID:  <20001213142539.R16205@fw.wintelcom.net>
In-Reply-To: <200012132221.eBDMLdh28943@chopper.Poohsticks.ORG>; from drew@PoohSticks.ORG on Wed, Dec 13, 2000 at 03:21:39PM -0700
References:  <20001213141023.O16205@fw.wintelcom.net> <200012132221.eBDMLdh28943@chopper.Poohsticks.ORG>

next in thread | previous in thread | raw e-mail | index | archive | help
David, can you look at this?

#include <fcntl.h>

int foo() {
  open("file", O_RDONLY);
  return 0;
}
int main() {
  int x;
  x = foo();
  return 0;
}

results in:

foo:
        pushl %ebp
        movl %esp,%ebp
        subl $8,%esp
        addl $-8,%esp
        pushl $0
        pushl $.LC0
        call open
        xorl %eax,%eax
        leave
        ret

why the subl then addl?

~ % gcc -v
Using builtin specs.
gcc version 2.95.2 19991024 (release)
~ % uname -a
4.2-STABLE FreeBSD 4.2-STABLE #1: Wed Dec  6 02:49:24 PST 2000


* Drew Eckhardt <drew@PoohSticks.ORG> [001213 14:21] wrote:
> In message <20001213141023.O16205@fw.wintelcom.net>, bright@wintelcom.net write
> s:
> >>         subl $8,%esp
> >>         addl $-8,%esp
> 
> >> What is the purpose of the subl and addl
> >> instructions? On Linux, they are simply
> >> unexistent..
> >
> >FreeBSD passes syscall args on the stack, Linux uses registers.
> 
> The 'C' compiler doesn't know open is a syscall, and treats it like
> any other code.
> 
> The pushls put the arguments on the stack.
> 
> The subl/addl are there because your version of GCC is broken.

-- 
-Alfred Perlstein - [bright@wintelcom.net|alfred@freebsd.org]
"I have the heart of a child; I keep it in a jar on my desk."


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




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