📄 init.c
字号:
/* * init.cc: Initialization and Finalization Code for Shared * Libraries. * Author: James Kempf * Created On: Fri Mar 29 14:01:48 1991 * Last Modified By: James Kempf * Last Modified On: Wed Apr 24 10:34:21 1991 * Update Count: 7 */#include "dldefs.h"/************************************************************************* * void INIT_FUN() * void FINI_FUN() * Shared libraries should link a copy of this module into them. The * dynamic initialization/finalization function can look up these * functions and call them to do static ctor/dtor work. Also, the * main uses these for statically linked programs. ************************************************************************/static void __do_global_fn( int * );/* * Semaphore for indicating whether the library has already been initialized. */static int initialized = 0;/* * We do this, because init.c, in addition to being compiled standalone, * is included in drt0.cc. */extern int * __function_list_addr;void INIT_FUN(){ if ( __function_list_addr && ! initialized ) { initialized = 1; __do_global_fn( __function_list_addr); }}void FINI_FUN(){ if ( __function_list_addr && initialized ) { initialized = 0; __do_global_fn( __function_list_addr ); }}inline staticint * _do_local_fn( int * off_ptr){ void_fn fn; int i; i = *off_ptr; off_ptr++; while( --i >= 0) { fn = (void_fn)(((int)off_ptr) - ((int)(*off_ptr))); fn(); off_ptr++; } return (* off_ptr ? (int*) *off_ptr : off_ptr);}staticvoid __do_global_fn( int * ip){ while( *ip > 0) { ip = _do_local_fn(ip); } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -