docs
This commit is contained in:
parent
c4b7417754
commit
6bb119764b
@ -474,6 +474,19 @@ Miri provides some `extern` functions that programs can import to access
|
|||||||
Miri-specific functionality. They are declared in
|
Miri-specific functionality. They are declared in
|
||||||
[/tests/utils/miri\_extern.rs](/tests/utils/miri_extern.rs).
|
[/tests/utils/miri\_extern.rs](/tests/utils/miri_extern.rs).
|
||||||
|
|
||||||
|
## Entry point for no-std binaries
|
||||||
|
|
||||||
|
Binaries that do not use the standard library are expected to declare a function like this so that
|
||||||
|
Miri knows where it is supposed to start execution:
|
||||||
|
|
||||||
|
```rust
|
||||||
|
#[cfg(miri)]
|
||||||
|
#[no_mangle]
|
||||||
|
fn miri_start(argc: isize, argv: *const *const u8) -> isize {
|
||||||
|
// Call the actual start function that your project implements, based on your target's conventions.
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
## Contributing and getting help
|
## Contributing and getting help
|
||||||
|
|
||||||
If you want to contribute to Miri, great! Please check out our
|
If you want to contribute to Miri, great! Please check out our
|
||||||
|
@ -358,7 +358,7 @@ fn entry_fn(tcx: TyCtxt<'_>) -> (DefId, EntryFnType) {
|
|||||||
if let Some(entry_def) = tcx.entry_fn(()) {
|
if let Some(entry_def) = tcx.entry_fn(()) {
|
||||||
return entry_def;
|
return entry_def;
|
||||||
}
|
}
|
||||||
// Look for a symbol in the local crate named `miri_start`, and threat that as the entry point.
|
// Look for a symbol in the local crate named `miri_start`, and treat that as the entry point.
|
||||||
let sym = tcx.exported_symbols(LOCAL_CRATE).iter().find_map(|(sym, _)| {
|
let sym = tcx.exported_symbols(LOCAL_CRATE).iter().find_map(|(sym, _)| {
|
||||||
if sym.symbol_name_for_local_instance(tcx).name == "miri_start" { Some(sym) } else { None }
|
if sym.symbol_name_for_local_instance(tcx).name == "miri_start" { Some(sym) } else { None }
|
||||||
});
|
});
|
||||||
@ -391,14 +391,16 @@ fn entry_fn(tcx: TyCtxt<'_>) -> (DefId, EntryFnType) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
tcx.dcx().fatal("Miri can only run programs that have a main function.\n\
|
tcx.dcx().fatal(
|
||||||
Alternatively, you can export a `miri_start` function:\n\
|
"Miri can only run programs that have a main function.\n\
|
||||||
\n\
|
Alternatively, you can export a `miri_start` function:\n\
|
||||||
#[cfg(miri)]\n\
|
\n\
|
||||||
#[no_mangle]\n\
|
#[cfg(miri)]\n\
|
||||||
fn miri_start(argc: isize, argv: *const *const u8) -> isize {\
|
#[no_mangle]\n\
|
||||||
\n // Call the actual start function that your project implements, based on your target's conventions.\n\
|
fn miri_start(argc: isize, argv: *const *const u8) -> isize {\
|
||||||
}");
|
\n // Call the actual start function that your project implements, based on your target's conventions.\n\
|
||||||
|
}"
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user