1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- /*
- * Copyright (C) 2006 CodeSourcery Inc
- *
- * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
- *
- * This file defines the main initialisation and finalisation code for
- * shared flat libraries. It in turn calls the initialisation and
- * finalisation code for each registered library.
- */
- #include "shared_flat_lib.h"
- /* A doubly-linked list of shared libraries. Those nearer the head
- * of the list should be initialised first and finalised last. */
- struct shared_flat_lib *__first_shared_lib;
- struct shared_flat_lib *__last_shared_lib;
- void __shared_flat_init(void)
- {
- struct shared_flat_lib *lib;
- void (**start)(void);
- void (**end)(void);
- for (lib = __first_shared_lib; lib; lib = lib->next) {
- end = lib->preinit_array_end;
- for (start = lib->preinit_array_start; start < end; start++)
- (*start)();
- }
- for (lib = __first_shared_lib; lib; lib = lib->next) {
- if (lib->init)
- lib->init();
- end = lib->init_array_end;
- for (start = lib->init_array_start; start < end; start++)
- (*start)();
- }
- }
- void __shared_flat_fini(void)
- {
- struct shared_flat_lib *lib;
- void (**start)(void);
- void (**end)(void);
- for (lib = __last_shared_lib; lib; lib = lib->prev) {
- start = lib->fini_array_start;
- for (end = lib->fini_array_end; end > start;)
- (*--end)();
- if (lib->fini)
- lib->fini();
- }
- }
|