README revision 1.4 1 # $NetBSD: README,v 1.4 2022/04/04 19:33:45 andvar Exp $
2
3 BUILD INSTRUCTIONS
4
5 Building LoadBSD isn't easy since several sources from the NetBSD repository
6 are required. Compiling these sources under AmigaOS without clashes with the
7 native GCC headers requires some knowledge. This document tries to describe
8 the steps necessary to rebuild LoadBSD with an AmigaOS gcc. These instructions
9 do only apply for LoadBSD versions using the loadfile() interface. Previous
10 version do only require getopt.c and reboot.h.
11
12 Note: Its not possible to build LoadBSD with the native NetBSD compiler!
13 LoadBSD is an *AmigaOS* program and must be built with an AmigaOS
14 compiler. Of course, a properly setup cross-compiler does work.
15
16 Required sources from NetBSD (either HEAD or from a release branch)
17
18 From src/sys/lib/libsa: loadfile.h,loadfile.c,loadfile_elf32.c,loadfile_aout.c
19 From src/lib/libc/stdlib: getopt.c
20
21 place these files in the directory where you have loadbsd.c
22
23 From src/sys/arch/m68k/include: aout_machdep.h,elf_machdep.h
24
25 place these files in: <loadbsd directory>/include/m68k
26
27 From src/sys/arch/amiga/include: aout_machdep.h,elf_machdep.h,loadfile_machdep.h
28
29 place these files in: <loadbsd directory>/include/machine
30
31 From src/sys/sys: exec.h,exec_elf.h,exec_aout.h,reboot.h
32
33 place these files in: <loadbsd directory>/include/sys
34
35 Additional headers (see below): inttypes.h,namespace.h,lib/libsa/stand.h,lib/libkern/libkern.h
36
37 place these files in: <loadbsd directory>/include
38
39 If all the mentioned files are placed at the correct place, loadfile_machdep.h
40 must be modified. The patch is included below. Another small patch to
41 loadfile_aout.c must be applied to fix an incompatibility for LoadBSD.
42 However, that patch breaks loadfile() for other architectures using a.out!
43 Note: This patch is required to be able to suppress loaded symbols when
44 booting ancient a.out kernels that don't support them. Without the
45 patch symbol suppressing doesn't work! That also means ELF isn't
46 affected and LoadBSD could handle it differently but then it could
47 probably break in other unpredictable ways...
48
49 Then it should be possible to recompile LoadBSD by typing "make". If make
50 fails, fix the problem and try again :-P
51
52 Good luck!
53
54 --- Missing files/patches ---
55
56 loadfile_aout.c modification:
57 --cut--
58 --- loadfile_aout.c~ Mon Feb 11 21:25:56 2002
59 +++ loadfile_aout.c Thu Jan 23 10:43:27 2003
60 @@ -217,8 +217,8 @@ loadfile_aout(fd, x, marks, flags)
61 BCOPY(&x->a_syms, maxp, sizeof(x->a_syms));
62
63 if (flags & (LOAD_SYM|COUNT_SYM)) {
64 - maxp += sizeof(x->a_syms);
65 aoutp = maxp;
66 + maxp += sizeof(x->a_syms);
67 }
68
69 if (x->a_syms > 0) {
70 --cut--
71
72 loadfile_machdep.h modification:
73 --cut--
74 --- loadfile_machdep.h~ Wed Oct 31 18:20:45 2001
75 +++ loadfile_machdep.h Thu Jan 16 14:02:39 2003
76 @@ -42,6 +42,21 @@
77 #define BOOT_AOUT
78 #define BOOT_ELF32
79
80 +#if 1
81 +
82 +#define LOADADDR(a) (((u_long)(a)) + offset)
83 +#define ALIGNENTRY(a) 0
84 +#define READ(f, b, c) read((f), (void *)LOADADDR(b), (c))
85 +#define BCOPY(s, d, c) memcpy((void *)LOADADDR(d), (void *)(s), (c))
86 +#define BZERO(d, c) memset((void *)LOADADDR(d), 0, (c))
87 +#define WARN(a) warn a
88 +#define PROGRESS(a) /* nothing */
89 +#define ALLOC(a) malloc(a)
90 +#define FREE(a, b) free(a)
91 +#define OKMAGIC(a) ((a) == NMAGIC)
92 +
93 +#else /* ! true, false */
94 +
95 #define LOAD_KERNEL LOAD_ALL
96 #define COUNT_KERNEL COUNT_ALL
97
98 @@ -83,4 +98,7 @@ void vcopy __P((u_long, u_long, u_long *
99 void vzero __P((u_long, u_long *, size_t));
100
101 #endif
102 +
103 +#endif /* ! false */
104 +
105 #endif /* ! _AMIGA_LOADFILE_MACHDEP_H_ */
106 --cut--
107
108 Makefile:
109 --cut--
110 TARGET = loadbsd
111
112 CC = gcc -m68020 -Wa,-m68030 -fbaserel
113 CFLAGS = -D_STANDALONE -I./include -O -fomit-frame-pointer -msmall-code
114 LDFLAGS = -noixemul
115 LDLIBS =
116
117 OBJS = loadbsd.o loadfile.o loadfile_aout.o loadfile_elf32.o getopt.o
118
119 $(TARGET): $(OBJS)
120 $(CC) $(LDFLAGS) -o $@ $(OBJS) $(LDLIBS)
121 --cut--
122
123 include/inttypes.h:
124 --cut--
125 #ifndef _INTTYPES_H
126 #define _INTTYPES_H
127
128 #include <sys/types.h>
129
130 typedef unsigned char uint8_t;
131 typedef unsigned short uint16_t;
132 typedef unsigned int uint32_t;
133 typedef unsigned long long uint64_t;
134 /*
135 typedef int int32_t;
136 typedef long long int64_t;
137 */
138 typedef unsigned long vaddr_t;
139 typedef unsigned long paddr_t;
140
141 #endif /* !_INTTYPES_H */
142 --cut--
143
144 include/namespace.h
145 --cut--
146 #define _DIAGASSERT(x) /**/
147
148 extern char *program_name;
149 #define getprogname() program_name
150 --cut--
151
152 include/lib/libsa/stand.h
153 --cut--
154 #include <stdio.h>
155 #include <string.h>
156 #include <errno.h>
157 #include <stdlib.h>
158 #include <unistd.h>
159 #include <fcntl.h>
160 #include <err.h>
161 #include "inttypes.h"
162 --cut--
163
164 include/lib/libkern/libkern.h
165 --cut--
166 /* nothing, must only exist! */
167 --cut--
168