diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2022-09-27 07:43:37 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2022-10-14 10:48:22 +0200 |
commit | 4c89fbcd316ca99fa16a0acc31f88fb80cb3060f (patch) | |
tree | 1d5fb6dac956308d141bd7d9b20ec74bee38427b /cpukit/score/cpu/microblaze | |
parent | score: Move Thread_Control::Registers member (diff) | |
download | rtems-4c89fbcd316ca99fa16a0acc31f88fb80cb3060f.tar.bz2 |
score: Add CPU_THREAD_LOCAL_STORAGE_VARIANT
Update #3835.
Diffstat (limited to 'cpukit/score/cpu/microblaze')
-rw-r--r-- | cpukit/score/cpu/microblaze/__tls_get_addr.c | 10 | ||||
-rw-r--r-- | cpukit/score/cpu/microblaze/cpu.c | 2 | ||||
-rw-r--r-- | cpukit/score/cpu/microblaze/include/rtems/score/cpu.h | 1 | ||||
-rw-r--r-- | cpukit/score/cpu/microblaze/include/rtems/score/cpuimpl.h | 3 |
4 files changed, 11 insertions, 5 deletions
diff --git a/cpukit/score/cpu/microblaze/__tls_get_addr.c b/cpukit/score/cpu/microblaze/__tls_get_addr.c index e779a63488..b7e7890013 100644 --- a/cpukit/score/cpu/microblaze/__tls_get_addr.c +++ b/cpukit/score/cpu/microblaze/__tls_get_addr.c @@ -46,9 +46,11 @@ void *__tls_get_addr( const TLS_Index *ti ); void *__tls_get_addr( const TLS_Index *ti ) { - const Thread_Control *executing = _Thread_Get_executing(); - void *tls_block = (char *) executing->Start.tls_area - + _TLS_Get_thread_control_block_area_size( (uintptr_t) _TLS_Alignment ); + const Thread_Control *executing; - return (char *) tls_block + ti->offset; + (void) ti; + + executing = _Thread_Get_executing(); + + return executing->Registers.thread_pointer; } diff --git a/cpukit/score/cpu/microblaze/cpu.c b/cpukit/score/cpu/microblaze/cpu.c index 1e829a4714..823825d2b1 100644 --- a/cpukit/score/cpu/microblaze/cpu.c +++ b/cpukit/score/cpu/microblaze/cpu.c @@ -73,7 +73,7 @@ void _CPU_Context_Initialize( context->rmsr = msr; if ( tls_area != NULL ) { - _TLS_TCB_at_area_begin_initialize( tls_area ); + context->thread_pointer = _TLS_Initialize_area( tls_area ); } } diff --git a/cpukit/score/cpu/microblaze/include/rtems/score/cpu.h b/cpukit/score/cpu/microblaze/include/rtems/score/cpu.h index 1325962f7c..3d865732d6 100644 --- a/cpukit/score/cpu/microblaze/include/rtems/score/cpu.h +++ b/cpukit/score/cpu/microblaze/include/rtems/score/cpu.h @@ -137,6 +137,7 @@ typedef struct { uint32_t r30; uint32_t r31; uint32_t rmsr; + void *thread_pointer; } Context_Control; /** diff --git a/cpukit/score/cpu/microblaze/include/rtems/score/cpuimpl.h b/cpukit/score/cpu/microblaze/include/rtems/score/cpuimpl.h index 0b9e06cfa8..4e315e856d 100644 --- a/cpukit/score/cpu/microblaze/include/rtems/score/cpuimpl.h +++ b/cpukit/score/cpu/microblaze/include/rtems/score/cpuimpl.h @@ -49,8 +49,11 @@ */ #define CPU_PER_CPU_CONTROL_SIZE 0 + #define CPU_INTERRUPT_FRAME_SIZE 56 +#define CPU_THREAD_LOCAL_STORAGE_VARIANT 10 + #define MICROBLAZE_INTERRUPT_FRAME_R3 0 #define MICROBLAZE_INTERRUPT_FRAME_R4 4 #define MICROBLAZE_INTERRUPT_FRAME_R5 8 |