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