Linux emulation on FreeBSD AMD64
Valery V.Chikalov
valera at chikalov.dp.ua
Mon Nov 5 04:42:02 PST 2007
Kostik Belousov wrote:
> On Sun, Nov 04, 2007 at 07:50:50PM +0200, Valery V.Chikalov wrote:
>> Kostik Belousov wrote:
>> [...]
>>
>> Index: vmparam.h
>> ===================================================================
>> RCS file: /home/ncvs/src/sys/amd64/include/vmparam.h,v
>> retrieving revision 1.49
>> diff -u -r1.49 vmparam.h
>> --- vmparam.h 25 Sep 2007 06:25:04 -0000 1.49
>> +++ vmparam.h 4 Nov 2007 14:43:39 -0000
>> @@ -45,6 +45,10 @@
>> #ifndef _MACHINE_VMPARAM_H_
>> #define _MACHINE_VMPARAM_H_ 1
>>
>> +#ifdef COMPAT_IA32
>> +#define VM_PROT_READ_IS_EXEC /* if you can read -- then you can exec */
>> +#endif
>> +
> No, this is wrong fix. It changes the ABI for freebsd binaries, and does
> this not only for SysV shm, but for any readable mapping.
>
> Instead, the following things shall be made:
Thanks, will try to do it this way.
But, just for curiosity and for my education.
My point from teh beginning was: we must find differences between linux
emulations in __i386__ and __amd64__(dont take it too literally, I dont
mean diff /sys/i386/xxx /sys/amd64/xxx :-)), because oracle is running
perfectly in __i386__ mode and failed to run in __amd64__.
On the first glance such difference was found: VM_PROT_READ_IS_EXEC is
defined in /sys/[i386|arm]/include/vmparam.h but not in
/sys/amd64/include/vmparam.h.
But:
1) you claim that this is wrong.
So, why? Why this is right for i386|arm and wrong for amd64.
> 1. linux_shmat() shall call kern_shmat().
> 2. kern_shmat() shall take the flag that would force the read mapping
> to be also executable.
> 3. this flag shall be set when kern_shmat() is called from linux_shmat(),
> and not set when called from shmat().
Why this is not applicable to i386 mode?
2) in practice it prove to be useless, i.e. though we have made that
execution bits are present now, but oracle behavior is the same as in
case when I just skipped forced setting execution bit to allow mprotect
call return 0. So possibly, this is not the difference we need to find.
So, again, what are the main known differences between __i386__ and
__amd64__ from "application point of view"? Oracle + linux libs are just
user mode application, right?
Sorry, if I ask too much.
For now I was able to found
1) mention that AMD64 platform is currently a Tier 1 FreeBSD platform.
2) current FreeBSD problem reports for AMD64.
3) http://wiki.freebsd.org/linux-kernel/ltp (Linux Test Project)
Thanks.
Valery.
P.S. If my questions looks like criticism its not.
In our company we have about 100 computers with installed FreeBSD
with versions from 4.0 to 8.0.
In FreeBSD advocacy I'm more saint then Pope :-)
More information about the freebsd-emulation
mailing list