README revision 1.6 1 1.6 phx # $NetBSD: README,v 1.6 2023/05/14 16:13:05 phx Exp $
2 1.2 perry
3 1.3 phx BUILD INSTRUCTIONS
4 1.1 is
5 1.3 phx Building LoadBSD isn't easy since several sources from the NetBSD repository
6 1.3 phx are required. Compiling these sources under AmigaOS without clashes with the
7 1.3 phx native GCC headers requires some knowledge. This document tries to describe
8 1.6 phx the steps necessary to rebuild LoadBSD with a modern AmigaOS gcc, or vbcc
9 1.6 phx with PosixLib.
10 1.6 phx These instructions do only apply for LoadBSD versions using the loadfile()
11 1.6 phx interface. Previous version do only require getopt.c and reboot.h.
12 1.3 phx
13 1.5 phx Note: It is not possible to build LoadBSD with the native NetBSD compiler!
14 1.3 phx LoadBSD is an *AmigaOS* program and must be built with an AmigaOS
15 1.3 phx compiler. Of course, a properly setup cross-compiler does work.
16 1.3 phx
17 1.3 phx Required sources from NetBSD (either HEAD or from a release branch)
18 1.3 phx
19 1.3 phx From src/sys/lib/libsa: loadfile.h,loadfile.c,loadfile_elf32.c,loadfile_aout.c
20 1.3 phx
21 1.3 phx place these files in the directory where you have loadbsd.c
22 1.3 phx
23 1.3 phx From src/sys/arch/m68k/include: aout_machdep.h,elf_machdep.h
24 1.3 phx
25 1.3 phx place these files in: <loadbsd directory>/include/m68k
26 1.3 phx
27 1.3 phx From src/sys/arch/amiga/include: aout_machdep.h,elf_machdep.h,loadfile_machdep.h
28 1.3 phx
29 1.3 phx place these files in: <loadbsd directory>/include/machine
30 1.3 phx
31 1.6 phx From src/sys/sys: exec.h,exec_elf.h,exec_aout.h,aout_mids.h,reboot.h
32 1.3 phx
33 1.3 phx place these files in: <loadbsd directory>/include/sys
34 1.3 phx
35 1.3 phx Additional headers (see below): inttypes.h,namespace.h,lib/libsa/stand.h,lib/libkern/libkern.h
36 1.3 phx
37 1.3 phx place these files in: <loadbsd directory>/include
38 1.3 phx
39 1.3 phx If all the mentioned files are placed at the correct place, loadfile_machdep.h
40 1.4 andvar must be modified. The patch is included below. Another small patch to
41 1.3 phx loadfile_aout.c must be applied to fix an incompatibility for LoadBSD.
42 1.3 phx However, that patch breaks loadfile() for other architectures using a.out!
43 1.3 phx Note: This patch is required to be able to suppress loaded symbols when
44 1.3 phx booting ancient a.out kernels that don't support them. Without the
45 1.3 phx patch symbol suppressing doesn't work! That also means ELF isn't
46 1.3 phx affected and LoadBSD could handle it differently but then it could
47 1.3 phx probably break in other unpredictable ways...
48 1.3 phx
49 1.6 phx The headers inttypes.h, namespace.h, include/lib/libsa/stand.h and
50 1.6 phx lib/libkern/libkern.h are listed completely below.
51 1.6 phx
52 1.6 phx Then it should be possible to recompile LoadBSD with gcc6 or newer by
53 1.6 phx typing "make" (or "make -f vmakefile" with vbcc). If make fails, fix the
54 1.6 phx problem and try again :-P
55 1.3 phx
56 1.3 phx Good luck!
57 1.3 phx
58 1.3 phx --- Missing files/patches ---
59 1.3 phx
60 1.6 phx include/machine/loadfile_machdep.h modification:
61 1.6 phx --cut--
62 1.6 phx --- include/machine/loadfile_machdep.h~ Sun Mar 26 15:46:55 2023
63 1.6 phx +++ include/machine/loadfile_machdep.h Sun Mar 26 15:47:17 2023
64 1.6 phx @@ -38,7 +38,7 @@
65 1.6 phx #define LOAD_KERNEL LOAD_ALL
66 1.6 phx #define COUNT_KERNEL COUNT_ALL
67 1.6 phx
68 1.6 phx -#ifdef _STANDALONE
69 1.6 phx +#if 0
70 1.6 phx
71 1.6 phx #define LOADADDR(a) ((a) + offset)
72 1.6 phx #define ALIGNENTRY(a) 0
73 1.6 phx --cut--
74 1.6 phx
75 1.3 phx loadfile_aout.c modification:
76 1.3 phx --cut--
77 1.3 phx --- loadfile_aout.c~ Mon Feb 11 21:25:56 2002
78 1.3 phx +++ loadfile_aout.c Thu Jan 23 10:43:27 2003
79 1.3 phx @@ -217,8 +217,8 @@ loadfile_aout(fd, x, marks, flags)
80 1.3 phx BCOPY(&x->a_syms, maxp, sizeof(x->a_syms));
81 1.3 phx
82 1.3 phx if (flags & (LOAD_SYM|COUNT_SYM)) {
83 1.3 phx - maxp += sizeof(x->a_syms);
84 1.3 phx aoutp = maxp;
85 1.3 phx + maxp += sizeof(x->a_syms);
86 1.3 phx }
87 1.3 phx
88 1.3 phx if (x->a_syms > 0) {
89 1.3 phx --cut--
90 1.3 phx
91 1.3 phx include/inttypes.h:
92 1.3 phx --cut--
93 1.3 phx #ifndef _INTTYPES_H
94 1.3 phx #define _INTTYPES_H
95 1.3 phx
96 1.3 phx #include <sys/types.h>
97 1.6 phx #include <sys/cdefs.h>
98 1.6 phx
99 1.6 phx #ifndef be32toh
100 1.6 phx #define be32toh(x) (x)
101 1.6 phx #endif
102 1.6 phx
103 1.6 phx #ifndef roundup
104 1.6 phx #define roundup(x,y) ((((x)+((y)-1))/(y))*(y))
105 1.6 phx #endif
106 1.3 phx
107 1.3 phx typedef unsigned long vaddr_t;
108 1.3 phx typedef unsigned long paddr_t;
109 1.3 phx
110 1.3 phx #endif /* !_INTTYPES_H */
111 1.3 phx --cut--
112 1.3 phx
113 1.3 phx include/namespace.h
114 1.3 phx --cut--
115 1.3 phx #define _DIAGASSERT(x) /**/
116 1.3 phx
117 1.3 phx extern char *program_name;
118 1.3 phx #define getprogname() program_name
119 1.6 phx
120 1.6 phx #ifndef __UNCONST
121 1.6 phx #define __UNCONST(a) ((void *)(unsigned long)(const void *)(a))
122 1.6 phx #endif
123 1.3 phx --cut--
124 1.3 phx
125 1.3 phx include/lib/libsa/stand.h
126 1.3 phx --cut--
127 1.3 phx #include <stdio.h>
128 1.3 phx #include <string.h>
129 1.3 phx #include <errno.h>
130 1.3 phx #include <stdlib.h>
131 1.3 phx #include <unistd.h>
132 1.3 phx #include <fcntl.h>
133 1.3 phx #include "inttypes.h"
134 1.3 phx --cut--
135 1.3 phx
136 1.3 phx include/lib/libkern/libkern.h
137 1.3 phx --cut--
138 1.3 phx /* nothing, must only exist! */
139 1.3 phx --cut--
140