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
This commit is contained in:
Axel Dörfler
2004-06-08 09:56:51 +00:00
parent dc991aec9e
commit 3c20ebe8d7
+9 -7
View File
@@ -1070,12 +1070,10 @@ elf_load_user_image(const char *path, struct team *p, int flags, addr_t *entry)
char *regionAddress; char *regionAddress;
region_id id; region_id id;
sprintf(regionName, "%s_seg%d", baseName, i);
regionAddress = (char *)ROUNDOWN(pheaders[i].p_vaddr, PAGE_SIZE); regionAddress = (char *)ROUNDOWN(pheaders[i].p_vaddr, PAGE_SIZE);
if (pheaders[i].p_flags & PF_WRITE) { 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 memUpperBound = (pheaders[i].p_vaddr % PAGE_SIZE) + pheaders[i].p_memsz;
uint32 fileUpperBound = (pheaders[i].p_vaddr % PAGE_SIZE) + pheaders[i].p_filesz; 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); memUpperBound = ROUNDUP(memUpperBound, PAGE_SIZE);
fileUpperBound = ROUNDUP(fileUpperBound, PAGE_SIZE); fileUpperBound = ROUNDUP(fileUpperBound, PAGE_SIZE);
sprintf(regionName, "%s_seg%ldrw", baseName, i);
id = vm_map_file(p->_aspace_id, regionName, id = vm_map_file(p->_aspace_id, regionName,
(void **)&regionAddress, (void **)&regionAddress,
B_EXACT_ADDRESS, 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) { if (memUpperBound != fileUpperBound) {
size_t bss_size = memUpperBound - fileUpperBound; size_t bss_size = memUpperBound - fileUpperBound;
sprintf(regionName, "%s_bss%d", baseName, 'X'); sprintf(regionName, "%s_bss%d", baseName, i);
regionAddress += fileUpperBound; regionAddress += fileUpperBound;
id = create_area_etc(p, regionName, (void **)&regionAddress, id = create_area_etc(p, regionName, (void **)&regionAddress,
@@ -1126,8 +1126,10 @@ elf_load_user_image(const char *path, struct team *p, int flags, addr_t *entry)
} }
} else { } else {
/* /*
* assume rx segment * assume ro/text segment
*/ */
sprintf(regionName, "%s_seg%ldro", baseName, i);
id = vm_map_file(p->_aspace_id, regionName, id = vm_map_file(p->_aspace_id, regionName,
(void **)&regionAddress, (void **)&regionAddress,
B_EXACT_ADDRESS, B_EXACT_ADDRESS,
@@ -1270,7 +1272,7 @@ load_kernel_add_on(const char *path)
rw_segment_handled = true; rw_segment_handled = true;
image_region = 1; image_region = 1;
protection = B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA; 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)) { } else if ((pheaders[i].p_flags & (PF_PROTECTION_MASK)) == (PF_READ | PF_EXECUTE)) {
// this is the non-writable segment // this is the non-writable segment
if (ro_segment_handled) { if (ro_segment_handled) {
@@ -1284,7 +1286,7 @@ load_kernel_add_on(const char *path)
// so it has to be writeable at this point; // so it has to be writeable at this point;
// ToDo: we should change the area protection later. // ToDo: we should change the area protection later.
sprintf(region_name, "%s_ro", path); sprintf(region_name, "%s_text", path);
} else { } else {
dprintf("weird program header flags 0x%lx\n", pheaders[i].p_flags); dprintf("weird program header flags 0x%lx\n", pheaders[i].p_flags);
continue; continue;