fn find(symbols: []const Symbol, address: usize) ?*const Symbol symbols: []const Symboladdress: usize327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342 fn find(symbols: []const Symbol, address: usize) ?*const Symbol {
if (symbols.len == 0) return null; // no potential match
if (address < symbols[0].addr) return null; // address is before the lowest-address symbol
var left: usize = 0;
var len: usize = symbols.len;
while (len > 1) {
const mid = left + len / 2;
if (address < symbols[mid].addr) {
len /= 2;
} else {
left = mid;
len -= len / 2;
}
}
return &symbols[left];
}
Assumes that
symbolsis sorted in order of ascendingaddr.