* Crash in DT_FINI_ARRAY
@ 2003-01-23 13:08 Andreas Schwab
2003-01-23 19:45 ` David Mosberger
2003-01-24 21:28 ` Andreas Schwab
0 siblings, 2 replies; 6+ messages in thread
From: Andreas Schwab @ 2003-01-23 13:08 UTC (permalink / raw)
To: libc-hacker
The pointers in DT_FINI_ARRAY are already relocated.
Andreas.
2003-01-23 Andreas Schwab <schwab@suse.de>
* elf/dl-close.c (_dl_close): Don't relocate DT_FINI_ARRAY
elements.
--- elf/dl-close.c.~1.93.~ 2003-01-16 11:19:32.000000000 +0100
+++ elf/dl-close.c 2003-01-22 21:11:29.000000000 +0100
@@ -241,7 +241,7 @@ _dl_close (void *_map)
unsigned int cnt;
for (cnt = 0; cnt < sz; ++cnt)
- ((fini_t) (imap->l_addr + array[cnt])) ();
+ ((fini_t) array[cnt]) ();
}
/* Next try the old-style destructor. */
--
Andreas Schwab, SuSE Labs, schwab@suse.de
SuSE Linux AG, Deutschherrnstr. 15-19, D-90429 Nürnberg
Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5
"And now for something completely different."
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Crash in DT_FINI_ARRAY
2003-01-23 13:08 Crash in DT_FINI_ARRAY Andreas Schwab
@ 2003-01-23 19:45 ` David Mosberger
2003-01-23 22:09 ` Andreas Schwab
2003-01-24 21:28 ` Andreas Schwab
1 sibling, 1 reply; 6+ messages in thread
From: David Mosberger @ 2003-01-23 19:45 UTC (permalink / raw)
To: Andreas Schwab; +Cc: libc-hacker
What platform did it crash on? I'm sure I tested it on ia64 and it
worked fine, there (at least it got through the test-suite without
visible errors).
--david
>>>>> On Thu, 23 Jan 2003 14:08:20 +0100, Andreas Schwab <schwab@suse.de> said:
Andreas> The pointers in DT_FINI_ARRAY are already relocated.
Andreas> Andreas.
Andreas> 2003-01-23 Andreas Schwab <schwab@suse.de>
Andreas> * elf/dl-close.c (_dl_close): Don't relocate
Andreas> DT_FINI_ARRAY elements.
Andreas> --- elf/dl-close.c.~1.93.~ 2003-01-16 11:19:32.000000000
Andreas> +0100 +++ elf/dl-close.c 2003-01-22 21:11:29.000000000
Andreas> +0100 @@ -241,7 +241,7 @@ _dl_close (void *_map) unsigned
Andreas> int cnt;
Andreas> for (cnt = 0; cnt < sz; ++cnt) - ((fini_t)
Andreas> (imap->l_addr + array[cnt])) (); + ((fini_t) array[cnt])
Andreas> (); }
Andreas> /* Next try the old-style destructor. */
Andreas> -- Andreas Schwab, SuSE Labs, schwab@suse.de SuSE Linux AG,
Andreas> Deutschherrnstr. 15-19, D-90429 Nürnberg Key fingerprint =
Andreas> 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 "And now
Andreas> for something completely different."
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Crash in DT_FINI_ARRAY
2003-01-23 19:45 ` David Mosberger
@ 2003-01-23 22:09 ` Andreas Schwab
2003-01-23 22:22 ` David Mosberger
0 siblings, 1 reply; 6+ messages in thread
From: Andreas Schwab @ 2003-01-23 22:09 UTC (permalink / raw)
To: davidm; +Cc: libc-hacker
David Mosberger <davidm@napali.hpl.hp.com> writes:
> What platform did it crash on?
ia64, of course, still the only platform where gcc uses
.init_array/.fini_array. Note that DT_INIT_ARRAY is handled
correctly.
Andreas.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Crash in DT_FINI_ARRAY
2003-01-23 22:09 ` Andreas Schwab
@ 2003-01-23 22:22 ` David Mosberger
0 siblings, 0 replies; 6+ messages in thread
From: David Mosberger @ 2003-01-23 22:22 UTC (permalink / raw)
To: Andreas Schwab; +Cc: libc-hacker
>>>>> On 23 Jan 2003 23:08:47 +0100, Andreas Schwab <schwab@suse.de> said:
Andreas> David Mosberger <davidm@napali.hpl.hp.com> writes:
>> What platform did it crash on?
Andreas> ia64, of course, still the only platform where gcc uses
Andreas> .init_array/.fini_array. Note that DT_INIT_ARRAY is handled
Andreas> correctly.
OK, no objections, then... ;-)
--david
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Crash in DT_FINI_ARRAY
2003-01-23 13:08 Crash in DT_FINI_ARRAY Andreas Schwab
2003-01-23 19:45 ` David Mosberger
@ 2003-01-24 21:28 ` Andreas Schwab
2003-01-27 20:44 ` Ulrich Drepper
1 sibling, 1 reply; 6+ messages in thread
From: Andreas Schwab @ 2003-01-24 21:28 UTC (permalink / raw)
To: libc-hacker
Roland asked me to create a test, and that promptly revealed another bug.
Andreas.
2003-01-24 Andreas Schwab <schwab@suse.de>
* elf/dl-close.c (_dl_close): Don't relocate DT_FINI_ARRAY
elements, and process them backwards.
* elf/Makefile ($(objpfx)tst-array4): New target.
($(objpfx)tst-array4.out): Likewise.
(tests) [$(have-initfini-array) = yes]: Add tst-array4.
* elf/tst-array4.c: New file.
* elf/tst-array4.exp: Likewise.
--- elf/Makefile.~1.254.~ 2003-01-16 11:19:30.000000000 +0100
+++ elf/Makefile 2003-01-24 21:40:51.000000000 +0100
@@ -121,7 +121,7 @@ endif
tests = tst-tls1 tst-tls2 tst-tls9
ifeq (yes,$(have-initfini-array))
-tests += tst-array1 tst-array2 tst-array3
+tests += tst-array1 tst-array2 tst-array3 tst-array4
endif
ifeq (yes,$(build-static))
tests-static = tst-tls1-static tst-tls2-static
@@ -594,6 +594,12 @@ $(objpfx)tst-array3.out: $(objpfx)tst-ar
$(objpfx)tst-array3 > $@
cmp $@ tst-array1.exp > /dev/null
+$(objpfx)tst-array4: $(libdl)
+$(objpfx)tst-array4.out: $(objpfx)tst-array4 $(objpfx)tst-array2dep.so
+ $(elf-objpfx)$(rtld-installed-name) \
+ --library-path $(rpath-link)$(patsubst %,:%,$(sysdep-library-path)) \
+ $< > $@
+ cmp $@ tst-array4.exp > /dev/null
check-textrel-CFLAGS = -O
$(objpfx)check-textrel: check-textrel.c
--- elf/dl-close.c.~1.93.~ 2003-01-16 11:19:32.000000000 +0100
+++ elf/dl-close.c 2003-01-24 22:16:12.000000000 +0100
@@ -238,10 +238,9 @@ _dl_close (void *_map)
+ imap->l_info[DT_FINI_ARRAY]->d_un.d_ptr);
unsigned int sz = (imap->l_info[DT_FINI_ARRAYSZ]->d_un.d_val
/ sizeof (ElfW(Addr)));
- unsigned int cnt;
- for (cnt = 0; cnt < sz; ++cnt)
- ((fini_t) (imap->l_addr + array[cnt])) ();
+ while (sz-- > 0)
+ ((fini_t) array[sz]) ();
}
/* Next try the old-style destructor. */
--- /dev/null 2002-12-10 23:57:13.000000000 +0100
+++ elf/tst-array4.c 2003-01-24 20:46:10.000000000 +0100
@@ -0,0 +1,18 @@
+#include <dlfcn.h>
+
+#define main array1_main
+#include "tst-array1.c"
+#undef main
+
+int
+main (void)
+{
+ void *handle = dlopen ("tst-array2dep.so", RTLD_LAZY);
+
+ array1_main ();
+
+ if (handle != NULL)
+ dlclose (handle);
+
+ return 0;
+}
--- /dev/null 2002-12-10 23:57:13.000000000 +0100
+++ elf/tst-array4.exp 2003-01-24 21:38:48.000000000 +0100
@@ -0,0 +1,19 @@
+preinit array 0
+preinit array 1
+preinit array 2
+init
+init array 0
+init array 1
+init array 2
+DSO init
+DSO init array 0
+DSO init array 1
+DSO init array 2
+DSO fini array 2
+DSO fini array 1
+DSO fini array 0
+DSO fini
+fini array 2
+fini array 1
+fini array 0
+fini
--
Andreas Schwab, SuSE Labs, schwab@suse.de
SuSE Linux AG, Deutschherrnstr. 15-19, D-90429 Nürnberg
Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5
"And now for something completely different."
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Crash in DT_FINI_ARRAY
2003-01-24 21:28 ` Andreas Schwab
@ 2003-01-27 20:44 ` Ulrich Drepper
0 siblings, 0 replies; 6+ messages in thread
From: Ulrich Drepper @ 2003-01-27 20:44 UTC (permalink / raw)
To: Andreas Schwab; +Cc: libc-hacker
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Andreas Schwab wrote:
> Roland asked me to create a test, and that promptly revealed another bug.
Thanks, I've applied the patch.
- --
- --------------. ,-. 444 Castro Street
Ulrich Drepper \ ,-----------------' \ Mountain View, CA 94041 USA
Red Hat `--' drepper at redhat.com `---------------------------
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (GNU/Linux)
iD8DBQE+NZpz2ijCOnn/RHQRAk9xAJ9PeVZegPxgovRAERXydnooI0/vlACgpTq6
gcukZnKbRQpwCcn1yZsMbTQ=
=QQET
-----END PGP SIGNATURE-----
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2003-01-27 20:44 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-01-23 13:08 Crash in DT_FINI_ARRAY Andreas Schwab
2003-01-23 19:45 ` David Mosberger
2003-01-23 22:09 ` Andreas Schwab
2003-01-23 22:22 ` David Mosberger
2003-01-24 21:28 ` Andreas Schwab
2003-01-27 20:44 ` Ulrich Drepper
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).