diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 41eeea0045..eb5c196b49 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,10 @@ +2014-05-28 Tristan Gingold + + * dwarf2.c (lookup_address_in_function_table): Add best_fit_len + to keep the length of the best fit range. + (lookup_symbol_in_function_table, info_hash_lookup_funcinfo): + Likewise. + 2014-05-27 DJ Delorie * bfd/elf32-rx.c (get_symbol_value_maybe): New. diff --git a/bfd/dwarf2.c b/bfd/dwarf2.c index e5579d84f6..5e322ce14c 100644 --- a/bfd/dwarf2.c +++ b/bfd/dwarf2.c @@ -1994,6 +1994,7 @@ lookup_address_in_function_table (struct comp_unit *unit, { struct funcinfo* each_func; struct funcinfo* best_fit = NULL; + bfd_vma best_fit_len = 0; struct arange *arange; for (each_func = unit->function_table; @@ -2007,9 +2008,11 @@ lookup_address_in_function_table (struct comp_unit *unit, if (addr >= arange->low && addr < arange->high) { if (!best_fit - || (arange->high - arange->low - < best_fit->arange.high - best_fit->arange.low)) - best_fit = each_func; + || arange->high - arange->low < best_fit_len) + { + best_fit = each_func; + best_fit_len = arange->high - arange->low; + } } } } @@ -2038,6 +2041,7 @@ lookup_symbol_in_function_table (struct comp_unit *unit, { struct funcinfo* each_func; struct funcinfo* best_fit = NULL; + bfd_vma best_fit_len = 0; struct arange *arange; const char *name = bfd_asymbol_name (sym); asection *sec = bfd_get_section (sym); @@ -2056,9 +2060,11 @@ lookup_symbol_in_function_table (struct comp_unit *unit, && each_func->name && strcmp (name, each_func->name) == 0 && (!best_fit - || (arange->high - arange->low - < best_fit->arange.high - best_fit->arange.low))) - best_fit = each_func; + || arange->high - arange->low < best_fit_len)) + { + best_fit = each_func; + best_fit_len = arange->high - arange->low; + } } } @@ -3173,6 +3179,7 @@ info_hash_lookup_funcinfo (struct info_hash_table *hash_table, { struct funcinfo* each_func; struct funcinfo* best_fit = NULL; + bfd_vma best_fit_len = 0; struct info_list_node *node; struct arange *arange; const char *name = bfd_asymbol_name (sym); @@ -3191,9 +3198,11 @@ info_hash_lookup_funcinfo (struct info_hash_table *hash_table, && addr >= arange->low && addr < arange->high && (!best_fit - || (arange->high - arange->low - < best_fit->arange.high - best_fit->arange.low))) - best_fit = each_func; + || arange->high - arange->low < best_fit_len)) + { + best_fit = each_func; + best_fit_len = arange->high - arange->low; + } } }