InstrProf: Unify logic in two profile writers

<rdar://problem/15943240>

llvm-svn: 204500
diff --git a/compiler-rt/lib/profile/InstrProfilingFile.c b/compiler-rt/lib/profile/InstrProfilingFile.c
index 27fa926..1bd2af3 100644
--- a/compiler-rt/lib/profile/InstrProfilingFile.c
+++ b/compiler-rt/lib/profile/InstrProfilingFile.c
@@ -13,6 +13,7 @@
 #include <string.h>
 
 static int writeFile(FILE *File) {
+  /* Match logic in __llvm_profile_write_buffer(). */
   const __llvm_profile_data *DataBegin = __llvm_profile_data_begin();
   const __llvm_profile_data *DataEnd = __llvm_profile_data_end();
   const uint64_t *CountersBegin = __llvm_profile_counters_begin();
@@ -25,29 +26,24 @@
   const uint64_t CountersSize = CountersEnd - CountersBegin;
   const uint64_t NamesSize = NamesEnd - NamesBegin;
 
-  /* Get rest of header data. */
-  const uint64_t Magic = __llvm_profile_get_magic();
-  const uint64_t Version = __llvm_profile_get_version();
-  const uint64_t CountersDelta = (uint64_t)CountersBegin;
-  const uint64_t NamesDelta = (uint64_t)NamesBegin;
-
-#define CHECK_fwrite(Data, Size, Length, File) \
-  do { if (fwrite(Data, Size, Length, File) != Length) return -1; } while (0)
-
-  /* Write the header. */
-  CHECK_fwrite(&Magic,         sizeof(uint64_t), 1, File);
-  CHECK_fwrite(&Version,       sizeof(uint64_t), 1, File);
-  CHECK_fwrite(&DataSize,      sizeof(uint64_t), 1, File);
-  CHECK_fwrite(&CountersSize,  sizeof(uint64_t), 1, File);
-  CHECK_fwrite(&NamesSize,     sizeof(uint64_t), 1, File);
-  CHECK_fwrite(&CountersDelta, sizeof(uint64_t), 1, File);
-  CHECK_fwrite(&NamesDelta,    sizeof(uint64_t), 1, File);
+  /* Create the header. */
+  uint64_t Header[PROFILE_HEADER_SIZE] = {
+    __llvm_profile_get_magic(),
+    __llvm_profile_get_version(),
+    DataSize,
+    CountersSize,
+    NamesSize,
+    (uint64_t)CountersBegin,
+    (uint64_t)NamesBegin
+  };
 
   /* Write the data. */
-  CHECK_fwrite(DataBegin, sizeof(__llvm_profile_data), DataSize, File);
+#define CHECK_fwrite(Data, Size, Length, File) \
+  do { if (fwrite(Data, Size, Length, File) != Length) return -1; } while (0)
+  CHECK_fwrite(Header,        sizeof(uint64_t), PROFILE_HEADER_SIZE, File);
+  CHECK_fwrite(DataBegin,     sizeof(__llvm_profile_data), DataSize, File);
   CHECK_fwrite(CountersBegin, sizeof(uint64_t), CountersSize, File);
-  CHECK_fwrite(NamesBegin, sizeof(char), NamesSize, File);
-
+  CHECK_fwrite(NamesBegin,    sizeof(char), NamesSize, File);
 #undef CHECK_fwrite
 
    return 0;