diff options
| author | Kacper <kacper@mail.openlinux.dev> | 2025-12-15 18:24:54 +0100 |
|---|---|---|
| committer | Kacper <kacper@mail.openlinux.dev> | 2025-12-15 18:24:54 +0100 |
| commit | 69e6fe89fa9baafeca3e3515bb50897cd8ee7c35 (patch) | |
| tree | 489046ce167b8b20d205f87f4ae1f4b680c19b43 /lib/libc/arch/x86_64/vdso_setup.c | |
| parent | 0d5bffe9d2caadc1215c875e560c52bca5161c54 (diff) | |
Add getauxval and cleanup libc startup
Diffstat (limited to 'lib/libc/arch/x86_64/vdso_setup.c')
| -rw-r--r-- | lib/libc/arch/x86_64/vdso_setup.c | 64 |
1 files changed, 0 insertions, 64 deletions
diff --git a/lib/libc/arch/x86_64/vdso_setup.c b/lib/libc/arch/x86_64/vdso_setup.c deleted file mode 100644 index 059aa44a..00000000 --- a/lib/libc/arch/x86_64/vdso_setup.c +++ /dev/null @@ -1,64 +0,0 @@ -#include <linux/elf.h> // for Elf64_Sym, (anonymous struct)::(anonymous) -#include "stddef.h" // for NULL - -#include <string.h> // for strcmp - -struct timespec; - -int (*__vdso_clock_gettime)(int, struct timespec *) = NULL; -int (*__vdso_getcpu)(unsigned *, unsigned *, void *) = NULL; -int (*__vdso_time)(long *) = NULL; - -static __inline __attribute__((used)) void vdso_setup(Elf64_Ehdr *vdso_addr) -{ - Elf64_Phdr *phdr = - (Elf64_Phdr *)((char *)vdso_addr + vdso_addr->e_phoff); - - for (int i = 0; i < vdso_addr->e_phnum; i++) { - if (phdr[i].p_type == PT_DYNAMIC) { - Elf64_Dyn *dyn = (Elf64_Dyn *)((char *)vdso_addr + - phdr[i].p_offset); - const char *strtab = NULL; - Elf64_Sym *symtab = NULL; - for (; dyn->d_tag != DT_NULL; dyn++) { - if (dyn->d_tag == DT_STRTAB) { - strtab = (const char *)vdso_addr + - dyn->d_un.d_ptr; - } else if (dyn->d_tag == DT_SYMTAB) { - symtab = - (Elf64_Sym *)((char *)vdso_addr + - dyn->d_un.d_ptr); - } - } - - if (strtab == NULL || symtab == NULL) { - return; - } - - Elf64_Sym *sym = symtab; - while ((char *)sym < (char *)strtab) { - if (sym->st_name != 0 && sym->st_value != 0) { - const char *name = - strtab + sym->st_name; - if (strcmp(name, - "__vdso_clock_gettime") == 0) - __vdso_clock_gettime = - (void *)(vdso_addr + - sym->st_value); - else if (strcmp(name, - "__vdso_getcpu") == 0) - __vdso_getcpu = - (void *)(vdso_addr + - sym->st_value); - else if (strcmp(name, "__vdso_time") == - 0) - __vdso_time = - (void *)(vdso_addr + - sym->st_value); - } - sym = (Elf64_Sym *)((char *)sym + - sizeof(Elf64_Sym)); - } - } - } -} |
