Lines Matching refs:image

53 	static	status_t	Load(int fd, preloaded_image* image);
54 static status_t Relocate(preloaded_image* image);
55 static status_t Resolve(ImageType* image, SymType* symbol,
59 static status_t _LoadSymbolTable(int fd, ImageType* image);
60 static status_t _ParseDynamicSection(ImageType* image);
179 ImageType* image = (ImageType*)kernel_args_malloc(sizeof(ImageType));
180 if (image == NULL)
183 ssize_t length = read_pos(fd, 0, &image->elf_header, sizeof(EhdrType));
185 kernel_args_free(image);
189 const EhdrType& elfHeader = image->elf_header;
196 kernel_args_free(image);
200 image->elf_class = elfHeader.e_ident[EI_CLASS];
202 *_image = image;
216 ImageType* image = static_cast<ImageType*>(_image);
217 const EhdrType& elfHeader = image->elf_header;
234 // create an area large enough to hold the image
236 image->data_region.size = 0;
237 image->text_region.size = 0;
246 image->dynamic_section.start = header.p_vaddr;
247 image->dynamic_section.size = header.p_memsz;
265 if (image->data_region.size != 0) {
269 region = &image->data_region;
271 if (image->text_region.size != 0) {
275 region = &image->text_region;
291 if (image->data_region.size == 0 || image->text_region.size == 0) {
300 if (image->text_region.start < image->data_region.start) {
301 firstRegion = &image->text_region;
302 secondRegion = &image->data_region;
304 firstRegion = &image->data_region;
305 secondRegion = &image->text_region;
326 image->data_region.delta += image->data_region.start;
327 image->text_region.delta += image->text_region.start;
330 B_PRIx64 "\n", (uint64)image->text_region.start,
331 (uint64)image->text_region.size,
332 (int64)(AddrType)image->text_region.delta));
334 B_PRIx64 "\n", (uint64)image->data_region.start,
335 (uint64)image->data_region.size,
336 (int64)(AddrType)image->data_region.delta));
348 region = &image->data_region;
350 region = &image->text_region;
376 image->dynamic_section.start += image->text_region.delta;
377 image->elf_header.e_entry += image->text_region.delta;
379 image->num_debug_symbols = 0;
380 image->debug_symbols = NULL;
381 image->debug_string_table = NULL;
384 _LoadSymbolTable(fd, image);
395 kernel_args_free(image);
405 ImageType* image = static_cast<ImageType*>(_image);
407 status_t status = _ParseDynamicSection(image);
412 if (image->rel) {
414 (int)image->rel_len / (int)sizeof(RelType)));
416 status = boot_arch_elf_relocate_rel(image, image->rel, image->rel_len);
421 if (image->pltrel) {
422 RelType* pltrel = image->pltrel;
423 if (image->pltrel_type == DT_REL) {
425 (int)image->pltrel_len / (int)sizeof(RelType)));
427 status = boot_arch_elf_relocate_rel(image, pltrel,
428 image->pltrel_len);
431 (int)image->pltrel_len / (int)sizeof(RelaType)));
433 status = boot_arch_elf_relocate_rela(image, (RelaType*)pltrel,
434 image->pltrel_len);
440 if (image->rela) {
442 (int)image->rela_len / (int)sizeof(RelaType)));
443 status = boot_arch_elf_relocate_rela(image, image->rela,
444 image->rela_len);
454 ELFLoader<Class>::Resolve(ImageType* image, SymType* symbol,
472 *symbolAddress = symbol->st_value + image->text_region.delta;
480 ELFLoader<Class>::_LoadSymbolTable(int fd, ImageType* image)
482 const EhdrType& elfHeader = image->elf_header;
562 // insert tables into image
563 image->debug_symbols = symbolTable;
564 image->num_debug_symbols = numSymbols;
565 image->debug_string_table = stringTable;
566 image->debug_string_table_size = size;
584 ELFLoader<Class>::_ParseDynamicSection(ImageType* image)
586 image->syms = 0;
587 image->rel = 0;
588 image->rel_len = 0;
589 image->rela = 0;
590 image->rela_len = 0;
591 image->pltrel = 0;
592 image->pltrel_len = 0;
593 image->pltrel_type = 0;
595 if(image->dynamic_section.start == 0)
598 DynType* d = (DynType*)Class::Map(image->dynamic_section.start);
606 image->syms = (SymType*)Class::Map(d[i].d_un.d_ptr
607 + image->text_region.delta);
610 image->rel = (RelType*)Class::Map(d[i].d_un.d_ptr
611 + image->text_region.delta);
614 image->rel_len = d[i].d_un.d_val;
617 image->rela = (RelaType*)Class::Map(d[i].d_un.d_ptr
618 + image->text_region.delta);
621 image->rela_len = d[i].d_un.d_val;
624 image->pltrel = (RelType*)Class::Map(d[i].d_un.d_ptr
625 + image->text_region.delta);
628 image->pltrel_len = d[i].d_un.d_val;
631 image->pltrel_type = d[i].d_un.d_val;
640 if (image->syms == NULL)
697 preloaded_image* image;
711 image = gKernelArgs.preloaded_images;
712 for (; image != NULL; image = image->next) {
713 if (image->inode == stat.st_ino) {
722 status_t status = elf_load_image(fd, &image);
724 image->name = kernel_args_strdup(path);
725 image->inode = stat.st_ino;
728 image->next = gKernelArgs.preloaded_images;
729 gKernelArgs.preloaded_images = image;
731 kernel_args_free(image);
739 elf_relocate_image(preloaded_image* image)
742 if (image->elf_class == ELFCLASS64)
743 return ELF64Loader::Relocate(image);
746 if (image->elf_class == ELFCLASS32)
747 return ELF32Loader::Relocate(image);
755 boot_elf_resolve_symbol(preloaded_elf32_image* image, Elf32_Sym* symbol,
758 return ELF32Loader::Resolve(image, symbol, symbolAddress);
779 boot_elf_resolve_symbol(preloaded_elf64_image* image, Elf64_Sym* symbol,
782 return ELF64Loader::Resolve(image, symbol, symbolAddress);