diff options
| author | Jaymes Wilks <mjwilks@us.ibm.com> | 2019-02-04 14:06:56 -0600 |
|---|---|---|
| committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2019-03-11 17:07:52 -0500 |
| commit | f5475890894b4d542f622cee27604de15b41bb4b (patch) | |
| tree | c7462a5d51689fab8dfbe66dd87c6263e8e44959 /src/usr | |
| parent | 676c584aaa7046d45d0c9ac3851699566d905bac (diff) | |
| download | blackbird-hostboot-f5475890894b4d542f622cee27604de15b41bb4b.tar.gz blackbird-hostboot-f5475890894b4d542f622cee27604de15b41bb4b.zip | |
Support thread local storage
Generally adds support to declare variables as thread_local
- Add support in HBRT start assembly to skip adjusting TLS relocations
- Add support in linker to generate tagged TLS entries
- Update linker to process TLS relocations correctly
- Update TLS code to ignore top half of module ID
- Update module images to hold a "module ID"
- Update custome linker to update module ID during binary link
- Update TLS code to track TLS sections via module ID
Change-Id: I1589550d7787beb08827ca24a728397dedf0373b
RTC: 147599
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/71709
Reviewed-by: Ilya Smirnov <ismirno@us.ibm.com>
Reviewed-by: Michael Baiocchi <mbaiocch@us.ibm.com>
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/usr')
| -rw-r--r-- | src/usr/module_init.C | 18 | ||||
| -rw-r--r-- | src/usr/testcore/rtloader/loader.H | 2 |
2 files changed, 16 insertions, 4 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)(); diff --git a/src/usr/testcore/rtloader/loader.H b/src/usr/testcore/rtloader/loader.H index 1c4423484..64db72dc4 100644 --- a/src/usr/testcore/rtloader/loader.H +++ b/src/usr/testcore/rtloader/loader.H @@ -228,7 +228,7 @@ class RuntimeLoaderTest : public CxxTest::TestSuite "std 2, 40(1); bctrl; ld 2, 40(1); " "mr %0, 3" : "=r" (result) : "r" (entry), "r" (param0), "r" (param1) : - "lr","ctr","r0","r3","r4","r5","r6","r7","r8","r9", + "lr","ctr","cr0","r0","r3","r4","r5","r6","r7","r8","r9", "r10","r11"); // TODO: Need to double check the ABI here. return result; |

