ld: implement support for exposing ld functions to loaded executables

This commit is contained in:
2026-05-30 10:17:43 +01:00
parent ce52afe5b4
commit 08abe467ea
12 changed files with 425 additions and 59 deletions
+44
View File
@@ -0,0 +1,44 @@
#include "elf.h"
#include <magenta/config.h>
#include <stdio.h>
#include <stdlib.h>
#define LD_NAME "ld64.so"
#define LD_IMAGE_BASE_OFFSET 1024
extern char _DYNAMIC[];
extern char _ld_image_base[];
extern char _ld_image_limit[];
struct elf_image *get_self(void)
{
struct elf_image *self = malloc(sizeof *self);
memset(self, 0x0, sizeof *self);
snprintf(
self->e_leaf.l_name,
sizeof self->e_leaf.l_name,
"%s",
LD_NAME);
kern_config_get(
KERN_CFG_PAGE_SIZE,
&self->e_page_size,
sizeof self->e_page_size);
self->e_base = (virt_addr_t)_ld_image_base - LD_IMAGE_BASE_OFFSET;
self->e_length = (virt_addr_t)_ld_image_limit - self->e_base;
if (self->e_length & (self->e_page_size - 1)) {
self->e_length &= ~(self->e_page_size - 1);
self->e_length += self->e_page_size;
}
self->e_dynamic.p_type = PT_DYNAMIC;
self->e_dynamic.p_align = 8;
self->e_dynamic.p_memsz = self->e_dynamic.p_filesz = (size_t)-1;
self->e_dynamic.p_vaddr = (virt_addr_t)_DYNAMIC - self->e_base;
elf_image_parse_dynamic(self);
return self;
}