summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cpukit/score/include/rtems/score/tls.h12
1 files changed, 9 insertions, 3 deletions
diff --git a/cpukit/score/include/rtems/score/tls.h b/cpukit/score/include/rtems/score/tls.h
index 139db7856c..51398a0a35 100644
--- a/cpukit/score/include/rtems/score/tls.h
+++ b/cpukit/score/include/rtems/score/tls.h
@@ -117,12 +117,18 @@ static inline uintptr_t _TLS_Get_allocation_size(
static inline void *_TLS_Copy_and_clear( void *tls_area )
{
- tls_area = memcpy( tls_area, _TLS_Data_begin, (size_t) _TLS_Data_size );
+ tls_area = memcpy(
+ tls_area,
+ _TLS_Data_begin,
+ (size_t) ((uintptr_t)_TLS_Data_size)
+ );
+
memset(
- (char *) tls_area + (size_t) _TLS_BSS_begin - (size_t) _TLS_Data_begin,
+ (char *) tls_area + (size_t)((intptr_t) _TLS_BSS_begin) -
+ (size_t)((intptr_t) _TLS_Data_begin),
0,
- (size_t) _TLS_BSS_size
+ ((size_t) (intptr_t)_TLS_BSS_size)
);
return tls_area;