Function report |
Source Code:fs\binfmt_elf_fdpic.c |
Create Date:2022-07-28 20:29:04 |
| Last Modify:2020-03-12 14:18:49 | Copyright©Brick |
| home page | Tree |
| Annotation kernel can get tool activity | Download SCCT | Chinese |
Name:load the appropriate binary image (executable or interpreter) into memory* - we assume no MMU is available* - if no other PIC bits are set in params->hdr->e_flags* - we assume that the LOADable segments in the binary are independently relocatable* - we
Proto:static int elf_fdpic_map_file(struct elf_fdpic_params *params, struct file *file, struct mm_struct *mm, const char *what)
Type:int
Parameter:
| Type | Parameter | Name |
|---|---|---|
| struct elf_fdpic_params * | params | |
| struct file * | file | |
| struct mm_struct * | mm | |
| const char * | what |
| 745 | nloads = 0 |
| 748 | nloads++ |
| 754 | loadmap = kzalloc - allocate memory. The memory is set to zero.*@size: how many bytes of memory are required.*@flags: the type of memory to allocate (see kmalloc). |
| 761 | number of segments = nloads |
| 768 | Case & == PT_LOADs require constant* displacement |
| 769 | Case & == PT_LOADs should be contiguous |
| 776 | Default |
| 780 | Break |
| 784 | If e_entry Then |
| 787 | If e_entry >= VMA recorded in file && e_entry < VMA recorded in file + allocation size recorded in file Then |
| 792 | Break |
| 800 | phdr = copy of PT_PHDR table |
| 812 | If p_vaddr >= VMA recorded in file && p_vaddr + p_filesz <= VMA recorded in file + allocation size recorded in file Then |
| 815 | mapped PT_PHDR user address = p_vaddr - VMA recorded in file + core address to which mapped + e_phoff - p_offset |
| 819 | Break |
| 822 | Break |
| 826 | phdr = copy of PT_PHDR table |
| 828 | If p_type != PT_DYNAMIC Then Continue |
| 833 | If p_vaddr >= VMA recorded in file && p_vaddr + p_memsz <= VMA recorded in file + allocation size recorded in file Then |
| 846 | If p_memsz == 0 || p_memsz % sizeof(Elf32_Dyn) != 0 Then Go to dynamic_error |
| 853 | If d_tag != 0 Then Go to dynamic_error |
| 855 | Break |
| 858 | Break |
| 866 | nloads = number of segments |
| 872 | load_addr = align the pointer to the (next) page boundary (core address to which mapped + allocation size recorded in file ) |
| 873 | If load_addr == (core address to which mapped & PAGE_MASK) Then |
| 874 | allocation size recorded in file += load_addr - core address to which mapped + allocation size recorded in file |
| 879 | number of segments -- |
| 880 | Continue |
| 884 | mseg++ |
| 891 | kdebug("- elfhdr : %lx", mapped ELF header user address ) |
| 892 | kdebug("- entry : %lx", mapped entry user address ) |
| 893 | kdebug("- PHDR[] : %lx", mapped PT_PHDR user address ) |
| 894 | kdebug("- DYNAMIC[]: %lx", mapped PT_DYNAMIC user address ) |
| 896 | When loop < number of segments cycle kdebug("- LOAD[%d] : %08x-%08x [va=%x ms=%x]", loop, core address to which mapped , core address to which mapped + allocation size recorded in file - 1, VMA recorded in file , allocation size recorded in file ) |
| 902 | Return 0 |
| 904 | dynamic_error : |
| 907 | Return -ELIBBAD |
| Name | Describe |
|---|---|
| load_elf_fdpic_binary | load an fdpic binary into various bits of memory |
| Source code conversion tool public plug-in interface | X |
|---|---|
| Support c/c++/esqlc/java Oracle/Informix/Mysql Plug-in can realize: logical Report Code generation and batch code conversion |