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