Hi,

sorry, forgot a ChangeLog:


libdwfl/
2012-10-08  Jan Kratochvil  <[email protected]>

        * dwfl_module_addrsym.c (dwfl_module_addrsym): Prefer also STB_WEAK
        over STB_LOCAL.

diff --git a/libdwfl/dwfl_module_addrsym.c b/libdwfl/dwfl_module_addrsym.c
index 4e0646e..7ea6289 100644
--- a/libdwfl/dwfl_module_addrsym.c
+++ b/libdwfl/dwfl_module_addrsym.c
@@ -133,13 +143,13 @@ dwfl_module_addrsym (Dwfl_Module *mod, GElf_Addr addr,
                        }
                    }
                  /* When the beginning of its range is no closer,
-                    the end of its range might be.  But do not
-                    replace a global symbol with a local!  */
+                    the end of its range might be.  Prefer STB_GLOBAL over
+                    STB_WEAK and STB_WEAK over STB_LOCAL.  */
                  else if (sym.st_size != 0
                           && closest_sym->st_value == sym.st_value
-                          && closest_sym->st_size > sym.st_size
-                          && (GELF_ST_BIND (closest_sym->st_info)
-                              <= GELF_ST_BIND (sym.st_info)))
+                          && closest_sym->st_size >= sym.st_size
+                          && (GELF_ST_BIND (sym.st_info) == STB_GLOBAL
+                           || GELF_ST_BIND (closest_sym->st_info) == 
STB_LOCAL))
                    {
                      *closest_sym = sym;
                      closest_shndx = shndx;
_______________________________________________
elfutils-devel mailing list
[email protected]
https://lists.fedorahosted.org/mailman/listinfo/elfutils-devel

Reply via email to