Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
* sysdeps/ia64/elf/initfini.c [HAVE_INITFINI_ARRAY]
	(gmon_initializer): New function.
	(.init prologue): If HAVE_INITFINI_ARRAY is true, don't call
	__gmon_start__ here.  Call it from gmon_initializer() instead.

2002-03-12  H.J. Lu  <hjl@gnu.org>

	* elf/Makefile [$(have-initfini-array) = yes] (tests): Add tst-array1,
	tst-array2, and tst-array3.
	[$(have-initfini-array) = yes] (tests-static): Add tst-array3.
	[$(have-initfini-array) = yes] (modules-names): Add tst-array2dep.
	($(objpfx)tst-array1.out): New target.
	($(objpfx)tst-array2): Likewise.
	($(objpfx)tst-array2.out): Likewise.
	($(objpfx)tst-array3.out): Likewise.
	* elf/tst-array1.c: New file.
	* elf/tst-array1.exp: Likewise.
	* elf/tst-array2.c: Likewise.
	* elf/tst-array2dep.c: Likewise.
	* elf/tst-array2.exp: Likewise.
	* elf/tst-array3.c: Likewise.
  • Loading branch information
Roland McGrath committed Nov 7, 2002
1 parent 1d8a0fd commit dfe4c90
Show file tree
Hide file tree
Showing 9 changed files with 354 additions and 78 deletions.
24 changes: 24 additions & 0 deletions ChangeLog
@@ -1,3 +1,27 @@
2002-10-29 David Mosberger <davidm@hpl.hp.com>

* sysdeps/ia64/elf/initfini.c [HAVE_INITFINI_ARRAY]
(gmon_initializer): New function.
(.init prologue): If HAVE_INITFINI_ARRAY is true, don't call
__gmon_start__ here. Call it from gmon_initializer() instead.

2002-03-12 H.J. Lu <hjl@gnu.org>

* elf/Makefile [$(have-initfini-array) = yes] (tests): Add tst-array1,
tst-array2, and tst-array3.
[$(have-initfini-array) = yes] (tests-static): Add tst-array3.
[$(have-initfini-array) = yes] (modules-names): Add tst-array2dep.
($(objpfx)tst-array1.out): New target.
($(objpfx)tst-array2): Likewise.
($(objpfx)tst-array2.out): Likewise.
($(objpfx)tst-array3.out): Likewise.
* elf/tst-array1.c: New file.
* elf/tst-array1.exp: Likewise.
* elf/tst-array2.c: Likewise.
* elf/tst-array2dep.c: Likewise.
* elf/tst-array2.exp: Likewise.
* elf/tst-array3.c: Likewise.

2002-10-28 David Mosberger <davidm@hpl.hp.com>

* elf/dl-fini.c (_dl_fini): Invoke fini_array in _reverse_ order.
Expand Down
25 changes: 25 additions & 0 deletions elf/Makefile
Expand Up @@ -117,6 +117,9 @@ endif
endif

tests = tst-tls1 tst-tls2 tst-tls9
ifeq (yes,$(have-initfini-array))
tests += tst-array1 tst-array2 tst-array3
endif
ifeq (yes,$(build-static))
tests-static = tst-tls1-static tst-tls2-static
ifeq (yesyesyes,$(build-static)$(build-shared)$(elf))
Expand Down Expand Up @@ -156,6 +159,9 @@ modules-names = testobj1 testobj2 testobj3 testobj4 testobj5 testobj6 \
tst-tlsmod5 tst-tlsmod6 \
circlemod1 circlemod1a circlemod2 circlemod2a \
circlemod3 circlemod3a
ifeq (yes,$(have-initfini-array))
modules-names += tst-array2dep
endif
modules-vis-yes = vismod1 vismod2 vismod3
modules-nodelete-yes = nodelmod1 nodelmod2 nodelmod3 nodelmod4
modules-nodlopen-yes = nodlopenmod nodlopenmod2
Expand Down Expand Up @@ -543,3 +549,22 @@ ifdef libdl
$(objpfx)tst-tls9-static: $(common-objpfx)dlfcn/libdl.a
$(objpfx)tst-tls9-static.out: $(objpfx)tst-tlsmod5.so $(objpfx)tst-tlsmod6.so
endif

$(objpfx)tst-array1.out: $(objpfx)tst-array1
$(elf-objpfx)$(rtld-installed-name) \
--library-path $(rpath-link)$(patsubst %,:%,$(sysdep-library-path)) \
$(objpfx)tst-array1 > $@
cmp $@ tst-array1.exp > /dev/null

$(objpfx)tst-array2: $(objpfx)tst-array2dep.so
$(objpfx)tst-array2.out: $(objpfx)tst-array2
$(elf-objpfx)$(rtld-installed-name) \
--library-path $(rpath-link)$(patsubst %,:%,$(sysdep-library-path)) \
$(objpfx)tst-array2 > $@
cmp $@ tst-array2.exp > /dev/null

$(objpfx)tst-array3.out: $(objpfx)tst-array3
$(elf-objpfx)$(rtld-installed-name) \
--library-path $(rpath-link)$(patsubst %,:%,$(sysdep-library-path)) \
$(objpfx)tst-array3 > $@
cmp $@ tst-array1.exp > /dev/null
99 changes: 99 additions & 0 deletions elf/tst-array1.c
@@ -0,0 +1,99 @@
#include <unistd.h>

static void init (void) __attribute__ ((constructor));

static void
init (void)
{
write (STDOUT_FILENO, "init\n", 5);
}

static void fini (void) __attribute__ ((destructor));

static void
fini (void)
{
write (STDOUT_FILENO, "fini\n", 5);
}

static void
preinit_0 (void)
{
write (STDOUT_FILENO, "preinit array 0\n", 16);
}

static void
preinit_1 (void)
{
write (STDOUT_FILENO, "preinit array 1\n", 16);
}

static void
preinit_2 (void)
{
write (STDOUT_FILENO, "preinit array 2\n", 16);
}

void (*const preinit_array []) (void)
__attribute__ ((section (".preinit_array"))) =
{
&preinit_0,
&preinit_1,
&preinit_2
};

static void
init_0 (void)
{
write (STDOUT_FILENO, "init array 0\n", 13);
}

static void
init_1 (void)
{
write (STDOUT_FILENO, "init array 1\n", 13);
}

static void
init_2 (void)
{
write (STDOUT_FILENO, "init array 2\n", 13);
}

void (*const init_array []) (void) __attribute__ ((section (".init_array"))) =
{
&init_0,
&init_1,
&init_2
};

static void
fini_0 (void)
{
write (STDOUT_FILENO, "fini array 0\n", 13);
}

static void
fini_1 (void)
{
write (STDOUT_FILENO, "fini array 1\n", 13);
}

static void
fini_2 (void)
{
write (STDOUT_FILENO, "fini array 2\n", 13);
}

void (*const fini_array []) (void) __attribute__ ((section (".fini_array"))) =
{
&fini_0,
&fini_1,
&fini_2
};

int
main (void)
{
return 0;
}
11 changes: 11 additions & 0 deletions elf/tst-array1.exp
@@ -0,0 +1,11 @@
preinit array 0
preinit array 1
preinit array 2
init
init array 0
init array 1
init array 2
fini array 2
fini array 1
fini array 0
fini
1 change: 1 addition & 0 deletions elf/tst-array2.c
@@ -0,0 +1 @@
#include "tst-array1.c"
19 changes: 19 additions & 0 deletions elf/tst-array2.exp
@@ -0,0 +1,19 @@
preinit array 0
preinit array 1
preinit array 2
DSO init
DSO init array 0
DSO init array 1
DSO init array 2
init
init array 0
init array 1
init array 2
fini array 2
fini array 1
fini array 0
fini
DSO fini array 2
DSO fini array 1
DSO fini array 0
DSO fini
67 changes: 67 additions & 0 deletions elf/tst-array2dep.c
@@ -0,0 +1,67 @@
#include <unistd.h>

static void init (void) __attribute__ ((constructor));

static void
init (void)
{
write (STDOUT_FILENO, "DSO init\n", 9);
}

static void fini (void) __attribute__ ((destructor));

static void
fini (void)
{
write (STDOUT_FILENO, "DSO fini\n", 9);
}

static void
init_0 (void)
{
write (STDOUT_FILENO, "DSO init array 0\n", 17);
}

static void
init_1 (void)
{
write (STDOUT_FILENO, "DSO init array 1\n", 17);
}

static void
init_2 (void)
{
write (STDOUT_FILENO, "DSO init array 2\n", 17);
}

void (*const init_array []) (void) __attribute__ ((section (".init_array"))) =
{
&init_0,
&init_1,
&init_2
};

static void
fini_0 (void)
{
write (STDOUT_FILENO, "DSO fini array 0\n", 17);
}

static void
fini_1 (void)
{
write (STDOUT_FILENO, "DSO fini array 1\n", 17);
}

static void
fini_2 (void)
{
write (STDOUT_FILENO, "DSO fini array 2\n", 17);
}

void (*const fini_array []) (void) __attribute__ ((section (".fini_array"))) =
{
&fini_0,
&fini_1,
&fini_2
};
1 change: 1 addition & 0 deletions elf/tst-array3.c
@@ -0,0 +1 @@
#include "tst-array1.c"

0 comments on commit dfe4c90

Please sign in to comment.