Subject: Re: Emulation extension
To: Frank van der Linden <frank@wins.uva.nl>
From: Chris G. Demetriou <cgd@cs.cmu.edu>
List: tech-kern
Date: 03/05/1997 14:47:17
> I propose the following:
> 
> * Add a new field to the proc structure, p_emuldata, of type void *
>   The name is inspired by v_data in the vnode structure, as it serves
>   a similar purpose. This field will be NULL if the current emulation does
>   not need any special data stored.
> * The following fields will be added to the emul structure (see sys/proc.h):
>   - void *(*e_init(struct proc *p))
>     This allocates and initializes the emulation-dependent data. Called
>     at exec time.

Why have this return a void * (presumably to be stuffed into
p_emuldata), rather than stuffing it there itself?  Since all of the
other functions (including exit) just take one or more struct proc *s
and return void, why not be consistent?


> On a related note, but it's something that can be dealt with at some other
> time: I'm not happy about the current emul structure, in the sense that they
> contain information on both the OS that is being emulated, as well as
> the binary type. These two are not really related, and should be seperated
> in my opinion. The fields dealing with the binary format (there are only
> 2) are inly used at exec time, and not needed afterwards. For an emulation
> like the Linux emulation, a check whether a process is an emulated Linux
> processes now involves checking whether p_emul is equal either to
> &emul_linux_elf or &emul_linux_aout. But the binary format is irrelevant
> at runtime. Any opinions on this?

This probably makes sense.


cgd