Subject: Re: MI loadfile() cannot load a.out kernel properly?
To: None <tech-kern@netbsd.org>
From: Izumi Tsutsui <tsutsui@ceres.dti.ne.jp>
List: tech-kern
Date: 10/05/1999 01:02:51
In <199910040101.KAA03501@icnmp9.icg.tnr.sharp.co.jp>
itohy@netbsd.org wrote:

> Should we have port-news68k list?

Well... I'm not sure... ;-p

> > 1) aout_exec() seems to load the kernel into its entry address,
> > not text start address. So if kernel entry is not at text start,
> > the kernel would be loaded on wrong address.
> 
> The a.out format doesn't have information about load address.
> Loading at the entry address is a hack.

Ok, now I see.
BTW, can "marks[MARKS_START]" be used to specify load address?
Currently it does not used at all. In sun3/stand/libsa/exec_sun.c,
load address is passed to load_sun() function.

> > 2) If the kernel has OMAGIC header, aout_exec() would try to load
> > the header before the text, but this would cause problem if text
> > starts at 0x0. 
> 
> The a.out header does not belongs to any segment on OMAGIC and NMAGIC
> binaries, but is included in the text segment on ZMAGIC.

I remove LOAD_HDR from flags (and fix the below alignment code),
then NMAGIC kernel is loaded properly.

Anyway, "if (magic == OMAGIC)" in aout_exec() should be fixed as
"if (magic == OMAGIC || magic == NMAGIC)", I think.
It seems that only the sun3 kernel (which is OMAGIC) uses
a.out header, though. (sun3 should switch ZMAGIC kernel?)

> > I guess the size should be like this:
> > 		int size = ((int)maxp & (__LDPGSZ - 1)) ?
> > 			    __LDPGSZ - ((int)maxp & (__LDPGSZ - 1)) : 0;
> 
> 	size = -(unsigned)maxp & (__LDPGSIZE - 1);
> 
> is a little simpler :).

I agree, but it seems a bit hard to read for me ;-)
---
Izumi Tsutsui
tsutsui@ceres.dti.ne.jp