]> git.eshelyaron.com Git - emacs.git/commitdiff
ROUND_UP_DST_AND_ZERO): Renamed from ROUND_UP_DST. Zeroes the
authorAndrew Innes <andrewi@gnu.org>
Sun, 31 Jan 1999 21:50:21 +0000 (21:50 +0000)
committerAndrew Innes <andrewi@gnu.org>
Sun, 31 Jan 1999 21:50:21 +0000 (21:50 +0000)
alignment slop.

(copy_executable_and_add_section): Update the
SizeOfHeaders field properly.

nt/addsection.c

index 3d86d4f0204a1e2d91f0019b55ef9edcdd80f59d..ab69ecc2e270cd609e2b9b07e18e209186a15906 100644 (file)
@@ -293,8 +293,14 @@ copy_executable_and_add_section (file_data *p_infile,
   } while (0)
 
 #define DST_TO_OFFSET()  PTR_TO_OFFSET (dst, p_outfile)
-#define ROUND_UP_DST(align) \
-  (dst = p_outfile->file_base + ROUND_UP (DST_TO_OFFSET (), (align)))
+#define ROUND_UP_DST_AND_ZERO(align)                                           \
+  do {                                                                         \
+    unsigned char *newdst = p_outfile->file_base                               \
+      + ROUND_UP (DST_TO_OFFSET (), (align));                                  \
+    /* Zero the alignment slop; it may actually initialize real data.  */      \
+    memset (dst, 0, newdst - dst);                                             \
+    dst = newdst;                                                              \
+  } while (0)
 
   /* Copy the source image sequentially, ie. section by section after
      copying the headers and section table, to simplify the process of
@@ -333,14 +339,16 @@ copy_executable_and_add_section (file_data *p_infile,
   else
     new_section_name = NULL;
 
+  /* Align the first section's raw data area, and set the header size
+     field accordingly.  */
+  ROUND_UP_DST_AND_ZERO (dst_nt_header->OptionalHeader.FileAlignment);
+  dst_nt_header->OptionalHeader.SizeOfHeaders = DST_TO_OFFSET ();
+
   for (i = 0; i < nt_header->FileHeader.NumberOfSections; i++)
     {
       char msg[100];
       sprintf (msg, "Copying raw data for %s...", section->Name);
 
-      /* Align the section's raw data area.  */
-      ROUND_UP_DST (dst_nt_header->OptionalHeader.FileAlignment);
-
       /* Update the file-relative offset for this section's raw data (if
          it has any) in case things have been relocated; we will update
          the other offsets below once we know where everything is.  */
@@ -357,13 +365,13 @@ copy_executable_and_add_section (file_data *p_infile,
        ROUND_UP (dst_section->SizeOfRawData,
                  dst_nt_header->OptionalHeader.FileAlignment);
 
+      /* Align the next section's raw data area.  */
+      ROUND_UP_DST_AND_ZERO (dst_nt_header->OptionalHeader.FileAlignment);
+
       section++;
       dst_section++;
     }
 
-  /* Pad out the final section raw data area.  */
-  ROUND_UP_DST (dst_nt_header->OptionalHeader.FileAlignment);
-
   /* Add the extra section entry (which adds no raw data).  */
   if (new_section_name != NULL)
     {