Changes in / [e996050:56210a7] in mainline
- Location:
- uspace
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/dltest/dltest.c
re996050 r56210a7 944 944 return 1; 945 945 946 #ifndef STATIC_EXE // FIXME: this define is not set anywhere946 #ifndef STATIC_EXE 947 947 948 948 if (!test_dlfcn_dl_get_private_fib_var()) -
uspace/lib/c/generic/elf/elf_load.c
re996050 r56210a7 60 60 rtld_t *env; 61 61 #endif 62 errno_t rc = EOK; 63 elf_finfo_t *finfo = &info->finfo; 62 errno_t rc; 64 63 65 rc = elf_load_file(file, 0, finfo);64 rc = elf_load_file(file, 0, &info->finfo); 66 65 if (rc != EOK) { 67 66 DPRINTF("Failed to load executable '%s'.\n", file_name); … … 73 72 DPRINTF("Binary is statically linked.\n"); 74 73 info->env = NULL; 75 #ifdef CONFIG_RTLD76 rc = rtld_init_static(finfo, &env);77 info->env = env;78 #endif79 74 return EOK; 80 75 } … … 82 77 DPRINTF("Binary is dynamically linked.\n"); 83 78 #ifdef CONFIG_RTLD 84 DPRINTF("- prog dynamic: %p\n", finfo->dynamic); 85 rc = rtld_prog_process(finfo, &env); 79 DPRINTF("- prog dynamic: %p\n", info->finfo.dynamic); 80 81 rc = rtld_prog_process(&info->finfo, &env); 86 82 info->env = env; 87 83 #else -
uspace/lib/c/generic/libc.c
re996050 r56210a7 96 96 97 97 #ifdef CONFIG_RTLD 98 if (__pcb == NULL) { 99 /* 100 * A binary loaded by kernel, not the loader. 101 * Noop - code loaded by kernel doesn't need RTLD. 102 */ 98 if (__pcb != NULL && __pcb->rtld_runtime != NULL) { 99 runtime_env = (rtld_t *) __pcb->rtld_runtime; 103 100 } else { 104 assert(__pcb->rtld_runtime != NULL);105 runtime_env = (rtld_t *) __pcb->rtld_runtime;101 if (rtld_init_static() != EOK) 102 abort(); 106 103 } 107 104 #endif -
uspace/lib/c/generic/rtld/module.c
re996050 r56210a7 61 61 * @return EOK on success, ENOMEM if out of memory 62 62 */ 63 errno_t module_create_static_exec( const void *elf, rtld_t *rtld)63 errno_t module_create_static_exec(rtld_t *rtld, module_t **rmodule) 64 64 { 65 65 module_t *module; … … 79 79 80 80 const elf_segment_header_t *tls = 81 elf_get_phdr( elf, PT_TLS);81 elf_get_phdr(__progsymbols.elfstart, PT_TLS); 82 82 83 83 if (tls) { 84 uintptr_t bias = elf_get_bias( elf);84 uintptr_t bias = elf_get_bias(__progsymbols.elfstart); 85 85 module->tdata = (void *) (tls->p_vaddr + bias); 86 86 module->tdata_size = tls->p_filesz; … … 95 95 96 96 list_append(&module->modules_link, &rtld->modules); 97 98 if (rmodule != NULL) 99 *rmodule = module; 97 100 return EOK; 98 101 } -
uspace/lib/c/generic/rtld/rtld.c
re996050 r56210a7 43 43 44 44 rtld_t *runtime_env; 45 static rtld_t rt_env_static; 45 46 46 47 /** Initialize the runtime linker for use in a statically-linked executable. */ 47 errno_t rtld_init_static(elf_finfo_t *finfo, rtld_t **rre) 48 { 49 rtld_t *env; 48 errno_t rtld_init_static(void) 49 { 50 50 errno_t rc; 51 51 52 env = calloc(1, sizeof(rtld_t)); 53 if (env == NULL) 54 return ENOMEM; 55 56 list_initialize(&env->modules); 57 list_initialize(&env->imodules); 58 env->program = NULL; 59 env->next_id = 1; 60 61 rc = module_create_static_exec(finfo->base, env); 52 runtime_env = &rt_env_static; 53 list_initialize(&runtime_env->modules); 54 list_initialize(&runtime_env->imodules); 55 runtime_env->program = NULL; 56 runtime_env->next_id = 1; 57 58 rc = module_create_static_exec(runtime_env, NULL); 62 59 if (rc != EOK) 63 60 return rc; 64 61 65 modules_process_tls(env); 66 67 *rre = env; 62 modules_process_tls(runtime_env); 63 68 64 return EOK; 69 65 } … … 131 127 errno_t rc = module_load_deps(prog, 0); 132 128 if (rc != EOK) { 133 free(prog);134 free(env);135 129 return rc; 136 130 } -
uspace/lib/c/generic/thread/tls.c
re996050 r56210a7 74 74 } 75 75 76 /** Get address of static TLS block - only when RTLD is not initialized*/76 /** Get address of static TLS block */ 77 77 void *tls_get(void) 78 78 { -
uspace/lib/c/include/rtld/module.h
re996050 r56210a7 41 41 #include <types/rtld/rtld.h> 42 42 43 extern errno_t module_create_static_exec( const void *, rtld_t*);43 extern errno_t module_create_static_exec(rtld_t *, module_t **); 44 44 extern void module_process_relocs(module_t *); 45 45 extern module_t *module_find(rtld_t *, const char *); -
uspace/lib/c/include/rtld/rtld.h
re996050 r56210a7 45 45 extern rtld_t *runtime_env; 46 46 47 extern errno_t rtld_init_static( elf_finfo_t *, rtld_t **);47 extern errno_t rtld_init_static(void); 48 48 extern errno_t rtld_prog_process(elf_finfo_t *, rtld_t **); 49 49 extern tcb_t *rtld_tls_make(rtld_t *); -
uspace/srv/loader/main.c
re996050 r56210a7 300 300 301 301 #ifdef CONFIG_RTLD 302 assert(prog_info.env != NULL); 303 pcb.tcb = rtld_tls_make(prog_info.env); 302 if (prog_info.env) { 303 pcb.tcb = rtld_tls_make(prog_info.env); 304 } else { 305 pcb.tcb = tls_make(prog_info.finfo.base); 306 } 304 307 #else 305 308 pcb.tcb = tls_make(prog_info.finfo.base);
Note:
See TracChangeset
for help on using the changeset viewer.