diff --git a/hermit/arch/x86/kernel/tasks.c b/hermit/arch/x86/kernel/tasks.c index 0108a7c33..2b71c04fa 100644 --- a/hermit/arch/x86/kernel/tasks.c +++ b/hermit/arch/x86/kernel/tasks.c @@ -237,6 +237,7 @@ static int load_task(load_args_t* largs) fildes_t file; task_t* curr_task = per_core(current_task); int ret = -EINVAL; + uint8_t hermit_exec = 0; if (!largs) return -EINVAL; @@ -386,6 +387,10 @@ static int load_task(load_args_t* largs) curr_task->tls_mem_size = prog_header.mem_size; curr_task->tls_file_size = prog_header.file_size; break; + case ELF_PT_NOTE: + //kprintf("Found note segment: %s\n", (char*)prog_header.virt_addr + 12); + hermit_exec |= (strcmp((char*)prog_header.virt_addr + 12, "HermitCore") == 0); + break; default: kprintf("Unknown type 0x%lx in program header\n", prog_header.type); } @@ -411,6 +416,13 @@ static int load_task(load_args_t* largs) goto Lerr; } + if (BUILTIN_EXPECT(!hermit_exec, 0)) { + kprintf("Not a valid executable!\n"); + ret = -EINVAL; + goto Lerr; + + } + offset = DEFAULT_STACK_SIZE-16; // do we have to create a TLS segement? diff --git a/hermit/usr/newlib b/hermit/usr/newlib index dbabb39f3..d19417c7d 160000 --- a/hermit/usr/newlib +++ b/hermit/usr/newlib @@ -1 +1 @@ -Subproject commit dbabb39f3d0aa730ca0bc8b735e05206f0de1d16 +Subproject commit d19417c7db857c7f16728933aa42fdd9eb7a8051