Initial forward-edge CFI implementation (#3693)
* Initial forward-edge CFI implementation Give the user the option to start all basic blocks that are targets of indirect branches with the BTI instruction introduced by the Branch Target Identification extension to the Arm instruction set architecture. Copyright (c) 2022, Arm Limited. * Refactor `from_artifacts` to avoid second `make_executable` (#1) This involves "parsing" twice but this is parsing just the header of an ELF file so it's not a very intensive operation and should be ok to do twice. * Address the code review feedback Copyright (c) 2022, Arm Limited. Co-authored-by: Alex Crichton <alex@alexcrichton.com>
This commit is contained in:
@@ -286,7 +286,12 @@ impl StackAMode {
|
||||
}
|
||||
|
||||
/// Trait implemented by machine-specific backend to represent ISA flags.
|
||||
pub trait IsaFlags: Clone {}
|
||||
pub trait IsaFlags: Clone {
|
||||
/// Get a flag indicating whether forward-edge CFI is enabled.
|
||||
fn is_forward_edge_cfi_enabled(&self) -> bool {
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
/// Trait implemented by machine-specific backend to provide information about
|
||||
/// register assignments and to allow generating the specific instructions for
|
||||
@@ -1256,6 +1261,10 @@ impl<M: ABIMachineSpec> Callee<M> {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn is_forward_edge_cfi_enabled(&self) -> bool {
|
||||
self.isa_flags.is_forward_edge_cfi_enabled()
|
||||
}
|
||||
|
||||
/// Get the calling convention implemented by this ABI object.
|
||||
pub fn call_conv(&self, sigs: &SigSet) -> isa::CallConv {
|
||||
sigs[self.sig].call_conv
|
||||
|
||||
Reference in New Issue
Block a user