Lines Matching full:elf
44 write_file (Elf *elf, int64_t size, int change_bo, size_t shnum) in write_file() argument
46 int class = elf->class; in write_file()
50 if (unlikely (fstat (elf->fildes, &st) != 0)) in write_file()
61 if (elf->parent == NULL in write_file()
62 && (elf->maximum_size == ~((size_t) 0) in write_file()
63 || (size_t) size > elf->maximum_size) in write_file()
64 && unlikely (ftruncate (elf->fildes, size) != 0)) in write_file()
71 if (elf->map_address == NULL && elf->cmd == ELF_C_WRITE_MMAP) in write_file()
73 elf->map_address = mmap (NULL, size, PROT_READ | PROT_WRITE, in write_file()
74 MAP_SHARED, elf->fildes, 0); in write_file()
75 if (unlikely (elf->map_address == MAP_FAILED)) in write_file()
76 elf->map_address = NULL; in write_file()
78 elf->flags |= ELF_F_MMAPPED; in write_file()
81 if (elf->map_address != NULL) in write_file()
94 if (elf->parent == NULL in write_file()
95 && (elf->maximum_size == ~((size_t) 0) in write_file()
96 || (size_t) size > elf->maximum_size)) in write_file()
98 if (unlikely (posix_fallocate (elf->fildes, 0, size) != 0)) in write_file()
106 if (elf->cmd == ELF_C_RDWR_MMAP in write_file()
107 && (size_t) size > elf->maximum_size) in write_file()
109 if (mremap (elf->map_address, elf->maximum_size, in write_file()
115 elf->maximum_size = size; in write_file()
122 ? __elf32_updatemmap (elf, change_bo, shnum) in write_file()
123 : __elf64_updatemmap (elf, change_bo, shnum)) != 0) in write_file()
131 ? __elf32_updatefile (elf, change_bo, shnum) in write_file()
132 : __elf64_updatefile (elf, change_bo, shnum)) != 0) in write_file()
139 && elf->parent == NULL in write_file()
140 && elf->maximum_size != ~((size_t) 0) in write_file()
141 && (size_t) size < elf->maximum_size in write_file()
142 && unlikely (ftruncate (elf->fildes, size) != 0)) in write_file()
154 && unlikely (fchmod (elf->fildes, st.st_mode) != 0)) in write_file()
160 if (size != -1 && elf->parent == NULL) in write_file()
161 elf->maximum_size = size; in write_file()
168 elf_update (Elf *elf, Elf_Cmd cmd) in elf_update() argument
182 if (elf == NULL) in elf_update()
185 if (elf->kind != ELF_K_ELF) in elf_update()
191 rwlock_wrlock (elf->lock); in elf_update()
193 /* Make sure we have an ELF header. */ in elf_update()
194 if (elf->state.elf.ehdr == NULL) in elf_update()
202 shnum = (elf->state.elf.scns_last->cnt == 0 in elf_update()
204 : 1 + elf->state.elf.scns_last->data[elf->state.elf.scns_last->cnt - 1].index); in elf_update()
206 /* Update the ELF descriptor. First, place the program header. It in elf_update()
207 will come right after the ELF header. The count the size of all in elf_update()
209 size = (elf->class == ELFCLASS32 in elf_update()
210 ? __elf32_updatenull_wrlock (elf, &change_bo, shnum) in elf_update()
211 : __elf64_updatenull_wrlock (elf, &change_bo, shnum)); in elf_update()
216 if (elf->cmd != ELF_C_RDWR in elf_update()
217 && elf->cmd != ELF_C_RDWR_MMAP in elf_update()
218 && elf->cmd != ELF_C_WRITE in elf_update()
219 && unlikely (elf->cmd != ELF_C_WRITE_MMAP)) in elf_update()
224 else if (unlikely (elf->fildes == -1)) in elf_update()
231 size = write_file (elf, size, change_bo, shnum); in elf_update()
235 rwlock_unlock (elf->lock); in elf_update()