Since we now have a working B_BASE_ADDRESS, we don't need the "RLD_padding"
area anymore. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@10447 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -50,6 +50,8 @@
|
|||||||
#define PAGE_BASE(x) ((x) & ~(PAGE_MASK))
|
#define PAGE_BASE(x) ((x) & ~(PAGE_MASK))
|
||||||
#define TO_PAGE_SIZE(x) ((x + (PAGE_MASK)) & ~(PAGE_MASK))
|
#define TO_PAGE_SIZE(x) ((x + (PAGE_MASK)) & ~(PAGE_MASK))
|
||||||
|
|
||||||
|
#define RLD_PROGRAM_BASE 0x00200000
|
||||||
|
/* keep in sync with app ldscript */
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
RFLAG_RW = 0x0001,
|
RFLAG_RW = 0x0001,
|
||||||
@@ -563,23 +565,17 @@ map_image(int fd, char const *path, image_t *image, bool fixed)
|
|||||||
baseName, i, (image->regions[i].flags & RFLAG_RW) ? "rw" : "ro");
|
baseName, i, (image->regions[i].flags & RFLAG_RW) ? "rw" : "ro");
|
||||||
|
|
||||||
if (image->dynamic_ptr && !fixed) {
|
if (image->dynamic_ptr && !fixed) {
|
||||||
/*
|
// relocatable image... we can afford to place wherever
|
||||||
* relocatable image... we can afford to place wherever
|
|
||||||
*/
|
|
||||||
if (i == 0) {
|
if (i == 0) {
|
||||||
/*
|
// but only the first segment gets a free ride
|
||||||
* but only the first segment gets a free ride
|
loadAddress = RLD_PROGRAM_BASE;
|
||||||
*/
|
addressSpecifier = B_BASE_ADDRESS;
|
||||||
loadAddress = 0;
|
|
||||||
addressSpecifier = B_ANY_ADDRESS;
|
|
||||||
} else {
|
} else {
|
||||||
loadAddress = image->regions[i].vmstart + image->regions[i-1].delta;
|
loadAddress = image->regions[i].vmstart + image->regions[i-1].delta;
|
||||||
addressSpecifier = B_EXACT_ADDRESS;
|
addressSpecifier = B_EXACT_ADDRESS;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/*
|
// not relocatable, put it where it asks or die trying
|
||||||
* not relocatable, put it where it asks or die trying
|
|
||||||
*/
|
|
||||||
loadAddress = image->regions[i].vmstart;
|
loadAddress = image->regions[i].vmstart;
|
||||||
addressSpecifier = B_EXACT_ADDRESS;
|
addressSpecifier = B_EXACT_ADDRESS;
|
||||||
}
|
}
|
||||||
@@ -608,9 +604,7 @@ map_image(int fd, char const *path, image_t *image, bool fixed)
|
|||||||
image->regions[i].delta = loadAddress - image->regions[i].vmstart;
|
image->regions[i].delta = loadAddress - image->regions[i].vmstart;
|
||||||
image->regions[i].vmstart = loadAddress;
|
image->regions[i].vmstart = loadAddress;
|
||||||
|
|
||||||
/*
|
// handle trailer bits in data segment
|
||||||
* handle trailer bits in data segment
|
|
||||||
*/
|
|
||||||
if (image->regions[i].flags & RFLAG_RW) {
|
if (image->regions[i].flags & RFLAG_RW) {
|
||||||
addr_t startClearing;
|
addr_t startClearing;
|
||||||
addr_t toClear;
|
addr_t toClear;
|
||||||
|
|||||||
@@ -10,13 +10,10 @@
|
|||||||
|
|
||||||
|
|
||||||
#define RLD_SCRATCH_SIZE 65536
|
#define RLD_SCRATCH_SIZE 65536
|
||||||
#define RLD_PROGRAM_BASE 0x00200000 /* keep in sync with app ldscript */
|
|
||||||
|
|
||||||
|
|
||||||
static area_id rld_region;
|
static area_id rld_region;
|
||||||
static area_id rld_region_2;
|
|
||||||
static char *rld_base;
|
static char *rld_base;
|
||||||
static char *rld_base_2;
|
|
||||||
static char *rld_ptr;
|
static char *rld_ptr;
|
||||||
|
|
||||||
|
|
||||||
@@ -27,18 +24,6 @@ rldheap_init(void)
|
|||||||
(void **)&rld_base, B_ANY_ADDRESS, RLD_SCRATCH_SIZE,
|
(void **)&rld_base, B_ANY_ADDRESS, RLD_SCRATCH_SIZE,
|
||||||
B_NO_LOCK, B_READ_AREA | B_WRITE_AREA);
|
B_NO_LOCK, B_READ_AREA | B_WRITE_AREA);
|
||||||
|
|
||||||
/*
|
|
||||||
* Fill in the gap upto RLD_PROGRAM_BASE,
|
|
||||||
*
|
|
||||||
* NOTE: this will be required only untile the vm finally
|
|
||||||
* support REGION_ADDR_ANY_ABOVE and REGION_ADDR_ANY_BELOW.
|
|
||||||
* Not doing these leads to some funny troubles with some
|
|
||||||
* libraries.
|
|
||||||
*/
|
|
||||||
rld_region_2 = _kern_create_area("RLD_padding", (void **)&rld_base_2,
|
|
||||||
B_ANY_ADDRESS, RLD_PROGRAM_BASE - (uint32)(rld_base + RLD_SCRATCH_SIZE),
|
|
||||||
B_NO_LOCK, B_READ_AREA | B_WRITE_AREA);
|
|
||||||
|
|
||||||
rld_ptr = rld_base;
|
rld_ptr = rld_base;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user