when resolving symbols with only weak defs, use first def, not last def
authorRich Felker <dalias@aerifal.cx>
Mon, 25 Jul 2011 13:22:05 +0000 (09:22 -0400)
committerRich Felker <dalias@aerifal.cx>
Mon, 25 Jul 2011 13:22:05 +0000 (09:22 -0400)
src/ldso/dynlink.c

index 6c4abbf..7a26e9e 100644 (file)
@@ -107,6 +107,7 @@ static void *find_sym(struct dso *dso, const char *s, int need_def)
                if (sym && (!need_def || sym->st_shndx) && sym->st_value
                 && (1<<(sym->st_info&0xf) & OK_TYPES)
                 && (1<<(sym->st_info>>4) & OK_BINDS)) {
+                       if (def && sym->st_info>>4 == STB_WEAK) continue;
                        def = dso->base + sym->st_value;
                        if (sym->st_info>>4 == STB_GLOBAL) break;
                }