mirror of
https://github.com/hermitcore/libhermit.git
synced 2025-03-09 00:00:03 +01:00
remove padding in buddy_t, align TLS to 32 byte
This commit is contained in:
parent
cf0a25968f
commit
2e9b9c62a5
3 changed files with 10 additions and 10 deletions
|
@ -39,7 +39,10 @@
|
|||
#include <asm/page.h>
|
||||
#include <asm/multiboot.h>
|
||||
|
||||
#define TLS_OFFSET 0
|
||||
#define TLS_ALIGNBITS 5
|
||||
#define TLS_ALIGNSIZE (1L << TLS_ALIGNBITS)
|
||||
#define TSL_ALIGNMASK ((~0L) << TLS_ALIGNBITS)
|
||||
#define TLS_FLOOR(addr) ((((size_t)addr) + TLS_ALIGNSIZE - 1) & TSL_ALIGNMASK)
|
||||
|
||||
/*
|
||||
* Note that linker symbols are not variables, they have no memory allocated for
|
||||
|
@ -64,20 +67,20 @@ static int init_tls(void)
|
|||
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 + sizeof(size_t));
|
||||
tls_addr = kmalloc(curr_task->tls_size + TLS_ALIGNSIZE + sizeof(size_t));
|
||||
if (BUILTIN_EXPECT(!tls_addr, 0)) {
|
||||
LOG_ERROR("load_task: heap is missing!\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
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;
|
||||
memset(tls_addr, 0x00, TLS_ALIGNSIZE);
|
||||
memcpy((void*) TLS_FLOOR(tls_addr), (void*) curr_task->tls_addr, curr_task->tls_size);
|
||||
fs = (size_t) TLS_FLOOR(tls_addr) + curr_task->tls_size;
|
||||
*((size_t*)fs) = fs;
|
||||
|
||||
// set fs register to the TLS segment
|
||||
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);
|
||||
LOG_INFO("TLS of task %d on core %d starts at 0x%zx (size 0x%zx)\n", curr_task->id, CORE_ID, TLS_FLOOR(tls_addr), curr_task->tls_size);
|
||||
} else set_tls(0); // no TLS => clear fs register
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -71,8 +71,6 @@ typedef union buddy {
|
|||
uint8_t exponent;
|
||||
/// Must be equal to BUDDY_MAGIC for a valid memory block
|
||||
uint16_t magic;
|
||||
/// padding to gurantee a sizeof 32Byte
|
||||
//uint8_t padding[28];
|
||||
} prefix;
|
||||
} buddy_t;
|
||||
|
||||
|
@ -84,4 +82,3 @@ void buddy_dump(void);
|
|||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
|
2
tests.sh
2
tests.sh
|
@ -4,7 +4,7 @@
|
|||
# it is written only for internal tests via Travis CI
|
||||
|
||||
TDIR=build/local_prefix/opt/hermit/x86_64-hermit/extra
|
||||
FILES="$TDIR/tests/hello $TDIR/tests/hellof $TDIR/tests/hello++ $TDIR/tests/thr_hello $TDIR/tests/pi $TDIR/benchmarks/stream $TDIR/benchmarks/basic $TDIR/tests/signals $TDIR/tests/test-malloc $TDIR/tests/test-malloc-mt"
|
||||
FILES="$TDIR/tests/hello $TDIR/tests/hellof $TDIR/tests/hello++ $TDIR/tests/thr_hello $TDIR/tests/pi $TDIR/benchmarks/stream $TDIR/benchmarks/basic $TDIR/tests/signals $TDIR/tests/test-malloc"
|
||||
PROXY=build/local_prefix/opt/hermit/bin/proxy
|
||||
|
||||
for f in $FILES; do echo "check $f..."; HERMIT_ISLE=qemu HERMIT_CPUS=1 HERMIT_KVM=0 HERMIT_VERBOSE=1 timeout --kill-after=5m 5m $PROXY $f || exit 1; done
|
||||
|
|
Loading…
Add table
Reference in a new issue