Introduce DL_LOOKUP_FOR_RELOCATE flag for _dl_lookup_symbol_x

This will allow changes in dependency processing during non-lazy
binding, for more precise processing of NODELETE objects: During
initial relocation in dlopen, the fate of NODELETE objects is still
unclear, so objects which are depended upon by NODELETE objects
cannot immediately be marked as NODELETE.
This commit is contained in:
Florian Weimer 2019-10-29 12:23:48 +01:00
parent aae3acbaa7
commit 10c5d5518c
2 changed files with 5 additions and 1 deletions

View File

@ -244,7 +244,8 @@ _dl_relocate_object (struct link_map *l, struct r_scope_elem *scope[],
v = (version); \
_lr = _dl_lookup_symbol_x (strtab + (*ref)->st_name, l, (ref), \
scope, v, _tc, \
DL_LOOKUP_ADD_DEPENDENCY, NULL); \
DL_LOOKUP_ADD_DEPENDENCY \
| DL_LOOKUP_FOR_RELOCATE, NULL); \
l->l_lookup_cache.ret = (*ref); \
l->l_lookup_cache.value = _lr; })) \
: l)

View File

@ -914,6 +914,9 @@ enum
DL_LOOKUP_RETURN_NEWEST = 2,
/* Set if dl_lookup* called with GSCOPE lock held. */
DL_LOOKUP_GSCOPE_LOCK = 4,
/* Set if dl_lookup is called for non-lazy relocation processing
from _dl_relocate_object in elf/dl-reloc.c. */
DL_LOOKUP_FOR_RELOCATE = 8,
};
/* Lookup versioned symbol. */