/* * @note Symbols with NULL values are not accounted for. */ void *dlsym(void *mod, const char *sym_name) { elf_symbol_t *sd; module_t *sm; sd = symbol_bfs_find(sym_name, (module_t *) mod, &sm); if (sd != NULL) { return symbol_get_addr(sd, sm, __tcb_get()); } return NULL; }
void exit(int status) { if (env_setup) { __stdio_done(); task_retval(status); fibril_teardown(__tcb_get()->fibril_data); } __SYSCALL1(SYS_TASK_EXIT, false); /* Unreachable */ while (1); }
*___tls_get_addr(tls_index *ti) { size_t tls_size; uint8_t *tls; /* Calculate size of TLS block */ tls_size = ALIGN_UP(&_tbss_end - &_tdata_start, &_tls_alignment); /* The TLS block is just before TCB */ tls = (uint8_t *)__tcb_get() - tls_size; return tls + ti->ti_offset; }