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:
commit
fabd0412b5
2 changed files with 7 additions and 2 deletions
|
@ -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;
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue