diff --git a/LibOS/shim/include/shim_utils.h b/LibOS/shim/include/shim_utils.h index c0e0fb3e..202ec545 100644 --- a/LibOS/shim/include/shim_utils.h +++ b/LibOS/shim/include/shim_utils.h @@ -210,9 +210,9 @@ int check_elf_object (struct shim_handle * file); int load_elf_object (struct shim_handle * file, void * addr, size_t mapped); int load_elf_interp (struct shim_handle * exec); int free_elf_interp (void); -void execute_elf_object (struct shim_handle * exec, - int * argcp, const char ** argp, - elf_auxv_t * auxp); +noreturn void execute_elf_object (struct shim_handle * exec, + int * argcp, const char ** argp, + elf_auxv_t * auxp); int remove_loaded_libraries (void); /* gdb debugging support */ diff --git a/LibOS/shim/src/elf/shim_rtld.c b/LibOS/shim/src/elf/shim_rtld.c index 3f9d08fd..62ce8563 100644 --- a/LibOS/shim/src/elf/shim_rtld.c +++ b/LibOS/shim/src/elf/shim_rtld.c @@ -1554,9 +1554,9 @@ int register_library (const char * name, unsigned long load_address) return 0; } -void execute_elf_object (struct shim_handle * exec, - int * argcp, const char ** argp, - ElfW(auxv_t) * auxp) +noreturn void execute_elf_object (struct shim_handle * exec, + int * argcp, const char ** argp, + ElfW(auxv_t) * auxp) { struct link_map * exec_map = __search_map_by_handle(exec); assert(exec_map); @@ -1611,6 +1611,8 @@ void execute_elf_object (struct shim_handle * exec, #else # error "architecture not supported" #endif + while (true) + /* nothing */; } BEGIN_CP_FUNC(library) diff --git a/LibOS/shim/src/ipc/shim_ipc_helper.c b/LibOS/shim/src/ipc/shim_ipc_helper.c index 70d306e3..115269ab 100644 --- a/LibOS/shim/src/ipc/shim_ipc_helper.c +++ b/LibOS/shim/src/ipc/shim_ipc_helper.c @@ -805,7 +805,7 @@ next: #define IPC_HELPER_STACK_SIZE (allocsize * 4) #define IPC_HELPER_LIST_INIT_SIZE 32 -static void shim_ipc_helper_end(struct shim_thread * self) +noreturn static void shim_ipc_helper_end(struct shim_thread * self) { /* Put our handle map reference */ if (self->handle_map) @@ -831,7 +831,7 @@ static void shim_ipc_helper_end(struct shim_thread * self) DkThreadExit(); } -static void __shim_ipc_helper (void * dummy) +noreturn static void __shim_ipc_helper (void * dummy) { struct shim_thread * self = get_cur_thread(); void * stack = self->stack; diff --git a/LibOS/shim/src/sys/shim_exec.c b/LibOS/shim/src/sys/shim_exec.c index 379f7976..417c1db2 100644 --- a/LibOS/shim/src/sys/shim_exec.c +++ b/LibOS/shim/src/sys/shim_exec.c @@ -73,7 +73,7 @@ struct execve_rtld_arg elf_auxv_t * new_auxp; }; -static void __shim_do_execve_rtld (struct execve_rtld_arg * __arg) +noreturn static void __shim_do_execve_rtld (struct execve_rtld_arg * __arg) { struct execve_rtld_arg arg; memcpy(&arg, __arg, sizeof(arg)); @@ -169,8 +169,7 @@ retry_dump_vmas: debug("execve: start execution\n"); execute_elf_object(cur_thread->exec, new_argcp, new_argp, new_auxp); - - return; + /* NOTREACHED */ error: debug("execve: failed %d\n", ret); diff --git a/Pal/src/db_process.c b/Pal/src/db_process.c index 3d5d2cb2..04b52b37 100644 --- a/Pal/src/db_process.c +++ b/Pal/src/db_process.c @@ -63,6 +63,8 @@ noreturn void DkProcessExit (PAL_NUM exitcode) ENTER_PAL_CALL(DkProcessExit); _DkProcessExit(exitcode); _DkRaiseFailure(PAL_ERROR_NOTKILLABLE); + while (true) + /* nothing */; LEAVE_PAL_CALL(); } diff --git a/Pal/src/db_threading.c b/Pal/src/db_threading.c index 52899947..b10cf775 100644 --- a/Pal/src/db_threading.c +++ b/Pal/src/db_threading.c @@ -81,7 +81,8 @@ noreturn void DkThreadExit (void) ENTER_PAL_CALL(DkThreadExit); _DkThreadExit(); _DkRaiseFailure(PAL_ERROR_NOTKILLABLE); - while (1) {} + while (true) + /* nothing */; LEAVE_PAL_CALL(); }