When honoring -Bsymbolic, still keep searching if only a weak

definition was found in the referencing object.
This commit is contained in:
John Polstra 1999-08-30 01:25:38 +00:00
parent 6bd9374580
commit 7326e0b620
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=50607

View File

@ -695,11 +695,17 @@ find_symdef(unsigned long symnum, const Obj_Entry *refobj,
ref = refobj->symtab + symnum;
name = refobj->strtab + ref->st_name;
hash = elf_hash(name);
def = NULL;
defobj = NULL;
if (refobj->symbolic) { /* Look first in the referencing object */
if ((symp = symlook_obj(name, hash, refobj, in_plt)) != NULL) {
*defobj_out = refobj;
return symp;
def = symp;
defobj = refobj;
if (ELF_ST_BIND(def->st_info) != STB_WEAK) {
*defobj_out = defobj;
return def;
}
}
}
@ -710,8 +716,6 @@ find_symdef(unsigned long symnum, const Obj_Entry *refobj,
* definition. If we find a strong definition we stop searching,
* because there won't be anything better than that.
*/
def = NULL;
defobj = NULL;
for (obj = obj_list; obj != NULL; obj = obj->next) {
if (obj == refobj && refobj->symbolic)
continue;