From 9266cd66c722761d62efef1e2ac464dcb8c9f64a Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Fri, 29 Apr 2016 22:16:35 +0200 Subject: [PATCH] extended_image_info: Add text_delta field Needed to offset a symbol address read from the symbol table to the actual load address. --- headers/private/system/image_defs.h | 1 + src/system/kernel/elf.cpp | 1 + src/system/kernel/team.cpp | 1 + src/system/runtime_loader/images.cpp | 1 + 4 files changed, 4 insertions(+) diff --git a/headers/private/system/image_defs.h b/headers/private/system/image_defs.h index 49c1b1368f..4bc90fe390 100644 --- a/headers/private/system/image_defs.h +++ b/headers/private/system/image_defs.h @@ -19,6 +19,7 @@ typedef struct extended_image_info { image_info basic_info; + ssize_t text_delta; void* symbol_table; void* symbol_hash; void* string_table; diff --git a/src/system/kernel/elf.cpp b/src/system/kernel/elf.cpp index 3a2abfbd13..2221bad914 100644 --- a/src/system/kernel/elf.cpp +++ b/src/system/kernel/elf.cpp @@ -2065,6 +2065,7 @@ elf_load_user_image(const char *path, Team *team, int flags, addr_t *entry) // the runtime loader is loaded, so this is good enough for the time // being. + imageInfo.text_delta = delta; imageInfo.symbol_table = image->syms; imageInfo.symbol_hash = image->symhash; imageInfo.string_table = image->strtab; diff --git a/src/system/kernel/team.cpp b/src/system/kernel/team.cpp index 279fe98000..d1a8d3651b 100644 --- a/src/system/kernel/team.cpp +++ b/src/system/kernel/team.cpp @@ -1612,6 +1612,7 @@ team_create_thread_start_internal(void* args) return err; } imageInfo.basic_info.text = team->commpage_address; + imageInfo.text_delta = 0; imageInfo.symbol_table = NULL; imageInfo.symbol_hash = NULL; imageInfo.string_table = NULL; diff --git a/src/system/runtime_loader/images.cpp b/src/system/runtime_loader/images.cpp index 3fea3d2b59..f2678a365d 100644 --- a/src/system/runtime_loader/images.cpp +++ b/src/system/runtime_loader/images.cpp @@ -522,6 +522,7 @@ register_image(image_t* image, int fd, const char* path) info.basic_info.data_size = dataEnd - dataBase; info.basic_info.api_version = image->api_version; info.basic_info.abi = image->abi; + info.text_delta = image->regions[0].delta; info.symbol_table = image->syms; info.symbol_hash = image->symhash; info.string_table = image->strtab;