summaryrefslogtreecommitdiffstats
path: root/compiler-rt/lib
diff options
context:
space:
mode:
Diffstat (limited to 'compiler-rt/lib')
-rw-r--r--compiler-rt/lib/profile/InstrProfiling.h12
-rw-r--r--compiler-rt/lib/profile/InstrProfilingBuffer.c20
-rw-r--r--compiler-rt/lib/profile/InstrProfilingFile.c18
3 files changed, 30 insertions, 20 deletions
diff --git a/compiler-rt/lib/profile/InstrProfiling.h b/compiler-rt/lib/profile/InstrProfiling.h
index 3778a88893e..7aac3b4c29c 100644
--- a/compiler-rt/lib/profile/InstrProfiling.h
+++ b/compiler-rt/lib/profile/InstrProfiling.h
@@ -27,7 +27,6 @@ typedef uint32_t uintptr_t;
#endif /* defined(__FreeBSD__) && defined(__i386__) */
-#define PROFILE_HEADER_SIZE 7
typedef struct __llvm_profile_data {
const uint32_t NameSize;
@@ -37,6 +36,17 @@ typedef struct __llvm_profile_data {
uint64_t *const Counters;
} __llvm_profile_data;
+typedef struct __llvm_profile_header {
+ uint64_t Magic;
+ uint64_t Version;
+ uint64_t DataSize;
+ uint64_t CountersSize;
+ uint64_t NamesSize;
+ uint64_t CountersDelta;
+ uint64_t NamesDelta;
+} __llvm_profile_header;
+
+
/*!
* \brief Get required size for profile buffer.
*/
diff --git a/compiler-rt/lib/profile/InstrProfilingBuffer.c b/compiler-rt/lib/profile/InstrProfilingBuffer.c
index 3c429c8a85e..e587932da0a 100644
--- a/compiler-rt/lib/profile/InstrProfilingBuffer.c
+++ b/compiler-rt/lib/profile/InstrProfilingBuffer.c
@@ -36,7 +36,7 @@ uint64_t __llvm_profile_get_size_for_buffer_internal(
/* Match logic in __llvm_profile_write_buffer(). */
const uint64_t NamesSize = PROFILE_RANGE_SIZE(Names) * sizeof(char);
const uint64_t Padding = sizeof(uint64_t) - NamesSize % sizeof(uint64_t);
- return sizeof(uint64_t) * PROFILE_HEADER_SIZE +
+ return sizeof(__llvm_profile_header) +
PROFILE_RANGE_SIZE(Data) * sizeof(__llvm_profile_data) +
PROFILE_RANGE_SIZE(Counters) * sizeof(uint64_t) +
NamesSize + Padding;
@@ -78,14 +78,14 @@ int __llvm_profile_write_buffer_internal(
const char Zeroes[sizeof(uint64_t)] = {0};
/* Create the header. */
- uint64_t Header[PROFILE_HEADER_SIZE];
- Header[0] = __llvm_profile_get_magic();
- Header[1] = __llvm_profile_get_version();
- Header[2] = DataSize;
- Header[3] = CountersSize;
- Header[4] = NamesSize;
- Header[5] = (uintptr_t)CountersBegin;
- Header[6] = (uintptr_t)NamesBegin;
+ __llvm_profile_header Header;
+ Header.Magic = __llvm_profile_get_magic();
+ Header.Version = __llvm_profile_get_version();
+ Header.DataSize = DataSize;
+ Header.CountersSize = CountersSize;
+ Header.NamesSize = NamesSize;
+ Header.CountersDelta = (uintptr_t)CountersBegin;
+ Header.NamesDelta = (uintptr_t)NamesBegin;
/* Write the data. */
#define UPDATE_memcpy(Data, Size) \
@@ -93,7 +93,7 @@ int __llvm_profile_write_buffer_internal(
memcpy(Buffer, Data, Size); \
Buffer += Size; \
} while (0)
- UPDATE_memcpy(Header, PROFILE_HEADER_SIZE * sizeof(uint64_t));
+ UPDATE_memcpy(&Header, sizeof(__llvm_profile_header));
UPDATE_memcpy(DataBegin, DataSize * sizeof(__llvm_profile_data));
UPDATE_memcpy(CountersBegin, CountersSize * sizeof(uint64_t));
UPDATE_memcpy(NamesBegin, NamesSize * sizeof(char));
diff --git a/compiler-rt/lib/profile/InstrProfilingFile.c b/compiler-rt/lib/profile/InstrProfilingFile.c
index 68e8c7b0787..6af835e484a 100644
--- a/compiler-rt/lib/profile/InstrProfilingFile.c
+++ b/compiler-rt/lib/profile/InstrProfilingFile.c
@@ -35,19 +35,19 @@ static int writeFile(FILE *File) {
const char Zeroes[sizeof(uint64_t)] = {0};
/* Create the header. */
- uint64_t Header[PROFILE_HEADER_SIZE];
- Header[0] = __llvm_profile_get_magic();
- Header[1] = __llvm_profile_get_version();
- Header[2] = DataSize;
- Header[3] = CountersSize;
- Header[4] = NamesSize;
- Header[5] = (uintptr_t)CountersBegin;
- Header[6] = (uintptr_t)NamesBegin;
+ __llvm_profile_header Header;
+ Header.Magic = __llvm_profile_get_magic();
+ Header.Version = __llvm_profile_get_version();
+ Header.DataSize = DataSize;
+ Header.CountersSize = CountersSize;
+ Header.NamesSize = NamesSize;
+ Header.CountersDelta = (uintptr_t)CountersBegin;
+ Header.NamesDelta = (uintptr_t)NamesBegin;
/* Write the data. */
#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(&Header, sizeof(__llvm_profile_header), 1, 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);
OpenPOWER on IntegriCloud