Move from intervalltree to meminterval dep (#1456)
* Move from intervalltree to meminterval dep * fixes
This commit is contained in:
parent
862de53cf6
commit
9208531951
@ -144,7 +144,7 @@ postcard = { version = "1.0", features = ["alloc"], default-features = false } #
|
|||||||
bincode = {version = "1.3", optional = true }
|
bincode = {version = "1.3", optional = true }
|
||||||
c2rust-bitfields = { version = "0.17", features = ["no_std"] }
|
c2rust-bitfields = { version = "0.17", features = ["no_std"] }
|
||||||
ahash = { version = "0.8", default-features=false } # The hash function already used in hashbrown
|
ahash = { version = "0.8", default-features=false } # The hash function already used in hashbrown
|
||||||
intervaltree = { version = "0.2.7", default-features = false, features = ["serde"] }
|
meminterval = { version = "0.4", features = ["serde"] }
|
||||||
backtrace = {version = "0.3", optional = true} # Used to get the stacktrace in StacktraceObserver
|
backtrace = {version = "0.3", optional = true} # Used to get the stacktrace in StacktraceObserver
|
||||||
typed-builder = { version = "0.15.2", optional = true } # Implement the builder pattern at compiletime
|
typed-builder = { version = "0.15.2", optional = true } # Implement the builder pattern at compiletime
|
||||||
|
|
||||||
|
@ -13,11 +13,11 @@ use core::{
|
|||||||
};
|
};
|
||||||
|
|
||||||
use ahash::RandomState;
|
use ahash::RandomState;
|
||||||
use intervaltree::IntervalTree;
|
|
||||||
use libafl_bolts::{
|
use libafl_bolts::{
|
||||||
ownedref::{OwnedMutPtr, OwnedMutSlice},
|
ownedref::{OwnedMutPtr, OwnedMutSlice},
|
||||||
AsIter, AsIterMut, AsMutSlice, AsSlice, HasLen, Named, Truncate,
|
AsIter, AsIterMut, AsMutSlice, AsSlice, HasLen, Named, Truncate,
|
||||||
};
|
};
|
||||||
|
use meminterval::IntervalTree;
|
||||||
use num_traits::Bounded;
|
use num_traits::Bounded;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
@ -1739,17 +1739,17 @@ where
|
|||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn get(&self, idx: usize) -> &T {
|
fn get(&self, idx: usize) -> &T {
|
||||||
let elem = self.intervals.query_point(idx).next().unwrap();
|
let elem = self.intervals.query(idx..=idx).next().unwrap();
|
||||||
let i = elem.value;
|
let i = *elem.value;
|
||||||
let j = idx - elem.range.start;
|
let j = idx - elem.interval.start;
|
||||||
&self.maps[i].as_slice()[j]
|
&self.maps[i].as_slice()[j]
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn get_mut(&mut self, idx: usize) -> &mut T {
|
fn get_mut(&mut self, idx: usize) -> &mut T {
|
||||||
let elem = self.intervals.query_point(idx).next().unwrap();
|
let elem = self.intervals.query(idx..=idx).next().unwrap();
|
||||||
let i = elem.value;
|
let i = *elem.value;
|
||||||
let j = idx - elem.range.start;
|
let j = idx - elem.interval.start;
|
||||||
&mut self.maps[i].as_mut_slice()[j]
|
&mut self.maps[i].as_mut_slice()[j]
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1829,16 +1829,15 @@ where
|
|||||||
#[must_use]
|
#[must_use]
|
||||||
fn maybe_differential(name: &'static str, maps: Vec<OwnedMutSlice<'a, T>>) -> Self {
|
fn maybe_differential(name: &'static str, maps: Vec<OwnedMutSlice<'a, T>>) -> Self {
|
||||||
let mut idx = 0;
|
let mut idx = 0;
|
||||||
let mut builder = vec![];
|
let mut intervals = IntervalTree::new();
|
||||||
for (v, x) in maps.iter().enumerate() {
|
for (v, x) in maps.iter().enumerate() {
|
||||||
let l = x.as_slice().len();
|
let l = x.as_slice().len();
|
||||||
let r = (idx..(idx + l), v);
|
intervals.insert(idx..(idx + l), v);
|
||||||
idx += l;
|
idx += l;
|
||||||
builder.push(r);
|
|
||||||
}
|
}
|
||||||
Self {
|
Self {
|
||||||
maps,
|
maps,
|
||||||
intervals: builder.into_iter().collect::<IntervalTree<usize, usize>>(),
|
intervals,
|
||||||
len: idx,
|
len: idx,
|
||||||
name: name.to_string(),
|
name: name.to_string(),
|
||||||
initial: T::default(),
|
initial: T::default(),
|
||||||
@ -1873,21 +1872,20 @@ where
|
|||||||
pub fn owned(name: &'static str, maps: Vec<Vec<T>>) -> Self {
|
pub fn owned(name: &'static str, maps: Vec<Vec<T>>) -> Self {
|
||||||
let mut idx = 0;
|
let mut idx = 0;
|
||||||
let mut v = 0;
|
let mut v = 0;
|
||||||
let mut builder = vec![];
|
let mut intervals = IntervalTree::new();
|
||||||
let maps: Vec<_> = maps
|
let maps: Vec<_> = maps
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|x| {
|
.map(|x| {
|
||||||
let l = x.len();
|
let l = x.len();
|
||||||
let r = (idx..(idx + l), v);
|
intervals.insert(idx..(idx + l), v);
|
||||||
idx += l;
|
idx += l;
|
||||||
builder.push(r);
|
|
||||||
v += 1;
|
v += 1;
|
||||||
OwnedMutSlice::from(x)
|
OwnedMutSlice::from(x)
|
||||||
})
|
})
|
||||||
.collect();
|
.collect();
|
||||||
Self {
|
Self {
|
||||||
maps,
|
maps,
|
||||||
intervals: builder.into_iter().collect::<IntervalTree<usize, usize>>(),
|
intervals,
|
||||||
len: idx,
|
len: idx,
|
||||||
name: name.to_string(),
|
name: name.to_string(),
|
||||||
initial: T::default(),
|
initial: T::default(),
|
||||||
|
@ -56,7 +56,7 @@ libc = "0.2"
|
|||||||
strum = "0.25"
|
strum = "0.25"
|
||||||
strum_macros = "0.25"
|
strum_macros = "0.25"
|
||||||
syscall-numbers = "3.0"
|
syscall-numbers = "3.0"
|
||||||
meminterval = "0.3"
|
meminterval = "0.4"
|
||||||
thread_local = "1.1.4"
|
thread_local = "1.1.4"
|
||||||
capstone = "0.11.0"
|
capstone = "0.11.0"
|
||||||
pyo3 = { version = "0.18.3", optional = true }
|
pyo3 = { version = "0.18.3", optional = true }
|
||||||
|
@ -32,7 +32,7 @@ sancov_cmplog = []
|
|||||||
sancov_pcguard = ["sancov_pcguard_hitcounts"]
|
sancov_pcguard = ["sancov_pcguard_hitcounts"]
|
||||||
sanitizer_interfaces = []
|
sanitizer_interfaces = []
|
||||||
clippy = [] # Ignore compiler warnings during clippy
|
clippy = [] # Ignore compiler warnings during clippy
|
||||||
observers = ["intervaltree", "ahash"]
|
observers = ["meminterval", "ahash"]
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
bindgen = "0.64.0"
|
bindgen = "0.64.0"
|
||||||
@ -46,6 +46,6 @@ log = "0.4.20"
|
|||||||
|
|
||||||
rangemap = "1.3"
|
rangemap = "1.3"
|
||||||
serde = { version = "1.0", default-features = false, features = ["alloc"] } # serialization lib
|
serde = { version = "1.0", default-features = false, features = ["alloc"] } # serialization lib
|
||||||
intervaltree = { version = "0.2.7", default-features = false, features = ["serde"], optional = true }
|
meminterval = {version = "0.4", features = ["serde"], optional = true }
|
||||||
ahash = { version = "0.8.3", default-features = false, optional = true }
|
ahash = { version = "0.8.3", default-features = false, optional = true }
|
||||||
# serde-big-array = "0.3.2"
|
# serde-big-array = "0.3.2"
|
||||||
|
@ -70,7 +70,6 @@ mod observers {
|
|||||||
};
|
};
|
||||||
|
|
||||||
use ahash::RandomState;
|
use ahash::RandomState;
|
||||||
use intervaltree::IntervalTree;
|
|
||||||
use libafl::{
|
use libafl::{
|
||||||
inputs::UsesInput,
|
inputs::UsesInput,
|
||||||
observers::{DifferentialObserver, MapObserver, Observer, ObserversTuple},
|
observers::{DifferentialObserver, MapObserver, Observer, ObserversTuple},
|
||||||
@ -79,6 +78,7 @@ mod observers {
|
|||||||
use libafl_bolts::{
|
use libafl_bolts::{
|
||||||
ownedref::OwnedMutSlice, AsIter, AsIterMut, AsMutSlice, AsSlice, HasLen, Named,
|
ownedref::OwnedMutSlice, AsIter, AsIterMut, AsMutSlice, AsSlice, HasLen, Named,
|
||||||
};
|
};
|
||||||
|
use meminterval::IntervalTree;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use super::COUNTERS_MAPS;
|
use super::COUNTERS_MAPS;
|
||||||
@ -162,18 +162,18 @@ mod observers {
|
|||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn get(&self, idx: usize) -> &u8 {
|
fn get(&self, idx: usize) -> &u8 {
|
||||||
let elem = self.intervals.query_point(idx).next().unwrap();
|
let elem = self.intervals.query(idx..=idx).next().unwrap();
|
||||||
let i = elem.value;
|
let i = elem.value;
|
||||||
let j = idx - elem.range.start;
|
let j = idx - elem.interval.start;
|
||||||
unsafe { &COUNTERS_MAPS[i].as_slice()[j] }
|
unsafe { &COUNTERS_MAPS[*i].as_slice()[j] }
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn get_mut(&mut self, idx: usize) -> &mut u8 {
|
fn get_mut(&mut self, idx: usize) -> &mut u8 {
|
||||||
let elem = self.intervals.query_point(idx).next().unwrap();
|
let elem = self.intervals.query_mut(idx..=idx).next().unwrap();
|
||||||
let i = elem.value;
|
let i = elem.value;
|
||||||
let j = idx - elem.range.start;
|
let j = idx - elem.interval.start;
|
||||||
unsafe { &mut COUNTERS_MAPS[i].as_mut_slice()[j] }
|
unsafe { &mut COUNTERS_MAPS[*i].as_mut_slice()[j] }
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
@ -249,15 +249,14 @@ mod observers {
|
|||||||
#[must_use]
|
#[must_use]
|
||||||
fn maybe_differential(name: &'static str) -> Self {
|
fn maybe_differential(name: &'static str) -> Self {
|
||||||
let mut idx = 0;
|
let mut idx = 0;
|
||||||
let mut builder = vec![];
|
let mut intervals = IntervalTree::new();
|
||||||
for (v, x) in unsafe { &COUNTERS_MAPS }.iter().enumerate() {
|
for (v, x) in unsafe { &COUNTERS_MAPS }.iter().enumerate() {
|
||||||
let l = x.as_slice().len();
|
let l = x.as_slice().len();
|
||||||
let r = (idx..(idx + l), v);
|
intervals.insert(idx..(idx + l), v);
|
||||||
idx += l;
|
idx += l;
|
||||||
builder.push(r);
|
|
||||||
}
|
}
|
||||||
Self {
|
Self {
|
||||||
intervals: builder.into_iter().collect::<IntervalTree<usize, usize>>(),
|
intervals,
|
||||||
len: idx,
|
len: idx,
|
||||||
name: name.to_string(),
|
name: name.to_string(),
|
||||||
initial: u8::default(),
|
initial: u8::default(),
|
||||||
@ -286,16 +285,15 @@ mod observers {
|
|||||||
pub fn owned(name: &'static str) -> Self {
|
pub fn owned(name: &'static str) -> Self {
|
||||||
let mut idx = 0;
|
let mut idx = 0;
|
||||||
let mut v = 0;
|
let mut v = 0;
|
||||||
let mut builder = vec![];
|
let mut intervals = IntervalTree::new();
|
||||||
unsafe { &mut COUNTERS_MAPS }.iter_mut().for_each(|m| {
|
unsafe { &mut COUNTERS_MAPS }.iter_mut().for_each(|m| {
|
||||||
let l = m.as_mut_slice().len();
|
let l = m.as_mut_slice().len();
|
||||||
let r = (idx..(idx + l), v);
|
intervals.insert(idx..(idx + l), v);
|
||||||
idx += l;
|
idx += l;
|
||||||
builder.push(r);
|
|
||||||
v += 1;
|
v += 1;
|
||||||
});
|
});
|
||||||
Self {
|
Self {
|
||||||
intervals: builder.into_iter().collect::<IntervalTree<usize, usize>>(),
|
intervals,
|
||||||
len: idx,
|
len: idx,
|
||||||
name: name.to_string(),
|
name: name.to_string(),
|
||||||
initial: u8::default(),
|
initial: u8::default(),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user