From c48ac699d925cfff9ea832fafc7ff27541d7bb3c Mon Sep 17 00:00:00 2001 From: Xiaoguang Sun Date: Thu, 30 May 2013 11:09:24 +0000 Subject: [PATCH] Add text_size and data_size to struct exec_info --- lib/libexec/exec_elf.c | 5 +++++ lib/libexec/libexec.h | 2 ++ 2 files changed, 7 insertions(+) diff --git a/lib/libexec/exec_elf.c b/lib/libexec/exec_elf.c index 06c1bfd7d..131f6deb2 100644 --- a/lib/libexec/exec_elf.c +++ b/lib/libexec/exec_elf.c @@ -228,6 +228,11 @@ int libexec_load_elf(struct exec_info *execi) if(first || startv > vaddr) startv = vaddr; first = 0; + if ((ph->p_flags & PF_X) != 0 && execi->text_size < seg_membytes) + execi->text_size = seg_membytes; + else + execi->data_size = seg_membytes; + if(try_mmap && execi->memmap(execi, vaddr, fbytes, foffset, clearend, mmap_prot) == OK) { #if ELF_DEBUG printf("libexec: mmap 0x%lx-0x%lx done, clearend 0x%x\n", diff --git a/lib/libexec/libexec.h b/lib/libexec/libexec.h index 8597e74c3..b9a8fe15f 100644 --- a/lib/libexec/libexec.h +++ b/lib/libexec/libexec.h @@ -32,6 +32,8 @@ struct exec_info { int allow_setuid; /* Allow set{u,g}id execution? */ vir_bytes stack_size; /* Desired stack size */ vir_bytes load_offset; /* Desired load offset */ + vir_bytes text_size; /* Text segment size */ + vir_bytes data_size; /* Data segment size */ off_t filesize; /* How big is the file */ /* Callback pointers for use by libexec */