Author: emaste
Date: Wed May 25 20:49:19 2016
New Revision: 300696
URL: https://svnweb.freebsd.org/changeset/base/300696

Log:
  Import ELF Tool Chain snapshot at revision 3477
  
  From http://svn.code.sf.net/p/elftoolchain/code/

Modified:
  vendor/elftoolchain/dist/elfcopy/pe.c

Modified: vendor/elftoolchain/dist/elfcopy/pe.c
==============================================================================
--- vendor/elftoolchain/dist/elfcopy/pe.c       Wed May 25 20:11:26 2016        
(r300695)
+++ vendor/elftoolchain/dist/elfcopy/pe.c       Wed May 25 20:49:19 2016        
(r300696)
@@ -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, 
        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, 
                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, 
                            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, 
                }
                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)
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to