macro_rules! custom_panic_default {
() => { ... };
}
Expand description
Define the default global panic handler.
This must be used if the entrypoint
macro is not used, and no other
panic handler has been defined; otherwise compilation will fail with a
missing custom_panic
symbol.
The default global allocator is enabled only if the calling crate has not disabled it using Cargo features as described below. It is only defined for BPF targets.
§Cargo features
A crate that calls this macro can provide its own custom panic handler, or
allow others to provide their own custom panic handler, by adding a
custom-panic
feature to its Cargo.toml
. After enabling the feature, one
may define their own panic handler.
A good way to reduce the final size of the program is to provide a
custom_panic
implementation that does nothing. Doing so will cut ~25kb
from a noop program. That number goes down the more the programs pulls in
Rust’s standard library for other purposes.
§Defining a panic handler for Solana
The mechanism for defining a Solana panic handler is different from most Rust programs.
To define a panic handler one must define a custom_panic
function
with the #[no_mangle]
attribute, as below:
#[cfg(all(feature = "custom-panic", target_os = "solana"))]
#[no_mangle]
fn custom_panic(info: &core::panic::PanicInfo<'_>) {
$crate::msg!("{}", info);
}
The above is how Solana defines the default panic handler.