[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [UNIKRAFT PATCH] newlib: Add support for static dl_iterate_phdr
This will mostly allow the D runtime GC to register the static data segments to the ranges that are to be scanned for live pointers --- link.c | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/link.c b/link.c index 204713e..94f9516 100644 --- a/link.c +++ b/link.c @@ -35,11 +35,44 @@ #include <uk/essentials.h> #include <stddef.h> #include <link.h> +#include <elf.h> + +#include <stdlib.h> + +#ifdef DRUNTIME +struct DG { + void * addr; + struct dl_phdr_info* result; +}; + +extern char __bss_start[]; +extern char _end[]; +#endif int dl_iterate_phdr( int (*callback)(struct dl_phdr_info *info, size_t size, void *data), void *data) { - return 0; +#ifdef DRUNTIME + struct DG* temp = (struct DG *)data; + + temp->result->dlpi_addr = (ElfW(Addr))__bss_start; + temp->result->dlpi_phnum = 1; + temp->result->dlpi_adds = 0; + temp->result->dlpi_subs = 0; + temp->result->dlpi_name = ""; + + ElfW(Phdr) *segment_data = (ElfW(Phdr) *)malloc(sizeof(ElfW(Phdr))); + segment_data->p_type = PT_LOAD; + segment_data->p_flags = PF_W; + segment_data->p_vaddr = 0; + segment_data->p_memsz = _end - __bss_start; + + temp->result->dlpi_phdr = segment_data; + + return 1; +#else + return 0; +#endif } -- 2.17.1
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |