LibC: Implement C++ static guards
This commit is contained in:
		
							parent
							
								
									f0be4f86a6
								
							
						
					
					
						commit
						62db9a8ef3
					
				|  | @ -39,3 +39,26 @@ extern "C" void __cxa_finalize(void* f) | |||
| 		} | ||||
| 	} | ||||
| }; | ||||
| 
 | ||||
| namespace __cxxabiv1 | ||||
| { | ||||
| 	using __guard = uint64_t; | ||||
| 
 | ||||
| 	extern "C" int __cxa_guard_acquire (__guard* g) | ||||
| 	{ | ||||
| 		uint8_t* byte = reinterpret_cast<uint8_t*>(g); | ||||
| 		uint8_t zero = 0; | ||||
| 		return __atomic_compare_exchange_n(byte, &zero, 1, false, __ATOMIC_ACQUIRE, __ATOMIC_ACQUIRE); | ||||
| 	} | ||||
| 
 | ||||
| 	extern "C" void __cxa_guard_release (__guard* g) | ||||
| 	{ | ||||
| 		uint8_t* byte = reinterpret_cast<uint8_t*>(g); | ||||
| 		__atomic_store_n(byte, 0, __ATOMIC_RELEASE); | ||||
| 	} | ||||
| 
 | ||||
| 	extern "C" void __cxa_guard_abort (__guard*) | ||||
| 	{ | ||||
| 		ASSERT_NOT_REACHED(); | ||||
| 	} | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue