You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			46 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
| #include "libc.h"
 | |
| 
 | |
| /*! \brief Function pointer for initialization/finalization functions for global
 | |
|  * objects required since GCC 4.7 and later.
 | |
|  *
 | |
|  * These symbols appear kind of magically due to the compiler
 | |
|  */
 | |
| extern void (*__preinit_array_start[])();
 | |
| extern void (*__preinit_array_end[])();
 | |
| extern void (*__init_array_start[])();
 | |
| extern void (*__init_array_end[])();
 | |
| extern void (*__fini_array_start[])();
 | |
| extern void (*__fini_array_end[])();
 | |
| 
 | |
| namespace CSU {
 | |
| 
 | |
| void initializer() {
 | |
|   const unsigned int preinit_size = __preinit_array_end - __preinit_array_start;
 | |
|   for (unsigned int i = 0; i != preinit_size; ++i) {
 | |
|     (*__preinit_array_start[i])();
 | |
|   }
 | |
| 
 | |
|   const size_t size = __init_array_end - __init_array_start;
 | |
|   for (size_t i = 0; i < size; i++) {
 | |
|     (*__init_array_start[i])();
 | |
|   }
 | |
| }
 | |
| 
 | |
| void finalizer() {
 | |
|   const unsigned int fini_size = __fini_array_end - __fini_array_start;
 | |
|   for (unsigned int i = 0; i != fini_size; ++i) {
 | |
|     (*__fini_array_start[i])();
 | |
|   }
 | |
| }
 | |
| 
 | |
| }  // namespace CSU
 | |
| 
 | |
| extern "C" int atexit(void (*func)(void)) {
 | |
|   // Registers a function that will be executed on exit.
 | |
|   // We simply ignore those functions, as we don't need them for our operating
 | |
|   // systems.
 | |
|   (void)func;
 | |
| 
 | |
|   return 0;
 | |
| }
 |