From fedf1b5ef3510261aa23e6c3e3986e2f7698aa57 Mon Sep 17 00:00:00 2001 From: veclavtalica Date: Wed, 29 Jan 2025 01:24:10 +0300 Subject: [PATCH] remove twn_elf --- CMakeLists.txt | 1 - src/system/linux/twn_elf.c | 93 -------------------------------------- src/system/linux/twn_elf.h | 10 ---- 3 files changed, 104 deletions(-) delete mode 100644 src/system/linux/twn_elf.c delete mode 100644 src/system/linux/twn_elf.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 2ea59fa..79d9970 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -67,7 +67,6 @@ add_subdirectory(third-party/libxm ${CMAKE_CURRENT_BINARY_DIR}/third-party/libxm if(LINUX) set(SYSTEM_SOURCE_FILES - src/system/linux/twn_elf.c src/system/linux/twn_timer.c $<$:src/game_object/twn_linux_game_object.c>) elseif(WIN32) diff --git a/src/system/linux/twn_elf.c b/src/system/linux/twn_elf.c deleted file mode 100644 index d64eaed..0000000 --- a/src/system/linux/twn_elf.c +++ /dev/null @@ -1,93 +0,0 @@ -#include "twn_elf.h" -#include "twn_game_object_c.h" -#include "twn_engine_context_c.h" - -#include -#include -#include -#include -#include -#include - -#include - -#include -#include -#include -#include - -bool infer_elf_section_bounds(const char *const restrict name, - const char **restrict vm_start, - const char **restrict vm_end) -{ - bool result = false; - char buf[PATH_MAX]; - bool from_shared_object; - Dl_info info; - - if (!dladdr(game_object_get_game_tick_address(), &info)) { - /* statically linked */ - from_shared_object = false; - ssize_t l = readlink("/proc/self/exe", buf, PATH_MAX); - if (l == -1) - goto ERR_CANT_READLINK; - buf[l] = 0; /* readlink() doesn't write a terminator */ - } else { - /* dynamically linked */ - from_shared_object = true; - if (SDL_snprintf(buf, sizeof buf, "%s%s", ctx.base_dir, "libgame.so") < 0) - goto ERR_CANT_APPEND_BASE_PATH; - } - - int elf = open(buf, O_RDONLY); - if (elf == -1) - goto ERR_CANT_OPEN_SELF; - - /* elf header */ - Elf64_Ehdr ehdr; - read(elf, &ehdr, sizeof ehdr); - if (ehdr.e_ident[EI_MAG0] != ELFMAG0 || - ehdr.e_ident[EI_MAG1] != ELFMAG1 || - ehdr.e_ident[EI_MAG2] != ELFMAG2 || - ehdr.e_ident[EI_MAG3] != ELFMAG3) - goto ERR_NOT_ELF; - - /* section header string table */ - Elf64_Shdr shstrdr; - lseek(elf, ehdr.e_shoff + ehdr.e_shstrndx * sizeof (Elf64_Shdr), SEEK_SET); - read(elf, &shstrdr, sizeof shstrdr); - char *sh = malloc(shstrdr.sh_size); - lseek(elf, shstrdr.sh_offset, SEEK_SET); - read(elf, sh, shstrdr.sh_size); - - /* walk sections searching for needed name */ - lseek(elf, ehdr.e_shoff, SEEK_SET); - for (size_t s = 0; s < ehdr.e_shnum; ++s) { - Elf64_Shdr shdr; - read(elf, &shdr, sizeof shdr); - - if (strcmp(&sh[shdr.sh_name], name) == 0) { - result = true; - - if (!from_shared_object) { - *vm_start = getauxval(AT_ENTRY) - ehdr.e_entry + (char *)shdr.sh_addr; - *vm_end = getauxval(AT_ENTRY) - ehdr.e_entry + (char *)shdr.sh_addr + shdr.sh_size; - } else { - *vm_start = (uintptr_t)info.dli_fbase + (char *)shdr.sh_addr; - *vm_end = (uintptr_t)info.dli_fbase + (char *)shdr.sh_addr + shdr.sh_size; - } - - break; - } - } - - free(sh); - -ERR_NOT_ELF: - close(elf); - -ERR_CANT_OPEN_SELF: -ERR_CANT_APPEND_BASE_PATH: -ERR_CANT_READLINK: - return result; -} diff --git a/src/system/linux/twn_elf.h b/src/system/linux/twn_elf.h deleted file mode 100644 index 68599c1..0000000 --- a/src/system/linux/twn_elf.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef TWN_ELF_H -#define TWN_ELF_H - -#include - -bool infer_elf_section_bounds(const char *restrict name, - const char **restrict vm_start, - const char **restrict vm_end); - -#endif