Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 24 Apr 2002 20:06:09 -0400 (EDT)
From:      Kenneth Culver <culverk@alpha.yumyumyum.org>
To:        Peter Wemm <peter@wemm.org>
Cc:        Andrew Gallatin <gallatin@cs.duke.edu>, Brandon S Allbery KF8NH <allbery@ece.cmu.edu>, <freebsd-hackers@FreeBSD.ORG>, FreeBSD-CURRENT List <freebsd-current@FreeBSD.ORG>
Subject:   Re: implementing linux mmap2 syscall 
Message-ID:  <20020424195920.D39879-100000@alpha.yumyumyum.org>
In-Reply-To: <20020424235122.263FB38FD@overcee.wemm.org>

next in thread | previous in thread | raw e-mail | index | archive | help
> Here's where it happens:
> sys/i386/linux/linux_sysvec.c
>
> static void
> linux_prepsyscall(struct trapframe *tf, int *args, u_int *code, caddr_t *params)
> {
>         args[0] = tf->tf_ebx;
>         args[1] = tf->tf_ecx;
>         args[2] = tf->tf_edx;
>         args[3] = tf->tf_esi;
>         args[4] = tf->tf_edi;
>         *params = NULL;         /* no copyin */
> }
>
> You probably want to add:
> 	args[5] = tf->tf_ebp;
> so that it ends up in the syscallargs struct.

Yeah, I did that... it still doesn't work, tf_ebp isn't getting set... So
I'm thinking that either I have a glibc that's too old, or something else
is wrong...

>
> For FreeBSD syscalls, we copy this from the top of stack for the number of
> 32 bit words specified in the syscall table in i386/trap.c:
>         if (params && (i = narg * sizeof(int)) &&
>             (error = copyin(params, (caddr_t)args, (u_int)i))) {
> (narg comes from the syscall table).
>
OK, that gives me an idea...

Ken


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?20020424195920.D39879-100000>