Import ELF Tool Chain snapshot at revision 3477

From http://svn.code.sf.net/p/elftoolchain/code/
This commit is contained in:
Ed Maste 2016-05-25 20:49:19 +00:00
parent a7f03fcfe7
commit e2f022b8a2

View File

@ -34,7 +34,7 @@
#include "elfcopy.h"
ELFTC_VCSID("$Id: pe.c 3312 2016-01-10 09:23:51Z kaiwang27 $");
ELFTC_VCSID("$Id: pe.c 3477 2016-05-25 20:00:42Z kaiwang27 $");
/* Convert ELF object to Portable Executable (PE). */
void
@ -54,7 +54,7 @@ create_pe(struct elfcopy *ecp, int ifd, int ofd)
PE_Buffer *pb;
const char *name;
size_t indx;
int elferr, i;
int elferr;
if (ecp->otf == ETF_EFI || ecp->oem == EM_X86_64)
po = PE_O_PE32P;
@ -175,7 +175,7 @@ create_pe(struct elfcopy *ecp, int ifd, int ofd)
psh.sh_addr = sh.sh_addr;
psh.sh_virtsize = sh.sh_size;
if (sh.sh_type != SHT_NOBITS)
psh.sh_rawsize = sh.sh_size;
psh.sh_rawsize = roundup(sh.sh_size, poh.oh_filealign);
else
psh.sh_char |= IMAGE_SCN_CNT_UNINITIALIZED_DATA;
@ -190,12 +190,6 @@ create_pe(struct elfcopy *ecp, int ifd, int ofd)
IMAGE_SCN_CNT_CODE;
if ((sh.sh_flags & SHF_ALLOC) && (psh.sh_char & 0xF0) == 0)
psh.sh_char |= IMAGE_SCN_CNT_INITIALIZED_DATA;
for (i = 0xE; i > 0; i--) {
if (sh.sh_addralign & (1U << (i - 1))) {
psh.sh_char |= i << 20;
break;
}
}
/* Mark relocation section "discardable". */
if (strcmp(name, ".reloc") == 0)
@ -213,8 +207,12 @@ create_pe(struct elfcopy *ecp, int ifd, int ofd)
}
pb->pb_align = 1;
pb->pb_off = 0;
pb->pb_size = sh.sh_size;
pb->pb_buf = d->d_buf;
pb->pb_size = roundup(sh.sh_size, poh.oh_filealign);
if ((pb->pb_buf = calloc(1, pb->pb_size)) == NULL) {
warn("calloc failed");
continue;
}
memcpy(pb->pb_buf, d->d_buf, sh.sh_size);
}
elferr = elf_errno();
if (elferr != 0)