Macro solana_sdk::custom_panic_default
source · 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 Safecoin
The mechanism for defining a Safecoin 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 Safecoin defines the default panic handler.