Lines Matching refs:image

106 parse_program_headers(image_t* image, char* buff, int phnum, int phentsize)
112 image->dso_tls_id = unsigned(-1);
127 image->regions[regcount].start = pheader->p_vaddr;
128 image->regions[regcount].size = pheader->p_memsz;
129 image->regions[regcount].vmstart
131 image->regions[regcount].vmsize
134 image->regions[regcount].fdstart = pheader->p_offset;
135 image->regions[regcount].fdsize = pheader->p_filesz;
136 image->regions[regcount].delta = 0;
137 image->regions[regcount].flags = 0;
140 image->regions[regcount].flags |= RFLAG_RW;
151 image->regions[regcount].start = pheader->p_vaddr;
152 image->regions[regcount].size = pheader->p_filesz;
153 image->regions[regcount].vmstart
155 image->regions[regcount].vmsize
158 image->regions[regcount].fdstart = pheader->p_offset;
159 image->regions[regcount].fdsize = pheader->p_filesz;
160 image->regions[regcount].delta = 0;
161 image->regions[regcount].flags = 0;
164 image->regions[regcount].flags |= RFLAG_RW;
172 image->regions[regcount].start = pheader->p_vaddr;
173 image->regions[regcount].size
175 image->regions[regcount].vmstart
176 = image->regions[regcount-1].vmstart
177 + image->regions[regcount-1].vmsize;
178 image->regions[regcount].vmsize
181 - image->regions[regcount-1].vmsize;
182 image->regions[regcount].fdstart = 0;
183 image->regions[regcount].fdsize = 0;
184 image->regions[regcount].delta = 0;
185 image->regions[regcount].flags = RFLAG_ANON;
188 image->regions[regcount].flags |= RFLAG_RW;
195 image->dynamic_ptr = pheader->p_vaddr;
217 image->dso_tls_id
230 image->path, pheader->p_type);
240 assert_dynamic_loadable(image_t* image)
244 if (!image->dynamic_ptr)
247 for (i = 0; i < image->num_regions; i++) {
248 if (image->dynamic_ptr >= image->regions[i].start
249 && image->dynamic_ptr
250 < image->regions[i].start + image->regions[i].size) {
260 parse_dynamic_segment(image_t* image)
266 image->symhash = 0;
267 image->syms = 0;
268 image->strtab = 0;
270 d = (elf_dyn*)image->dynamic_ptr;
277 image->num_needed += 1;
280 image->symhash
281 = (uint32*)(d[i].d_un.d_ptr + image->regions[0].delta);
284 image->strtab
285 = (char*)(d[i].d_un.d_ptr + image->regions[0].delta);
288 image->syms = (elf_sym*)
289 (d[i].d_un.d_ptr + image->regions[0].delta);
292 image->rel = (elf_rel*)
293 (d[i].d_un.d_ptr + image->regions[0].delta);
296 image->rel_len = d[i].d_un.d_val;
299 image->rela = (elf_rela*)
300 (d[i].d_un.d_ptr + image->regions[0].delta);
303 image->rela_len = d[i].d_un.d_val;
307 image->pltrel = (elf_rel*)
308 (d[i].d_un.d_ptr + image->regions[0].delta);
311 image->pltrel_len = d[i].d_un.d_val;
314 image->init_routine
315 = (d[i].d_un.d_ptr + image->regions[0].delta);
318 image->term_routine
319 = (d[i].d_un.d_ptr + image->regions[0].delta);
325 image->symbol_versions = (elf_versym*)
326 (d[i].d_un.d_ptr + image->regions[0].delta);
329 image->version_definitions = (elf_verdef*)
330 (d[i].d_un.d_ptr + image->regions[0].delta);
333 image->num_version_definitions = d[i].d_un.d_val;
336 image->needed_versions = (elf_verneed*)
337 (d[i].d_un.d_ptr + image->regions[0].delta);
340 image->num_needed_versions = d[i].d_un.d_val;
343 image->flags |= RFLAG_SYMBOLIC;
349 image->flags |= RFLAG_SYMBOLIC;
358 image->init_array = (addr_t*)
359 (d[i].d_un.d_ptr + image->regions[0].delta);
363 image->init_array_len = d[i].d_un.d_val;
367 image->preinit_array = (addr_t*)
368 (d[i].d_un.d_ptr + image->regions[0].delta);
372 image->preinit_array_len = d[i].d_un.d_val;
376 image->term_array = (addr_t*)
377 (d[i].d_un.d_ptr + image->regions[0].delta);
381 image->term_array_len = d[i].d_un.d_val;
398 if (!image->symhash || !image->syms || !image->strtab)
402 strlcpy(image->name, STRING(image, sonameOffset), sizeof(image->name));
502 image_t* image;
508 // Have we already loaded that image? Don't check for add-ons -- we always
546 // normalize the image path
551 // Test again if this image has been registered already - this time,
553 // You could end up loading an image twice with symbolic links, else.
604 image = create_image(name, path, numRegions);
605 if (image == NULL) {
611 status = parse_program_headers(image, pheaderBuffer, eheader.e_phnum,
616 if (!assert_dynamic_loadable(image)) {
618 "restriction)\n", image->path);
623 status = map_image(fd, path, image, eheader.e_type == ET_EXEC);
625 FATAL("%s: Could not map image: %s\n", image->path, strerror(status));
630 if (!parse_dynamic_segment(image)) {
631 FATAL("%s: Troubles handling dynamic section\n", image->path);
637 image->entry_point = eheader.e_entry + image->regions[0].delta;
639 analyze_image_haiku_version_and_abi(fd, image, eheader, sheaderSize,
642 // If sSearchPathSubDir is unset (meaning, this is the first image we're
647 if ((image->abi & B_HAIKU_ABI_MAJOR) == B_HAIKU_ABI_GCC_4)
651 if ((image->abi & B_HAIKU_ABI_MAJOR) == B_HAIKU_ABI_GCC_2)
656 set_abi_api_version(image->abi, image->api_version);
658 // init gcc version dependent image flags
660 if (image->abi == B_HAIKU_ABI_GCC_2_ANCIENT)
661 image->find_undefined_symbol = find_undefined_symbol_beos;
664 status = init_image_version_infos(image);
666 image->type = type;
667 register_image(image, fd, path);
668 image_event(image, IMAGE_EVENT_LOADED);
672 enqueue_loaded_image(image);
674 *_image = image;
677 B_PRIx32 ")", name, image->id, image->abi);
682 unmap_image(image);
684 delete_image_struct(image);