Lines Matching defs:pe

39 libpe_alloc_scn(PE *pe)
48 ps->ps_pe = pe;
56 PE *pe;
61 pe = ps->ps_pe;
63 STAILQ_REMOVE(&pe->pe_scn, ps, _PE_Scn, ps_next);
84 sort_sections(PE *pe)
87 if (STAILQ_EMPTY(&pe->pe_scn))
91 STAILQ_SORT(&pe->pe_scn, _PE_Scn, ps_next, cmp_scn);
95 libpe_parse_section_headers(PE *pe)
104 assert(pe->pe_ch != NULL);
106 for (i = 0; (uint16_t) i < pe->pe_ch->ch_nsec; i++) {
107 if (read(pe->pe_fd, tmp, sizeof(PE_SecHdr)) !=
109 pe->pe_flags |= LIBPE_F_BAD_SEC_HEADER;
113 if ((ps = libpe_alloc_scn(pe)) == NULL)
115 STAILQ_INSERT_TAIL(&pe->pe_scn, ps, ps_next);
116 ps->ps_ndx = ++pe->pe_nscn; /* Setion index is 1-based */
140 dd = pe->pe_dd;
142 for (i = 0; (uint32_t) i < pe->pe_dd->dd_total; i++) {
146 STAILQ_FOREACH(ps, &pe->pe_scn, ps_next) {
158 if ((ps = libpe_alloc_scn(pe)) == NULL)
160 STAILQ_INSERT_TAIL(&pe->pe_scn, ps, ps_next);
171 ch = pe->pe_ch;
173 if ((ps = libpe_alloc_scn(pe)) == NULL)
175 STAILQ_INSERT_TAIL(&pe->pe_scn, ps, ps_next);
180 pe->pe_nsym = ch->ch_nsym;
188 libpe_load_section(PE *pe, PE_Scn *ps)
195 assert(pe != NULL && ps != NULL);
207 if ((pe->pe_flags & LIBPE_F_SPECIAL_FILE) == 0) {
208 if (lseek(pe->pe_fd, (off_t) sh->sh_rawptr, SEEK_SET) < 0) {
217 if (read(pe->pe_fd, sb->sb_pb.pb_buf, sh->sh_rawsize) !=
229 if (read(pe->pe_fd, tmp, sizeof(tmp)) !=
244 if (read(pe->pe_fd, sb->sb_pb.pb_buf, sz) !=
258 libpe_load_all_sections(PE *pe)
268 if (pe->pe_dh != NULL)
269 off += pe->pe_dh->dh_lfanew + 4;
270 if (pe->pe_ch != NULL)
271 off += sizeof(PE_CoffHdr) + pe->pe_ch->ch_optsize;
273 STAILQ_FOREACH(ps, &pe->pe_scn, ps_next) {
282 if (pe->pe_flags & LIBPE_F_SPECIAL_FILE) {
292 if (read(pe->pe_fd, tmp, s) !=
302 if (libpe_load_section(pe, ps) < 0)
310 libpe_resync_sections(PE *pe, off_t off)
317 sort_sections(pe);
321 STAILQ_FOREACH(ps, &pe->pe_scn, ps_next) {
328 pe->pe_nscn = nsec;
335 if (pe->pe_ch != NULL && pe->pe_ch->ch_optsize > 0)
336 off += pe->pe_ch->ch_optsize;
338 switch (pe->pe_obj) {
355 if (pe->pe_oh != NULL && pe->pe_oh->oh_filealign > 0)
356 falign = pe->pe_oh->oh_filealign;
362 if (pe->pe_obj == PE_O_COFF)
372 pe->pe_rvamax = 0;
373 STAILQ_FOREACH(ps, &pe->pe_scn, ps_next) {
379 if (sh->sh_addr + sh->sh_virtsize > pe->pe_rvamax)
380 pe->pe_rvamax = sh->sh_addr + sh->sh_virtsize;
394 if (libpe_load_section(pe, ps) < 0)
417 libpe_write_section_headers(PE *pe, off_t off)
423 if (pe->pe_flags & LIBPE_F_BAD_SEC_HEADER || pe->pe_nscn == 0)
426 if ((pe->pe_flags & LIBPE_F_DIRTY_SEC_HEADER) == 0) {
427 off += sizeof(PE_SecHdr) * pe->pe_ch->ch_nsec;
431 STAILQ_FOREACH(ps, &pe->pe_scn, ps_next) {
436 if ((pe->pe_flags & LIBPE_F_DIRTY_SEC_HEADER) == 0 &&
454 if (write(pe->pe_fd, tmp, sizeof(PE_SecHdr)) !=
468 libpe_write_sections(PE *pe, off_t off)
473 if (pe->pe_flags & LIBPE_F_BAD_SEC_HEADER)
476 STAILQ_FOREACH(ps, &pe->pe_scn, ps_next) {
493 libpe_pad(pe, sh->sh_rawptr - off);
496 assert((pe->pe_flags & LIBPE_F_SPECIAL_FILE) == 0);
497 if (lseek(pe->pe_fd,