From 1d8a0fd965535f5c48cfb1e0b9d4fb8596190cd6 Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Thu, 7 Nov 2002 20:47:27 +0000 Subject: [PATCH] * elf/dl-fini.c (_dl_fini): Invoke fini_array in _reverse_ order. Don't add L->l_addr to array entry values. --- ChangeLog | 5 +++++ elf/dl-fini.c | 10 ++++------ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index bb13bedcde..ad82256c91 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2002-10-28 David Mosberger + + * elf/dl-fini.c (_dl_fini): Invoke fini_array in _reverse_ order. + Don't add L->l_addr to array entry values. + 2002-11-07 Jakub Jelinek * string/test-string.h: New file. diff --git a/elf/dl-fini.c b/elf/dl-fini.c index e7a00e513e..46202734a7 100644 --- a/elf/dl-fini.c +++ b/elf/dl-fini.c @@ -157,12 +157,10 @@ _dl_fini (void) ElfW(Addr) *array = (ElfW(Addr) *) (l->l_addr + l->l_info[DT_FINI_ARRAY]->d_un.d_ptr); - unsigned int sz = (l->l_info[DT_FINI_ARRAYSZ]->d_un.d_val - / sizeof (ElfW(Addr))); - unsigned int cnt; - - for (cnt = 0; cnt < sz; ++cnt) - ((fini_t) (l->l_addr + array[cnt])) (); + unsigned int i = (l->l_info[DT_FINI_ARRAYSZ]->d_un.d_val + / sizeof (ElfW(Addr))); + while (i-- > 0) + ((fini_t) array[i]) (); } /* Next try the old-style destructor. */