diff options
Diffstat (limited to 'src/usr/module_init.C')
-rw-r--r-- | src/usr/module_init.C | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/src/usr/module_init.C b/src/usr/module_init.C index 3e9a25e58..91df9a952 100644 --- a/src/usr/module_init.C +++ b/src/usr/module_init.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2011,2015 */ +/* Contributors Listed Below - COPYRIGHT 2011,2019 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -22,20 +22,32 @@ /* permissions and limitations under the License. */ /* */ /* IBM_PROLOG_END_TAG */ + +#include <stdint.h> + void call_dtors(void * i_dso_handle); -void __tls_register(void * tls_start, void * tls_end); + +/** + * @note: See documentation in src/lib/tls.C + */ +void __tls_register(void * tls_start, void * tls_end,const size_t i_module); + void __tls_unregister(void * tls_start, void * tls_end); // This identifies the module void* __dso_handle = (void*) &__dso_handle; +// TLS Module ID to be updated by custom linker during final binary creation. +// Set to max ID so that if it's not replaced, it will lead to obvious crashes. +size_t TLS_MODULE_ID = 0xFFFFFFFFFFFFFFFFULL; + extern "C" void _init(void*) { // Register thread-local storage. extern void* tls_start_address; extern void* tls_end_address; - __tls_register(&tls_start_address, &tls_end_address); + __tls_register(&tls_start_address, &tls_end_address, TLS_MODULE_ID); // Call default constructors for any static objects. extern void (*ctor_start_address)(); |