diff options
| -rw-r--r-- | compiler-rt/lib/profile/InstrProfiling.h | 12 | ||||
| -rw-r--r-- | compiler-rt/lib/profile/InstrProfilingBuffer.c | 20 | ||||
| -rw-r--r-- | compiler-rt/lib/profile/InstrProfilingFile.c | 18 |
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); |

