1
0
Fork 0
mirror of https://github.com/hermitcore/libhermit.git synced 2025-03-09 00:00:03 +01:00

Merge branch 'master' into devel

This commit is contained in:
Stefan Lankes 2017-02-13 00:09:36 +01:00
commit fabd0412b5
2 changed files with 7 additions and 2 deletions

View file

@ -81,6 +81,7 @@ static size_t* const self[PAGE_LEVELS] = {
(size_t *) 0xFFFFFFFFFFFFF000
};
#if 0
/** An other self-reference for page_map_copy() */
static size_t * const other[PAGE_LEVELS] = {
(size_t *) 0xFFFFFF0000000000,
@ -89,6 +90,7 @@ static size_t * const other[PAGE_LEVELS] = {
(size_t *) 0xFFFFFFFFFFFFE000
};
#endif
#endif
static uint8_t expect_zeroed_pages = 0;

View file

@ -334,11 +334,12 @@ int init_tls(void)
// do we have a thread local storage?
if (((size_t) &tls_end - (size_t) &tls_start) > 0) {
char* tls_addr = NULL;
size_t fs;
curr_task->tls_addr = (size_t) &tls_start;
curr_task->tls_size = (size_t) &tls_end - (size_t) &tls_start;
tls_addr = kmalloc(curr_task->tls_size + TLS_OFFSET);
tls_addr = kmalloc(curr_task->tls_size + TLS_OFFSET + sizeof(size_t));
if (BUILTIN_EXPECT(!tls_addr, 0)) {
LOG_ERROR("load_task: heap is missing!\n");
return -ENOMEM;
@ -346,9 +347,11 @@ int init_tls(void)
memset(tls_addr, 0x00, TLS_OFFSET);
memcpy((void*) (tls_addr+TLS_OFFSET), (void*) curr_task->tls_addr, curr_task->tls_size);
fs = (size_t) tls_addr + curr_task->tls_size + TLS_OFFSET;
*((size_t*)fs) = fs;
// set fs register to the TLS segment
set_tls((size_t) tls_addr + curr_task->tls_size + TLS_OFFSET);
set_tls(fs);
LOG_INFO("TLS of task %d on core %d starts at 0x%zx (size 0x%zx)\n", curr_task->id, CORE_ID, tls_addr + TLS_OFFSET, curr_task->tls_size);
} else set_tls(0); // no TLS => clear fs register