mirror of
https://github.com/netwide-assembler/nasm.git
synced 2025-01-18 16:25:05 +08:00
BR3392231: Fix get_closest_section_symbol_by_offset
This patch changes get_closest_section_symbol_by_offset logic to lookup only the closest symbols which are at or before the supplied offset. Signed-off-by: Keith Kanios <keith@kanios.net> Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
This commit is contained in:
parent
f1fe4fdeab
commit
7ce86b500c
@ -299,37 +299,20 @@ 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 *nearest = NULL;
|
||||
int64_t sval, nval, sdiff, ndiff;
|
||||
struct symbol *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;
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
for (sym = syms; sym; sym = sym->next) {
|
||||
if ((sym->sect != NO_SECT) && (sym->sect == fileindex)) {
|
||||
if ((int64_t)sym->value > offset)
|
||||
break;
|
||||
nearest = sym;
|
||||
}
|
||||
}
|
||||
|
||||
return nearest;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Special section numbers which are used to define Mach-O special
|
||||
* symbols, which can be used with WRT to provide PIC relocation
|
||||
|
Loading…
Reference in New Issue
Block a user