diff options
author | Florian Weimer <fweimer@redhat.com> | 2019-10-31 13:28:49 +0100 |
---|---|---|
committer | Florian Weimer <fweimer@redhat.com> | 2019-11-21 13:31:29 +0100 |
commit | fcb04b9aed26a737159ef7be9c5a6ad0994437dc (patch) | |
tree | 8bbf75877c3ecff0326737f46c0f5406528ef863 | |
parent | d5dfad4326fc683c813df1e37bbf5cf920591c8e (diff) | |
download | glibc-fcb04b9aed26a737159ef7be9c5a6ad0994437dc.zip glibc-fcb04b9aed26a737159ef7be9c5a6ad0994437dc.tar.gz glibc-fcb04b9aed26a737159ef7be9c5a6ad0994437dc.tar.bz2 |
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.
Change-Id: Ic7b94a3f7c4719a00ca8e6018088567824da0658
-rw-r--r-- | elf/dl-reloc.c | 3 | ||||
-rw-r--r-- | sysdeps/generic/ldsodefs.h | 3 |
2 files changed, 5 insertions, 1 deletions
diff --git a/elf/dl-reloc.c b/elf/dl-reloc.c index 725a074..7f201fe 100644 --- a/elf/dl-reloc.c +++ b/elf/dl-reloc.c @@ -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) diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h index 891049d..9737780 100644 --- a/sysdeps/generic/ldsodefs.h +++ b/sysdeps/generic/ldsodefs.h @@ -917,6 +917,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. */ |