Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 28 Oct 2007 00:08:38 +0300
From:      "Valery V.Chikalov" <valera@chikalov.dp.ua>
To:        Ivan Voras <ivoras@freebsd.org>,  freebsd-emulation@freebsd.org
Subject:   Re: Linux emulation on FreeBSD AMD64
Message-ID:  <4723A8D6.6020002@chikalov.dp.ua>
In-Reply-To: <fg05l9$n32$2@ger.gmane.org>
References:  <4721AB07.20708@novakom.com.ua> <fg05l9$n32$2@ger.gmane.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Ivan Voras wrote:
> Valery V.Chikalov wrote:
>> Hi, list.
> 
>> Now being inspired the great performance improvements on multiprocessors
>> configurations I am trying to switch to FreeBSD 7.0 version, moreover on
>> AMD64 architecture. Must I expect some regression in support old Linux
>> application here? Are some theoretical obstacles exists that linux
>> application which successfully worked on FreeBSD from 5.0 up to 6.2
>> can not be running on 7.0 AMD64?
> 
> AFAIK Linux emulation on AMD64 works only for 32-bit code, so you have
> practically two emulation layers: linux-freebsd and 32-64. There's all
> kinds of things that might go wrong.
> 
> This is a "generic" answer, I don't really know the exact answer to your
> question.
> 
>
Hi, Ivan.

Thank you for your answer.

Yes I know that Linux emulation is 32 bit ever on AMD64 FreeBSD and that 
exactly what I need as I own old 32bit 9.0.1 Oracle server.

I have investigated this problem little more.

Oracle(+ rh7) can be successfully started on FreeBSD 7.0 (i386)
    SMP capable kernel, SHED_ULE, Core2Duo and so on...

I fond this: http://wiki.freebsd.org/linux-kernel/ltp
I don't know how actual this info now, it seems little bit old.

I did:

grep UNIMPL /sys/amd64/linux32/syscalls.master > amd64.unimpl.txt
grep UNIMPL /sys/i386/linux/syscalls.master > i386.unimpl.txt

diff i386.unimpl.txt amd64.unimpl.txt

6d5
< 28    AUE_FSTAT       UNIMPL  fstat
14d12
< 86    AUE_USELIB      UNIMPL  linux_uselib
16d13
< 101   AUE_NULL        UNIMPL  ioperm
18,19d14
< 113   AUE_NULL        UNIMPL  vm86old
< 123   AUE_NULL        UNIMPL  modify_ldt
21d15
< 166   AUE_NULL        UNIMPL  vm86
29d22
< 244   AUE_NULL        UNIMPL  linux_get_thread_area

So there is some regression between i386 and AMD64 in a number of system 
calls emulated.

But Oracle not dumping core with signal 12(non-existent system call)
It's saying:
==========
27122, 00000, "unable to protect memory"
// *Cause: mprotect() call failed
==========

and than dumps core with signal 11.

I instrumented mprotect(2) system call in linux32_machdep.c with

-return (mprotect(td, &bsd_args));

+ret = mprotect(td, &bsd_args);
+printf("mprotect addr:%lx, return %d\n", uap->addr, ret);
+return ret;

and got something like:

Oct 27 19:42:59 tiger kernel: mprotect addr:2a27d000, return 0
Oct 27 19:42:59 tiger kernel: mprotect addr:2a7c1000, return 0
Oct 27 19:42:59 tiger kernel: mprotect addr:2a7cd000, return 0
Oct 27 19:42:59 tiger kernel: mprotect addr:2a7e2000, return 0
Oct 27 19:42:59 tiger kernel: mprotect addr:2a7ef000, return 0
Oct 27 19:43:09 tiger kernel: mprotect addr:55c00000, return 13
Oct 27 19:43:09 tiger kernel: mprotect addr:55c81000, return 13

where 13 is EACCES.

So, I think we have some regression in supporting old linux binaries on 
AMD64 and possibly not connected with missing system calls.
Don't know where to move from here.

BTW, ktrace don't usable for me on FreeBSD 7.0 any arch,
kdump dumping core on freebsd6_mmap system call.

Thanks.
Valery.



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