Improved error output.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16837 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -509,9 +509,10 @@ remap_images(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static bool
|
static status_t
|
||||||
map_image(int fd, char const *path, image_t *image, bool fixed)
|
map_image(int fd, char const *path, image_t *image, bool fixed)
|
||||||
{
|
{
|
||||||
|
status_t status = B_OK;
|
||||||
const char *baseName;
|
const char *baseName;
|
||||||
uint32 i;
|
uint32 i;
|
||||||
|
|
||||||
@@ -559,8 +560,10 @@ map_image(int fd, char const *path, image_t *image, bool fixed)
|
|||||||
addressSpecifier, image->regions[i].vmsize, B_NO_LOCK,
|
addressSpecifier, image->regions[i].vmsize, B_NO_LOCK,
|
||||||
B_READ_AREA | B_WRITE_AREA);
|
B_READ_AREA | B_WRITE_AREA);
|
||||||
|
|
||||||
if (image->regions[i].id < 0)
|
if (image->regions[i].id < 0) {
|
||||||
|
status = image->regions[i].id;
|
||||||
goto error;
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
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;
|
||||||
@@ -569,8 +572,10 @@ map_image(int fd, char const *path, image_t *image, bool fixed)
|
|||||||
addressSpecifier, image->regions[i].vmsize, B_READ_AREA | B_WRITE_AREA,
|
addressSpecifier, image->regions[i].vmsize, B_READ_AREA | B_WRITE_AREA,
|
||||||
REGION_PRIVATE_MAP, path, PAGE_BASE(image->regions[i].fdstart));
|
REGION_PRIVATE_MAP, path, PAGE_BASE(image->regions[i].fdstart));
|
||||||
|
|
||||||
if (image->regions[i].id < 0)
|
if (image->regions[i].id < 0) {
|
||||||
|
status = image->regions[i].id;
|
||||||
goto error;
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
TRACE(("\"%s\" at %p, 0x%lx bytes (%s)\n", path,
|
TRACE(("\"%s\" at %p, 0x%lx bytes (%s)\n", path,
|
||||||
(void *)loadAddress, image->regions[i].vmsize,
|
(void *)loadAddress, image->regions[i].vmsize,
|
||||||
@@ -600,10 +605,10 @@ map_image(int fd, char const *path, image_t *image, bool fixed)
|
|||||||
if (image->dynamic_ptr)
|
if (image->dynamic_ptr)
|
||||||
image->dynamic_ptr += image->regions[0].delta;
|
image->dynamic_ptr += image->regions[0].delta;
|
||||||
|
|
||||||
return true;
|
return B_OK;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
return false;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -916,28 +921,28 @@ load_container(char const *name, image_type type, const char *rpath, image_t **_
|
|||||||
|
|
||||||
// ToDo: what to do about this restriction??
|
// ToDo: what to do about this restriction??
|
||||||
if (pheaderSize > (int)sizeof(ph_buff)) {
|
if (pheaderSize > (int)sizeof(ph_buff)) {
|
||||||
FATAL("cannot handle Program headers bigger than %lu\n", sizeof(ph_buff));
|
FATAL("Cannot handle program headers bigger than %lu\n", sizeof(ph_buff));
|
||||||
status = B_UNSUPPORTED;
|
status = B_UNSUPPORTED;
|
||||||
goto err1;
|
goto err1;
|
||||||
}
|
}
|
||||||
|
|
||||||
length = _kern_read(fd, eheader.e_phoff, ph_buff, pheaderSize);
|
length = _kern_read(fd, eheader.e_phoff, ph_buff, pheaderSize);
|
||||||
if (length != pheaderSize) {
|
if (length != pheaderSize) {
|
||||||
FATAL("troubles reading Program headers\n");
|
FATAL("Could not read program headers: %s\n", strerror(length));
|
||||||
status = B_BAD_DATA;
|
status = B_BAD_DATA;
|
||||||
goto err1;
|
goto err1;
|
||||||
}
|
}
|
||||||
|
|
||||||
numRegions = count_regions(ph_buff, eheader.e_phnum, eheader.e_phentsize);
|
numRegions = count_regions(ph_buff, eheader.e_phnum, eheader.e_phentsize);
|
||||||
if (numRegions <= 0) {
|
if (numRegions <= 0) {
|
||||||
FATAL("troubles parsing Program headers, numRegions = %ld\n", numRegions);
|
FATAL("Troubles parsing Program headers, numRegions = %ld\n", numRegions);
|
||||||
status = B_BAD_DATA;
|
status = B_BAD_DATA;
|
||||||
goto err1;
|
goto err1;
|
||||||
}
|
}
|
||||||
|
|
||||||
image = create_image(name, path, numRegions);
|
image = create_image(name, path, numRegions);
|
||||||
if (image == NULL) {
|
if (image == NULL) {
|
||||||
FATAL("failed to allocate image_t object\n");
|
FATAL("Failed to allocate image_t object\n");
|
||||||
status = B_NO_MEMORY;
|
status = B_NO_MEMORY;
|
||||||
goto err1;
|
goto err1;
|
||||||
}
|
}
|
||||||
@@ -947,19 +952,20 @@ load_container(char const *name, image_type type, const char *rpath, image_t **_
|
|||||||
goto err2;
|
goto err2;
|
||||||
|
|
||||||
if (!assert_dynamic_loadable(image)) {
|
if (!assert_dynamic_loadable(image)) {
|
||||||
FATAL("dynamic segment must be loadable (implementation restriction)\n");
|
FATAL("Dynamic segment must be loadable (implementation restriction)\n");
|
||||||
status = B_UNSUPPORTED;
|
status = B_UNSUPPORTED;
|
||||||
goto err2;
|
goto err2;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!map_image(fd, path, image, type == B_APP_IMAGE)) {
|
status = map_image(fd, path, image, type == B_APP_IMAGE);
|
||||||
FATAL("troubles reading image\n");
|
if (status < B_OK) {
|
||||||
|
FATAL("Could not map image: %s\n", strerror(status));
|
||||||
status = B_ERROR;
|
status = B_ERROR;
|
||||||
goto err2;
|
goto err2;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!parse_dynamic_segment(image)) {
|
if (!parse_dynamic_segment(image)) {
|
||||||
FATAL("troubles handling dynamic section\n");
|
FATAL("Troubles handling dynamic section\n");
|
||||||
status = B_BAD_DATA;
|
status = B_BAD_DATA;
|
||||||
goto err3;
|
goto err3;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user