brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.2 KiB · bc3ab28 Raw
56 lines · c
1#include <stdint.h>2#include <stdlib.h>3#include <string.h>4#include "../profile_test.h"5 6int __llvm_profile_runtime = 0;7uint64_t __llvm_profile_get_size_for_buffer(void);8int __llvm_profile_write_buffer(char *);9void __llvm_profile_reset_counters(void);10int  __llvm_profile_check_compatibility(const char *, uint64_t);11 12int g = 0;13void foo(char c) {14  if (c == '1')15    g++;16  else17    g--;18}19 20extern uint64_t libEntry(char *Buffer, uint64_t MaxSize);21 22int main(int argc, const char *argv[]) {23  const uint64_t MaxSize = 10000;24  static char ALIGNED(sizeof(uint64_t)) Buffer[MaxSize];25 26  uint64_t Size = __llvm_profile_get_size_for_buffer();27  if (Size > MaxSize)28    return 1;29 30  __llvm_profile_reset_counters();31  foo('0');32 33  if (__llvm_profile_write_buffer(Buffer))34    return 1;35 36  /* Now check compatibility. Should return 0.  */37  if (__llvm_profile_check_compatibility(Buffer, Size))38    return 1;39 40  /* Clear the buffer. */41  memset(Buffer, 0, MaxSize);42 43  /* Collect profile from shared library.  */44  Size = libEntry(Buffer, MaxSize);45 46  if (!Size)47    return 1;48 49  /* Shared library's profile should not match main executable's. */50  if (!__llvm_profile_check_compatibility(Buffer, Size))51    return 1;52 53  return 0;54}55 56