README revision 1.4
11.4Sandvar#	$NetBSD: README,v 1.4 2022/04/04 19:33:45 andvar Exp $
21.2Sperry
31.3SphxBUILD INSTRUCTIONS
41.1Sis
51.3SphxBuilding LoadBSD isn't easy since several sources from the NetBSD repository
61.3Sphxare required. Compiling these sources under AmigaOS without clashes with the
71.3Sphxnative GCC headers requires some knowledge. This document tries to describe
81.3Sphxthe steps necessary to rebuild LoadBSD with an AmigaOS gcc. These instructions
91.3Sphxdo only apply for LoadBSD versions using the loadfile() interface. Previous
101.3Sphxversion do only require getopt.c and reboot.h.
111.3Sphx
121.3SphxNote: Its not possible to build LoadBSD with the native NetBSD compiler!
131.3Sphx      LoadBSD is an *AmigaOS* program and must be built with an AmigaOS
141.3Sphx      compiler. Of course, a properly setup cross-compiler does work.
151.3Sphx
161.3SphxRequired sources from NetBSD (either HEAD or from a release branch)
171.3Sphx
181.3Sphx   From src/sys/lib/libsa: loadfile.h,loadfile.c,loadfile_elf32.c,loadfile_aout.c
191.3Sphx   From src/lib/libc/stdlib: getopt.c
201.3Sphx
211.3Sphx      place these files in the directory where you have loadbsd.c
221.3Sphx
231.3Sphx   From src/sys/arch/m68k/include: aout_machdep.h,elf_machdep.h
241.3Sphx
251.3Sphx      place these files in: <loadbsd directory>/include/m68k
261.3Sphx
271.3Sphx   From src/sys/arch/amiga/include: aout_machdep.h,elf_machdep.h,loadfile_machdep.h
281.3Sphx
291.3Sphx      place these files in: <loadbsd directory>/include/machine
301.3Sphx
311.3Sphx   From src/sys/sys: exec.h,exec_elf.h,exec_aout.h,reboot.h
321.3Sphx
331.3Sphx      place these files in: <loadbsd directory>/include/sys
341.3Sphx
351.3Sphx   Additional headers (see below): inttypes.h,namespace.h,lib/libsa/stand.h,lib/libkern/libkern.h
361.3Sphx
371.3Sphx      place these files in: <loadbsd directory>/include
381.3Sphx
391.3SphxIf all the mentioned files are placed at the correct place, loadfile_machdep.h
401.4Sandvarmust be modified. The patch is included below. Another small patch to
411.3Sphxloadfile_aout.c must be applied to fix an incompatibility for LoadBSD.
421.3SphxHowever, that patch breaks loadfile() for other architectures using a.out!
431.3SphxNote: This patch is required to be able to suppress loaded symbols when
441.3Sphx      booting ancient a.out kernels that don't support them. Without the
451.3Sphx      patch symbol suppressing doesn't work! That also means ELF isn't
461.3Sphx      affected and LoadBSD could handle it differently but then it could
471.3Sphx      probably break in other unpredictable ways...
481.3Sphx
491.3SphxThen it should be possible to recompile LoadBSD by typing "make". If make
501.3Sphxfails, fix the problem and try again :-P
511.3Sphx
521.3SphxGood luck!
531.3Sphx
541.3Sphx--- Missing files/patches ---
551.3Sphx
561.3Sphx      loadfile_aout.c modification:
571.3Sphx--cut--
581.3Sphx--- loadfile_aout.c~	Mon Feb 11 21:25:56 2002
591.3Sphx+++ loadfile_aout.c	Thu Jan 23 10:43:27 2003
601.3Sphx@@ -217,8 +217,8 @@ loadfile_aout(fd, x, marks, flags)
611.3Sphx 		BCOPY(&x->a_syms, maxp, sizeof(x->a_syms));
621.3Sphx 
631.3Sphx 	if (flags & (LOAD_SYM|COUNT_SYM)) {
641.3Sphx-		maxp += sizeof(x->a_syms);
651.3Sphx 		aoutp = maxp;
661.3Sphx+		maxp += sizeof(x->a_syms);
671.3Sphx 	}
681.3Sphx 
691.3Sphx 	if (x->a_syms > 0) {
701.3Sphx--cut--
711.3Sphx
721.3Sphx      loadfile_machdep.h modification:
731.3Sphx--cut--
741.3Sphx--- loadfile_machdep.h~	Wed Oct 31 18:20:45 2001
751.3Sphx+++ loadfile_machdep.h	Thu Jan 16 14:02:39 2003
761.3Sphx@@ -42,6 +42,21 @@
771.3Sphx #define	BOOT_AOUT
781.3Sphx #define	BOOT_ELF32
791.3Sphx 
801.3Sphx+#if 1
811.3Sphx+
821.3Sphx+#define LOADADDR(a)		(((u_long)(a)) + offset)
831.3Sphx+#define ALIGNENTRY(a)		0
841.3Sphx+#define READ(f, b, c)		read((f), (void *)LOADADDR(b), (c))
851.3Sphx+#define BCOPY(s, d, c)		memcpy((void *)LOADADDR(d), (void *)(s), (c))
861.3Sphx+#define BZERO(d, c)		memset((void *)LOADADDR(d), 0, (c))
871.3Sphx+#define WARN(a)			warn a
881.3Sphx+#define PROGRESS(a)		/* nothing */
891.3Sphx+#define ALLOC(a)		malloc(a)
901.3Sphx+#define FREE(a, b)		free(a)
911.3Sphx+#define OKMAGIC(a)		((a) == NMAGIC)
921.3Sphx+
931.3Sphx+#else /* ! true, false */
941.3Sphx+
951.3Sphx #define	LOAD_KERNEL		LOAD_ALL
961.3Sphx #define	COUNT_KERNEL		COUNT_ALL
971.3Sphx 
981.3Sphx@@ -83,4 +98,7 @@ void vcopy __P((u_long, u_long, u_long *
991.3Sphx void vzero __P((u_long, u_long *, size_t));
1001.3Sphx 
1011.3Sphx #endif
1021.3Sphx+
1031.3Sphx+#endif /* ! false */
1041.3Sphx+
1051.3Sphx #endif /* ! _AMIGA_LOADFILE_MACHDEP_H_ */
1061.3Sphx--cut--
1071.3Sphx
1081.3Sphx      Makefile:
1091.3Sphx--cut--
1101.3SphxTARGET	= loadbsd
1111.3Sphx
1121.3SphxCC	= gcc -m68020 -Wa,-m68030 -fbaserel
1131.3SphxCFLAGS	= -D_STANDALONE -I./include -O -fomit-frame-pointer -msmall-code
1141.3SphxLDFLAGS	= -noixemul
1151.3SphxLDLIBS	=
1161.3Sphx
1171.3SphxOBJS	= loadbsd.o loadfile.o loadfile_aout.o loadfile_elf32.o getopt.o
1181.3Sphx
1191.3Sphx$(TARGET): $(OBJS)
1201.3Sphx	$(CC) $(LDFLAGS) -o $@ $(OBJS) $(LDLIBS)
1211.3Sphx--cut--
1221.3Sphx
1231.3Sphx      include/inttypes.h:
1241.3Sphx--cut--
1251.3Sphx#ifndef _INTTYPES_H
1261.3Sphx#define _INTTYPES_H
1271.3Sphx
1281.3Sphx#include <sys/types.h>
1291.3Sphx
1301.3Sphxtypedef	unsigned char      uint8_t;
1311.3Sphxtypedef	unsigned short     uint16_t;
1321.3Sphxtypedef	unsigned int       uint32_t;
1331.3Sphxtypedef	unsigned long long uint64_t;
1341.3Sphx/*
1351.3Sphxtypedef	         int       int32_t;
1361.3Sphxtypedef	         long long int64_t;
1371.3Sphx*/
1381.3Sphxtypedef unsigned long vaddr_t;
1391.3Sphxtypedef unsigned long paddr_t;
1401.3Sphx
1411.3Sphx#endif /* !_INTTYPES_H */
1421.3Sphx--cut--
1431.3Sphx
1441.3Sphx    include/namespace.h
1451.3Sphx--cut--
1461.3Sphx#define _DIAGASSERT(x) /**/
1471.3Sphx
1481.3Sphxextern char *program_name;
1491.3Sphx#define getprogname() program_name
1501.3Sphx--cut--
1511.3Sphx
1521.3Sphx      include/lib/libsa/stand.h
1531.3Sphx--cut--
1541.3Sphx#include <stdio.h>
1551.3Sphx#include <string.h>
1561.3Sphx#include <errno.h>
1571.3Sphx#include <stdlib.h>
1581.3Sphx#include <unistd.h>
1591.3Sphx#include <fcntl.h>
1601.3Sphx#include <err.h>
1611.3Sphx#include "inttypes.h"
1621.3Sphx--cut--
1631.3Sphx
1641.3Sphx      include/lib/libkern/libkern.h
1651.3Sphx--cut--
1661.3Sphx/* nothing, must only exist! */
1671.3Sphx--cut--
168