Changeset 91e4567 in mainline


Ignore:
Timestamp:
2016-05-06T15:21:22Z (8 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
0dc9a474
Parents:
7c4b26c
Message:

runtime_env must be set early, before calling fibril_setup.

Location:
uspace/lib/c/generic
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/generic/libc.c

    r7c4b26c r91e4567  
    6565void __main(void *pcb_ptr)
    6666{
     67        /* Save the PCB pointer */
     68        __pcb = (pcb_t *) pcb_ptr;
     69       
     70#ifdef CONFIG_RTLD
     71        if (__pcb != NULL && __pcb->rtld_runtime != NULL) {
     72                runtime_env = (rtld_t *) __pcb->rtld_runtime;
     73        }
     74#endif
    6775        /* Initialize user task run-time environment */
    6876        __malloc_init();
     
    7482        __tcb_set(fibril->tcb);
    7583       
    76         /* Save the PCB pointer */
    77         __pcb = (pcb_t *) pcb_ptr;
    7884       
    7985#ifdef FUTEX_UPGRADABLE
     
    8995        char **argv;
    9096       
    91 #ifdef CONFIG_RTLD
    92         if (__pcb != NULL && __pcb->rtld_runtime != NULL) {
    93                 runtime_env = (rtld_t *) __pcb->rtld_runtime;
    94         }
    95 #endif
    9697        /*
    9798         * Get command line arguments and initialize
  • uspace/lib/c/generic/rtld/rtld.c

    r7c4b26c r91e4567  
    151151        offset = 0;
    152152        list_foreach(rtld->modules, modules_link, module_t, m) {
     153                assert(offset + m->tdata_size + m->tbss_size <= rtld->tls_size);
    153154                memcpy(data + offset, m->tdata, m->tdata_size);
    154155                offset += m->tdata_size;
  • uspace/lib/c/generic/tls.c

    r7c4b26c r91e4567  
    4747size_t tls_get_size(void)
    4848{
     49#ifdef CONFIG_RTLD
     50        if (runtime_env != NULL)
     51                return runtime_env->tls_size;
     52#endif
    4953        return &_tbss_end - &_tdata_start;
    5054}
     
    8387void tls_free(tcb_t *tcb)
    8488{
    85         size_t tls_size = &_tbss_end - &_tdata_start;
    86 
    87 #ifdef CONFIG_RTLD
    88         if (runtime_env != NULL)
    89                 tls_size = runtime_env->tls_size;
    90 #endif
    91         tls_free_arch(tcb, tls_size);
     89        tls_free_arch(tcb, tls_get_size());
    9290}
    9391
Note: See TracChangeset for help on using the changeset viewer.