From 3c20ebe8d7cd1b5902374f5fe51b02433ffa2489 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Tue, 8 Jun 2004 09:56:51 +0000 Subject: [PATCH] Unified kernel loader area names (they now use "_text", and "_data" suffixes only). Userland segments are now called _seg0rw/_seg0ro. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@7851 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kernel/core/elf.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/kernel/core/elf.c b/src/kernel/core/elf.c index 4254debe65..9c53ffa645 100644 --- a/src/kernel/core/elf.c +++ b/src/kernel/core/elf.c @@ -1070,12 +1070,10 @@ elf_load_user_image(const char *path, struct team *p, int flags, addr_t *entry) char *regionAddress; region_id id; - sprintf(regionName, "%s_seg%d", baseName, i); - regionAddress = (char *)ROUNDOWN(pheaders[i].p_vaddr, PAGE_SIZE); if (pheaders[i].p_flags & PF_WRITE) { /* - * rw segment + * rw/data segment */ uint32 memUpperBound = (pheaders[i].p_vaddr % PAGE_SIZE) + pheaders[i].p_memsz; uint32 fileUpperBound = (pheaders[i].p_vaddr % PAGE_SIZE) + pheaders[i].p_filesz; @@ -1083,6 +1081,8 @@ elf_load_user_image(const char *path, struct team *p, int flags, addr_t *entry) memUpperBound = ROUNDUP(memUpperBound, PAGE_SIZE); fileUpperBound = ROUNDUP(fileUpperBound, PAGE_SIZE); + sprintf(regionName, "%s_seg%ldrw", baseName, i); + id = vm_map_file(p->_aspace_id, regionName, (void **)®ionAddress, B_EXACT_ADDRESS, @@ -1113,7 +1113,7 @@ elf_load_user_image(const char *path, struct team *p, int flags, addr_t *entry) if (memUpperBound != fileUpperBound) { size_t bss_size = memUpperBound - fileUpperBound; - sprintf(regionName, "%s_bss%d", baseName, 'X'); + sprintf(regionName, "%s_bss%d", baseName, i); regionAddress += fileUpperBound; id = create_area_etc(p, regionName, (void **)®ionAddress, @@ -1126,8 +1126,10 @@ elf_load_user_image(const char *path, struct team *p, int flags, addr_t *entry) } } else { /* - * assume rx segment + * assume ro/text segment */ + sprintf(regionName, "%s_seg%ldro", baseName, i); + id = vm_map_file(p->_aspace_id, regionName, (void **)®ionAddress, B_EXACT_ADDRESS, @@ -1270,7 +1272,7 @@ load_kernel_add_on(const char *path) rw_segment_handled = true; image_region = 1; protection = B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA; - sprintf(region_name, "%s_rw", path); + sprintf(region_name, "%s_data", path); } else if ((pheaders[i].p_flags & (PF_PROTECTION_MASK)) == (PF_READ | PF_EXECUTE)) { // this is the non-writable segment if (ro_segment_handled) { @@ -1284,7 +1286,7 @@ load_kernel_add_on(const char *path) // so it has to be writeable at this point; // ToDo: we should change the area protection later. - sprintf(region_name, "%s_ro", path); + sprintf(region_name, "%s_text", path); } else { dprintf("weird program header flags 0x%lx\n", pheaders[i].p_flags); continue;