diff options
Diffstat (limited to 'compiler-rt/lib/profile')
| -rw-r--r-- | compiler-rt/lib/profile/InstrProfiling.h | 2 | ||||
| -rw-r--r-- | compiler-rt/lib/profile/InstrProfilingBuffer.c | 16 | ||||
| -rw-r--r-- | compiler-rt/lib/profile/InstrProfilingFile.c | 34 | 
3 files changed, 27 insertions, 25 deletions
diff --git a/compiler-rt/lib/profile/InstrProfiling.h b/compiler-rt/lib/profile/InstrProfiling.h index 133474b7649..dd0c9cd4e09 100644 --- a/compiler-rt/lib/profile/InstrProfiling.h +++ b/compiler-rt/lib/profile/InstrProfiling.h @@ -32,6 +32,8 @@ typedef unsigned int uint32_t;  typedef unsigned long long uint64_t;  #endif +#define PROFILE_HEADER_SIZE 7 +  typedef struct __llvm_profile_data {    const uint32_t NameSize;    const uint32_t NumCounters; diff --git a/compiler-rt/lib/profile/InstrProfilingBuffer.c b/compiler-rt/lib/profile/InstrProfilingBuffer.c index 2d91961a616..250e2214359 100644 --- a/compiler-rt/lib/profile/InstrProfilingBuffer.c +++ b/compiler-rt/lib/profile/InstrProfilingBuffer.c @@ -11,13 +11,17 @@  #include <string.h>  uint64_t __llvm_profile_get_size_for_buffer(void) { -  return sizeof(uint64_t) * 7 + +  /* Match logic in __llvm_profile_write_buffer(). */ +  return sizeof(uint64_t) * PROFILE_HEADER_SIZE +       PROFILE_RANGE_SIZE(data) * sizeof(__llvm_profile_data) +       PROFILE_RANGE_SIZE(counters) * sizeof(uint64_t) +       PROFILE_RANGE_SIZE(names) * sizeof(char);  }  int __llvm_profile_write_buffer(char *Buffer) { +  /* Match logic in __llvm_profile_get_size_for_buffer(). +   * Match logic in __llvm_profile_write_file(). +   */    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(); @@ -31,7 +35,7 @@ int __llvm_profile_write_buffer(char *Buffer) {    const uint64_t NamesSize = NamesEnd - NamesBegin;    /* Create the header. */ -  uint64_t Header[] = { +  uint64_t Header[PROFILE_HEADER_SIZE] = {      __llvm_profile_get_magic(),      __llvm_profile_get_version(),      DataSize, @@ -47,10 +51,10 @@ int __llvm_profile_write_buffer(char *Buffer) {      memcpy(Buffer, Data, Size);   \      Buffer += Size;               \    } while (0) -  UPDATE_memcpy(Header,        sizeof(Header)); -  UPDATE_memcpy(DataBegin,     DataSize     * sizeof(__llvm_profile_data)); -  UPDATE_memcpy(CountersBegin, CountersSize * sizeof(uint64_t)); -  UPDATE_memcpy(NamesBegin,    NamesSize    * sizeof(char)); +  UPDATE_memcpy(Header,  PROFILE_HEADER_SIZE * sizeof(uint64_t)); +  UPDATE_memcpy(DataBegin,     DataSize      * sizeof(__llvm_profile_data)); +  UPDATE_memcpy(CountersBegin, CountersSize  * sizeof(uint64_t)); +  UPDATE_memcpy(NamesBegin,    NamesSize     * sizeof(char));  #undef UPDATE_memcpy    return 0; diff --git a/compiler-rt/lib/profile/InstrProfilingFile.c b/compiler-rt/lib/profile/InstrProfilingFile.c index 27fa92611e6..1bd2af323b9 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 @@ static int writeFile(FILE *File) {    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; +  /* 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. */  #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); - -  /* Write the data. */ -  CHECK_fwrite(DataBegin, sizeof(__llvm_profile_data), DataSize, File); +  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;  | 

