MCPcopy Create free account
hub / github.com/LPC4/Full-Stack / run_kernel_hll

Function run_kernel_hll

crates/os-runtime/tests/boot.rs:179–219  ·  view source on GitHub ↗
(user_src: &str)

Source from the content-addressed store, hash-verified

177 let mut rv = CompilerRv64::new();
178 let (_, tokens) = rv.compile_with_tokens(&out.ir);
179 let obj = Assembler::assemble(&tokens)
180 .unwrap_or_else(|e| panic!("stdlib `{name}` assemble failed: {e}"));
181 ((*name).to_owned(), obj)
182 })
183 .collect()
184 })
185}
186
187fn run_kernel_hll(user_src: &str) -> (String, Option<i64>) {
188 let stdlib_objs = compiled_stdlib();
189 let (source_prelude, module_aliases) = direct_imports(user_src);
190
191 let user_compiler = HllCompiler::new(CompileConfig {
192 target: TargetMode::Kernel,
193 strict: true,
194 string_prefix: None,
195 type_prelude: Vec::new(),
196 source_prelude: Some(source_prelude),
197 module_aliases,
198 module_mangle_prefix: None,
199 source_file: Some("user.hll".to_owned()),
200 });
201 let user_out = user_compiler
202 .compile(user_src)
203 .unwrap_or_else(|diags| panic!("user compile failed: {diags:?}"));
204 let mut user_rv = CompilerRv64::new();
205 let (_, user_tokens) = user_rv.compile_with_tokens(&user_out.ir);
206
207 let mut user_obj =
208 Assembler::assemble(&user_tokens).unwrap_or_else(|e| panic!("user assemble failed: {e}"));
209 for export in kernel_snippet_abi_exports() {
210 user_obj.mark_entry_global(&export);
211 }
212 let mut modules: Vec<(&str, &AssembledOutput)> =
213 stdlib_objs.iter().map(|(n, o)| (n.as_str(), o)).collect();
214 modules.push(("user", &user_obj));
215 let mut assembled = ObjectLinker::link(&modules).unwrap_or_else(|e| panic!("link failed: {e}"));
216 let layout = LinkLayout::freestanding_kernel();
217 if layout.emit_layout_symbols {
218 assembled.inject_layout_symbols(&layout);
219 }
220
221 let mut vm = VirtualMachine::new_kernel(&assembled);
222 let run = vm.run(10_000_000);

Calls 11

compiled_stdlibFunction · 0.85
direct_importsFunction · 0.85
linkFunction · 0.85
compile_with_tokensMethod · 0.80
mark_entry_globalMethod · 0.80
collectMethod · 0.80
pushMethod · 0.80
inject_layout_symbolsMethod · 0.80
compileMethod · 0.45
runMethod · 0.45

Tested by

no test coverage detected