BR3282788: Fix 64-bit Mach-O bug that crashes NASM due to NULL symbols

This commit is contained in:
Keith Kanios 2011-04-11 21:38:50 -05:00
parent 918317c4ce
commit 8052664433

View file

@ -299,16 +299,34 @@ static uint8_t get_section_fileindex_by_index(const int32_t index)
static struct symbol *get_closest_section_symbol_by_offset(uint8_t fileindex, int64_t offset)
{
struct symbol *sym;
struct symbol *sym;
struct symbol *nearest = NULL;
int64_t sval, nval, sdiff, ndiff;
for (sym = syms; sym != NULL; sym = sym->next) {
if ((sym->sect != NO_SECT) &&
(sym->sect == fileindex) &&
((int64_t)sym->value >= offset))
return sym;
}
for (sym = syms; sym != NULL; sym = sym->next) {
if ((sym->sect != NO_SECT) && (sym->sect == fileindex)){
if(nearest == NULL){
nearest = sym;
}else{
sval = (int64_t)sym->value;
nval = (int64_t)nearest->value;
return NULL;
sdiff = ((sval >= offset) ? (sval - offset) : (offset - sval));
ndiff = ((nval >= offset) ? (nval - offset) : (offset - nval));
if(sdiff <= ndiff){
nearest = sym;
}
/* Symbols should be in order, so this optimization should be OK */
if((int64_t)nearest->value >= offset){
break;
}
}
}
}
return nearest;
}