From 23382b36a7f28c5205edd77bacf00fa7cbee9d53 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Fri, 14 Sep 2001 04:25:14 +0000 Subject: Update. 2001-09-13 Jakub Jelinek * elf/dl-deps.c (_dl_map_object_deps): Fix filter handling if filter is already found earlier in the search scope. 2001-09-12 Jakub Jelinek * rt/Makefile (LDFLAGS-rt.so): Use shared thread library as librt's filter. --- ChangeLog | 10 ++++++++++ elf/dl-deps.c | 27 ++++++++------------------- rt/Makefile | 4 ++++ 3 files changed, 22 insertions(+), 19 deletions(-) diff --git a/ChangeLog b/ChangeLog index 253864b0d5..ff3c1353df 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2001-09-13 Jakub Jelinek + + * elf/dl-deps.c (_dl_map_object_deps): Fix filter handling if filter + is already found earlier in the search scope. + +2001-09-12 Jakub Jelinek + + * rt/Makefile (LDFLAGS-rt.so): Use shared thread library as librt's + filter. + 2001-09-13 Ulrich Drepper * sysdeps/powerpc/fpu/libm-test-ulps: Adjust expected errors for j0. diff --git a/elf/dl-deps.c b/elf/dl-deps.c index 9d91d5ef00..ec61326614 100644 --- a/elf/dl-deps.c +++ b/elf/dl-deps.c @@ -362,11 +362,11 @@ _dl_map_object_deps (struct link_map *map, /* This object is already in the search list we are building. Don't add a duplicate pointer. Just added by _dl_map_object. */ - for (late = newp; late->next; late = late->next) + for (late = newp; late->next != NULL; late = late->next) if (late->next->map == args.aux) break; - if (late->next) + if (late->next != NULL) { /* The object is somewhere behind the current position in the search path. We have to @@ -380,9 +380,9 @@ _dl_map_object_deps (struct link_map *map, late->next = late->next->next; /* We must move the object earlier in the chain. */ - if (args.aux->l_prev) + if (args.aux->l_prev != NULL) args.aux->l_prev->l_next = args.aux->l_next; - if (args.aux->l_next) + if (args.aux->l_next != NULL) args.aux->l_next->l_prev = args.aux->l_prev; args.aux->l_prev = newp->map->l_prev; @@ -394,21 +394,10 @@ _dl_map_object_deps (struct link_map *map, else { /* The object must be somewhere earlier in the - list. That's good, we only have to insert - an entry for the duplicate list. */ - orig->next = NULL; /* Never used. */ - - /* Now we have a problem. The element - pointing to ORIG in the list must - point to NEWP now. This is the only place - where we need this backreference and this - situation is really not that frequent. So - we don't use a double-linked list but - instead search for the preceding element. */ - late = known; - while (late->next != orig) - late = late->next; - late->next = newp; + list. Undo to the current list element what + we did above. */ + memcpy (orig, newp, sizeof (*newp)); + continue; } } else diff --git a/rt/Makefile b/rt/Makefile index 47ce1fbe84..df766f46a1 100644 --- a/rt/Makefile +++ b/rt/Makefile @@ -54,6 +54,10 @@ include ../Rules $(objpfx)librt.so: $(common-objpfx)libc.so $(common-objpfx)libc_nonshared.a \ $(shared-thread-library) +ifeq (yes,$(have-thread-library)) +LDFLAGS-rt.so += -Wl,-F,lib$(libprefix)$(patsubst lib%.so,%,$(notdir $(shared-thread-library))).so$($(notdir $(shared-thread-library))-version) +endif + ifeq (yes,$(build-shared)) $(addprefix $(objpfx),$(tests)): $(objpfx)librt.so $(shared-thread-library) else -- cgit 1.4.1