Changeset bab0f42 in mainline


Ignore:
Timestamp:
2016-05-16T18:38:31Z (8 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
e2f26002
Parents:
29405ac
Message:

Make sure we only go through initial modules when constructing TLS.

Location:
uspace/lib/c
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/generic/rtld/module.c

    r29405ac rbab0f42  
    288288        list_foreach(rtld->modules, modules_link, module_t, m) {
    289289                m->ioffs = rtld->tls_size;
     290                list_append(&m->imodules_link, &rtmd->imodules);
    290291                rtld->tls_size += m->tdata_size + m->tbss_size;
    291292        }
     
    301302                offs += m->tdata_size + m->tbss_size;
    302303                m->ioffs = rtld->tls_size - offs;
     304                list_append(&m->imodules_link, &rtld->imodules);
    303305        }
    304306#endif
  • uspace/lib/c/generic/rtld/rtld.c

    r29405ac rbab0f42  
    4949        runtime_env = &rt_env_static;
    5050        list_initialize(&runtime_env->modules);
     51        list_initialize(&runtime_env->imodules);
    5152        runtime_env->next_bias = 0x2000000;
    5253        runtime_env->program = NULL;
     
    102103        /* Initialize list of loaded modules */
    103104        list_initialize(&env->modules);
     105        list_initialize(&env->imodules);
    104106        list_append(&prog->modules_link, &env->modules);
    105107
     
    156158         */
    157159        offset = 0;
    158         list_foreach(rtld->modules, modules_link, module_t, m) {
     160        list_foreach(rtld->imodules, imodules_link, module_t, m) {
    159161                assert(offset + m->tdata_size + m->tbss_size <= rtld->tls_size);
    160162                memcpy(data + offset, m->tdata, m->tdata_size);
     
    168170         */
    169171        offset = 0;
    170         list_foreach(rtld->modules, modules_link, module_t, m) {
     172        list_foreach(rtld->imodules, imodules_link, module_t, m) {
    171173                assert(offset + m->tdata_size + m->tbss_size <= rtld->tls_size);
    172174                offset += m->tbss_size;
  • uspace/lib/c/include/types/rtld/module.h

    r29405ac rbab0f42  
    7676        /** Link to list of all modules in runtime environment */
    7777        link_t modules_link;
     78        /** Link to list of initial modules */
     79        link_t imodules_link;
    7880
    7981        /** Link to BFS queue. Only used when doing a BFS of the module graph */
  • uspace/lib/c/include/types/rtld/rtld.h

    r29405ac rbab0f42  
    5757        list_t modules;
    5858
     59        /** List of initial modules */
     60        list_t imodules;
     61
    5962        /** Temporary hack to place each module at different address. */
    6063        uintptr_t next_bias;
Note: See TracChangeset for help on using the changeset viewer.