diff options
author | Rich Felker <dalias@aerifal.cx> | 2011-07-25 09:22:05 -0400 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2011-07-25 09:22:05 -0400 |
commit | e01ac67599dea1fd78a1bd1a0339a1da07dc9578 (patch) | |
tree | 2d8c0218c158ec6fcce0d67176c01a99e0d6c1de /src/ldso | |
parent | dd92a09ecac74760823b047c074e4b21a8cb531f (diff) | |
download | musl-e01ac67599dea1fd78a1bd1a0339a1da07dc9578.tar.gz musl-e01ac67599dea1fd78a1bd1a0339a1da07dc9578.tar.xz musl-e01ac67599dea1fd78a1bd1a0339a1da07dc9578.zip |
when resolving symbols with only weak defs, use first def, not last def
Diffstat (limited to 'src/ldso')
-rw-r--r-- | src/ldso/dynlink.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/src/ldso/dynlink.c b/src/ldso/dynlink.c index 6c4abbfe..7a26e9ed 100644 --- a/src/ldso/dynlink.c +++ b/src/ldso/dynlink.c @@ -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; } |