| use rustc_abi::Endian; | |
| use crate::spec::{LinkerFlavor, MergeFunctions, PanicStrategy, TargetOptions}; | |
| pub(crate) fn opts(endian: Endian) -> TargetOptions { | |
| TargetOptions { | |
| allow_asm: true, | |
| endian, | |
| linker_flavor: LinkerFlavor::Bpf, | |
| atomic_cas: false, | |
| dynamic_linking: true, | |
| no_builtins: true, | |
| panic_strategy: PanicStrategy::Abort, | |
| position_independent_executables: true, | |
| // Disable MergeFunctions since: | |
| // - older kernels don't support bpf-to-bpf calls | |
| // - on newer kernels, userspace still needs to relocate before calling | |
| // BPF_PROG_LOAD and not all BPF libraries do that yet | |
| merge_functions: MergeFunctions::Disabled, | |
| obj_is_bitcode: true, | |
| singlethread: true, | |
| // When targeting the `v3` cpu in llvm, 32-bit atomics are also supported. | |
| // But making this value change based on the target cpu can be mostly confusing | |
| // and would require a bit of a refactor. | |
| min_atomic_width: Some(64), | |
| max_atomic_width: Some(64), | |
| ..Default::default() | |
| } | |
| } |