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:
@@ -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 **)®ionAddress,
|
(void **)®ionAddress,
|
||||||
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 **)®ionAddress,
|
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 {
|
} 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 **)®ionAddress,
|
(void **)®ionAddress,
|
||||||
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;
|
||||||
|
|||||||
Reference in New Issue
Block a user