From ef593f61a261ce8f9f43c0fd6f7ee7de3dcdbe48 Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Sat, 24 Nov 2018 21:08:31 -0500 Subject: [PATCH] ELF: Ignore PT_EH_FRAME and PT_STACK. This allows Clang builds (linked with our cross binutils) to at least start runtime_loader and then try to load launch_daemon. That fails with an infinite loop somewhere... --- headers/os/kernel/elf.h | 1 + src/system/kernel/elf.cpp | 1 + src/system/runtime_loader/elf_load_image.cpp | 2 ++ 3 files changed, 4 insertions(+) diff --git a/headers/os/kernel/elf.h b/headers/os/kernel/elf.h index 45a8212a74..d4deca9c2e 100644 --- a/headers/os/kernel/elf.h +++ b/headers/os/kernel/elf.h @@ -322,6 +322,7 @@ typedef struct { #define PT_SHLIB 5 #define PT_PHDR 6 #define PT_TLS 7 +#define PT_EH_FRAME 0x6474e550 #define PT_STACK 0x6474e551 #define PT_RELRO 0x6474e552 diff --git a/src/system/kernel/elf.cpp b/src/system/kernel/elf.cpp index 6aa29c8fda..ea76f0327e 100644 --- a/src/system/kernel/elf.cpp +++ b/src/system/kernel/elf.cpp @@ -2283,6 +2283,7 @@ load_kernel_add_on(const char *path) // should check here for appropriate interpreter continue; case PT_PHDR: + case PT_STACK: // we don't use it continue; default: diff --git a/src/system/runtime_loader/elf_load_image.cpp b/src/system/runtime_loader/elf_load_image.cpp index b4cf78a786..fc0267ed26 100644 --- a/src/system/runtime_loader/elf_load_image.cpp +++ b/src/system/runtime_loader/elf_load_image.cpp @@ -75,6 +75,7 @@ count_regions(const char* imagePath, char const* buff, int phnum, int phentsize) case PT_PHDR: // we don't use it break; + case PT_EH_FRAME: case PT_RELRO: // not implemented yet, but can be ignored break; @@ -199,6 +200,7 @@ parse_program_headers(image_t* image, char* buff, int phnum, int phentsize) case PT_PHDR: // we don't use it break; + case PT_EH_FRAME: case PT_RELRO: // not implemented yet, but can be ignored break;