Пример #1
0
/*
 * @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;
}
Пример #2
0
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);
}
Пример #3
0
    *___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;
}