Module Name: src
Committed By: matt
Date: Thu Jan 31 22:24:25 UTC 2013
Modified Files:
src/lib/csu/common: crt0-common.c
Log Message:
Add support for PREINIT_ARRAY
To generate a diff of this commit:
cvs rdiff -u -r1.12 -r1.13 src/lib/csu/common/crt0-common.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/lib/csu/common/crt0-common.c
diff -u src/lib/csu/common/crt0-common.c:1.12 src/lib/csu/common/crt0-common.c:1.13
--- src/lib/csu/common/crt0-common.c:1.12 Mon Jan 28 16:56:39 2013
+++ src/lib/csu/common/crt0-common.c Thu Jan 31 22:24:25 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: crt0-common.c,v 1.12 2013/01/28 16:56:39 matt Exp $ */
+/* $NetBSD: crt0-common.c,v 1.13 2013/01/31 22:24:25 matt Exp $ */
/*
* Copyright (c) 1998 Christos Zoulas
@@ -36,7 +36,7 @@
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: crt0-common.c,v 1.12 2013/01/28 16:56:39 matt Exp $");
+__RCSID("$NetBSD: crt0-common.c,v 1.13 2013/01/31 22:24:25 matt Exp $");
#include <sys/types.h>
#include <sys/exec.h>
@@ -95,6 +95,10 @@ do { \
* Since we don't need .init or .fini sections, just code them in C
* to make life easier.
*/
+__weakref_visible const fptr_t preinit_array_start[1]
+ __weak_reference(__preinit_array_start);
+__weakref_visible const fptr_t preinit_array_end[1]
+ __weak_reference(__preinit_array_end);
__weakref_visible const fptr_t init_array_start[1]
__weak_reference(__init_array_start);
__weakref_visible const fptr_t init_array_end[1]
@@ -105,6 +109,14 @@ __weakref_visible const fptr_t fini_arra
__weak_reference(__fini_array_end);
static inline void
+_preinit(void)
+{
+ for (const fptr_t *f = preinit_array_start; f < preinit_array_end; f++) {
+ (*f)();
+ }
+}
+
+static inline void
_init(void)
{
for (const fptr_t *f = init_array_start; f < init_array_end; f++) {
@@ -156,6 +168,10 @@ ___start(void (*cleanup)(void), /* fro
_libc_init();
+#ifdef HAVE_INITFINI_ARRAY
+ _preinit();
+#endif
+
#ifdef MCRT0
atexit(_mcleanup);
monstartup((u_long)&__eprol, (u_long)&__etext);