Userland segments are now called _seg0rw/_seg0ro.

Replaced "addr" with "addr_t".
Made segment naming safe (could the buffer could overflow).


git-svn-id: file:///srv/svn/repos/haiku/trunk/current@7852 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler 2004-06-08 10:01:24 +00:00
parent 3c20ebe8d7
commit 618253640c

View File

@ -57,12 +57,12 @@ enum {
typedef
struct elf_region_t {
region_id id;
addr start;
addr size;
addr vmstart;
addr vmsize;
addr fdstart;
addr fdsize;
addr_t start;
addr_t size;
addr_t vmstart;
addr_t vmsize;
addr_t fdstart;
addr_t fdsize;
long delta;
uint32 flags;
} elf_region_t;
@ -79,10 +79,10 @@ typedef struct image_t {
int32 ref_count;
uint32 flags;
addr entry_point;
addr init_routine;
addr term_routine;
addr dynamic_ptr; // pointer to the dynamic section
addr_t entry_point;
addr_t init_routine;
addr_t term_routine;
addr_t dynamic_ptr; // pointer to the dynamic section
// pointer to symbol participation data structures
uint32 *symhash;
@ -492,8 +492,8 @@ map_image(int fd, char const *path, image_t *image, bool fixed)
(void)(fd);
for (i = 0; i < image->num_regions; i++) {
char region_name[256];
addr load_address;
char regionName[B_OS_NAME_LENGTH];
addr_t load_address;
unsigned addr_specifier;
// for BeOS compatibility: if we load an old BeOS executable, we
@ -502,8 +502,8 @@ map_image(int fd, char const *path, image_t *image, bool fixed)
if (fixed && image->regions[i].vmstart == 0)
fixed = false;
sprintf(region_name, "%s:seg_%d(%s)",
path, i, (image->regions[i].flags & RFLAG_RW) ? "RW" : "RO");
snprintf(regionName, sizeof(regionName), "%s_seg%d%s",
path, i, (image->regions[i].flags & RFLAG_RW) ? "rw" : "ro");
if (image->dynamic_ptr && !fixed) {
/*
@ -528,7 +528,7 @@ map_image(int fd, char const *path, image_t *image, bool fixed)
}
if (image->regions[i].flags & RFLAG_ANON) {
image->regions[i].id = _kern_create_area(region_name, (void **)&load_address,
image->regions[i].id = _kern_create_area(regionName, (void **)&load_address,
addr_specifier, image->regions[i].vmsize, B_NO_LOCK,
B_READ_AREA | B_WRITE_AREA);
@ -538,14 +538,9 @@ map_image(int fd, char const *path, image_t *image, bool fixed)
image->regions[i].delta = load_address - image->regions[i].vmstart;
image->regions[i].vmstart = load_address;
} else {
image->regions[i].id = sys_vm_map_file(
region_name,
(void **)&load_address,
addr_specifier,
image->regions[i].vmsize,
B_READ_AREA | B_WRITE_AREA,
REGION_PRIVATE_MAP,
path,
image->regions[i].id = sys_vm_map_file(regionName, (void **)&load_address,
addr_specifier, image->regions[i].vmsize, B_READ_AREA | B_WRITE_AREA,
REGION_PRIVATE_MAP, path,
_ROUNDOWN(image->regions[i].fdstart, B_PAGE_SIZE));
if (image->regions[i].id < 0)
@ -717,7 +712,7 @@ find_symbol_in_loaded_images(image_t **_image, const char *name)
static int
resolve_symbol(image_t *image, struct Elf32_Sym *sym, addr *sym_addr)
resolve_symbol(image_t *image, struct Elf32_Sym *sym, addr_t *sym_addr)
{
struct Elf32_Sym *sym2;
char *symname;
@ -862,7 +857,7 @@ static void
load_dependencies(image_t *image)
{
struct Elf32_Dyn *d = (struct Elf32_Dyn *)image->dynamic_ptr;
addr needed_offset;
addr_t needed_offset;
char path[256];
uint32 i, j;
@ -936,7 +931,7 @@ init_dependencies(image_t *image, bool initHead)
}
for (i = 0; i < slot; i++) {
addr _initf = initList[i]->init_routine;
addr_t _initf = initList[i]->init_routine;
libinit_f *initf = (libinit_f *)(_initf);
if (initf)