1 /*
2 * Copyright (C) 2006 CodeSourcery Inc
3 *
4 * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
5 *
6 * This file defines __shared_flat_add_library. If a library has
7 * initialistion and finalisation code, it should use this routine
8 * to register itself.
9 */
10 #include "shared_flat_lib.h"
11
12 /* The initialisation and finalisation symbols for this library. */
13 extern void _init(void) attribute_hidden weak_function;
14 extern void _fini(void) attribute_hidden weak_function;
15 extern void (*__preinit_array_start[])(void) attribute_hidden;
16 extern void (*__preinit_array_end[])(void) attribute_hidden;
17 extern void (*__init_array_start[])(void) attribute_hidden;
18 extern void (*__init_array_end[])(void) attribute_hidden;
19 extern void (*__fini_array_start[])(void) attribute_hidden;
20 extern void (*__fini_array_end[])(void) attribute_hidden;
21
22 /* The shared_flat_lib structure that describes this library. */
23 static struct shared_flat_lib this_lib = {
24 0,
25 0,
26 __preinit_array_start,
27 __preinit_array_end,
28 __init_array_start,
29 __init_array_end,
30 __fini_array_start,
31 __fini_array_end,
32 _init,
33 _fini
34 };
35
36 /* Add this_lib to the end of the global list. */
37 void __shared_flat_add_library(void) attribute_hidden;
__shared_flat_add_library(void)38 void __shared_flat_add_library(void)
39 {
40 this_lib.prev = __last_shared_lib;
41 if (this_lib.prev)
42 this_lib.prev->next = &this_lib;
43 else
44 __first_shared_lib = &this_lib;
45 __last_shared_lib = &this_lib;
46 }
47