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