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);