Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/arch/ia32/src/tls.c

    rd2bb25e7 r31399f3  
    11/*
    22 * Copyright (c) 2006 Ondrej Palkovsky
    3  * Copyright (c) 2016 Jiri Svoboda
    43 * All rights reserved.
    54 *
     
    4039#include <align.h>
    4140
    42 #ifdef CONFIG_RTLD
    43 #include <rtld/rtld.h>
    44 #endif
    45 
    4641tcb_t *tls_alloc_arch(void **data, size_t size)
    4742{
     
    6964    *___tls_get_addr(tls_index *ti)
    7065{
     66        size_t tls_size;
    7167        uint8_t *tls;
    7268
    73 #ifdef CONFIG_RTLD
    74         if (runtime_env != NULL) {
    75                 return rtld_tls_get_addr(runtime_env, __tcb_get(),
    76                     ti->ti_module, ti->ti_offset);
    77         }
    78 #endif
    79         /* Get address of static TLS block */
    80         tls = tls_get();
     69        /* Calculate size of TLS block */
     70        tls_size = ALIGN_UP(&_tbss_end - &_tdata_start, &_tls_alignment);
     71
     72        /* The TLS block is just before TCB */
     73        tls = (uint8_t *)__tcb_get() - tls_size;
     74
    8175        return tls + ti->ti_offset;
    8276}
Note: See TracChangeset for help on using the changeset viewer.