20 for (rb = rb_first(&
block_ranges.root); rb; rb = rb_next(rb)) {
23 assert(old < entry->
start);
34 struct rb_node *parent = NULL;
41 if (addr < entry->
start)
43 else if (addr > entry->
end)
44 p = &parent->rb_right;
54 struct rb_node **p = &node->rb_left;
59 rb_link_node(left, node, p);
64 struct rb_node **p = &node->rb_right;
69 rb_link_node(right, node, p);
82 struct rb_node *n, *parent = NULL;
90 if (start < entry->
start)
92 else if (start > entry->
end)
93 p = &parent->rb_right;
124 .end = next->
start - 1,
152 rb_link_node(&entry->
node, parent, p);
176 .entry = entry->
entry,
202 if (end < entry->end) {
214 .taken = entry->
taken,
234 if (end == entry->
end) {
247 if (end < next->
start) {
272 if (entry->
end + 1 != next->
start) {
279 .end = next->
start - 1,
struct block_range * start
static void block_range__debug(void)
double block_range__coverage(struct block_range *br)
static int entry(u64 ip, struct unwind_info *ui)
struct block_range * block_range__find(u64 addr)
static struct annotation * symbol__annotation(struct symbol *sym)
static struct block_range * block_range__next(struct block_range *br)
static int sym(yyscan_t scanner, int type, int config)
struct block_range_iter block_range__create(u64 start, u64 end)
static void rb_link_right_of_node(struct rb_node *right, struct rb_node *node)
static void rb_link_left_of_node(struct rb_node *left, struct rb_node *node)