25 |
#include "laden.h" |
#include "laden.h" |
26 |
|
|
27 |
|
|
28 |
|
/* The program name. */ |
29 |
|
char *program_name = "laden"; |
30 |
|
|
31 |
rootserver_t kernel; |
rootserver_t kernel; |
32 |
rootserver_t sigma0; |
rootserver_t sigma0; |
33 |
rootserver_t sigma1; |
rootserver_t sigma1; |
36 |
/* The boot info to be inserted into the L4 KIP. */ |
/* The boot info to be inserted into the L4 KIP. */ |
37 |
l4_word_t boot_info; |
l4_word_t boot_info; |
38 |
|
|
39 |
|
|
40 |
struct l4_memory_desc memory_map[MEMORY_MAP_MAX]; |
struct l4_memory_desc memory_map[MEMORY_MAP_MAX]; |
|
int memory_map_size; |
|
41 |
|
|
42 |
|
l4_word_t memory_map_size; |
43 |
/* True if debug mode is enabled. */ |
|
44 |
int debug; |
|
45 |
|
/* Return the number of memory descriptors. */ |
46 |
|
l4_word_t |
47 |
|
loader_get_num_memory_desc (void) |
48 |
|
{ |
49 |
|
return memory_map_size; |
50 |
|
} |
51 |
|
|
52 |
|
|
53 |
|
/* Return the NRth memory descriptor. The first memory descriptor is |
54 |
|
indexed by 0. */ |
55 |
|
l4_memory_desc_t |
56 |
|
loader_get_memory_desc (l4_word_t nr) |
57 |
|
{ |
58 |
|
return &memory_map[nr]; |
59 |
|
} |
60 |
|
|
61 |
|
|
62 |
|
/* Load the ELF images of the kernel and the initial servers into |
63 |
|
memory, checking for overlaps. Update the start and end |
64 |
|
information with the information from the ELF program, and fill in |
65 |
|
the entry points. */ |
66 |
|
static void |
67 |
|
load_components (void) |
68 |
|
{ |
69 |
|
if (!kernel.low) |
70 |
|
panic ("No L4 kernel found"); |
71 |
|
loader_add_region ("kernel-mod", kernel.low, kernel.high); |
72 |
|
|
73 |
|
if (!sigma0.low) |
74 |
|
panic ("No sigma0 server found"); |
75 |
|
loader_add_region ("sigma0-mod", sigma0.low, sigma0.high); |
76 |
|
|
77 |
|
if (sigma1.low) |
78 |
|
loader_add_region ("sigma1-mod", sigma1.low, sigma1.high); |
79 |
|
|
80 |
|
if (!rootserver.low) |
81 |
|
panic ("No rootserver server found"); |
82 |
|
loader_add_region ("rootserver-mod", rootserver.low, rootserver.high); |
83 |
|
|
84 |
|
loader_elf_load ("kernel", kernel.low, kernel.high, |
85 |
|
&kernel.low, &kernel.high, &kernel.ip); |
86 |
|
loader_remove_region ("kernel-mod"); |
87 |
|
|
88 |
|
loader_elf_load ("sigma0", sigma0.low, sigma0.high, |
89 |
|
&sigma0.low, &sigma0.high, &sigma0.ip); |
90 |
|
loader_remove_region ("sigma0-mod"); |
91 |
|
|
92 |
|
if (sigma1.low) |
93 |
|
{ |
94 |
|
loader_elf_load ("sigma1", sigma1.low, sigma1.high, |
95 |
|
&sigma1.low, &sigma1.high, &sigma1.ip); |
96 |
|
loader_remove_region ("sigma1-mod"); |
97 |
|
} |
98 |
|
|
99 |
|
loader_elf_load ("rootserver", rootserver.low, rootserver.high, |
100 |
|
&rootserver.low, &rootserver.high, &rootserver.ip); |
101 |
|
loader_remove_region ("rootserver-mod"); |
102 |
|
} |
103 |
|
|
104 |
|
|
105 |
static void |
static void |
113 |
{ |
{ |
114 |
i++; |
i++; |
115 |
printf ("Usage %s [OPTION...]\n", argv[0]); |
printf ("Usage %s [OPTION...]\n", argv[0]); |
116 |
printf ("Try `" PROGRAM_NAME " --help' for more information\n"); |
printf ("Try `%s --help' for more information\n", program_name); |
117 |
shutdown (); |
shutdown (); |
118 |
} |
} |
119 |
else if (!strcmp (argv[i], "--help")) |
else if (!strcmp (argv[i], "--help")) |
156 |
else if (!strcmp (argv[i], "--version")) |
else if (!strcmp (argv[i], "--version")) |
157 |
{ |
{ |
158 |
i++; |
i++; |
159 |
printf (PROGRAM_NAME " " PACKAGE_VERSION "\n"); |
printf ("%s " PACKAGE_VERSION "\n", program_name); |
160 |
shutdown (); |
shutdown (); |
161 |
} |
} |
162 |
else if (!strcmp (argv[i], "-o") || !strcmp (argv[i], "--output")) |
else if (!strcmp (argv[i], "-o") || !strcmp (argv[i], "--output")) |
179 |
else if (!strcmp (argv[i], "-D") || !strcmp (argv[i], "--debug")) |
else if (!strcmp (argv[i], "-D") || !strcmp (argv[i], "--debug")) |
180 |
{ |
{ |
181 |
i++; |
i++; |
182 |
debug = 1; |
output_debug = 1; |
183 |
} |
} |
184 |
else if (argv[i][0] == '-') |
else if (argv[i][0] == '-') |
185 |
panic ("Unsupported option %s", argv[i]); |
panic ("Unsupported option %s", argv[i]); |
194 |
{ |
{ |
195 |
parse_args (argc, argv); |
parse_args (argc, argv); |
196 |
|
|
197 |
debug (PROGRAM_NAME " " PACKAGE_VERSION "\n"); |
debug ("%s " PACKAGE_VERSION "\n", program_name); |
198 |
|
|
199 |
find_components (); |
find_components (); |
200 |
|
|