diff options
Diffstat (limited to 'test/profile/Inputs/instrprof-alloc.c')
-rw-r--r-- | test/profile/Inputs/instrprof-alloc.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/test/profile/Inputs/instrprof-alloc.c b/test/profile/Inputs/instrprof-alloc.c new file mode 100644 index 0000000000000..08942371ce955 --- /dev/null +++ b/test/profile/Inputs/instrprof-alloc.c @@ -0,0 +1,41 @@ +/* This test case tests that when static allocation for value + * profiler is on, no malloc/calloc calls will be invoked by + * profile runtime library. */ +#include <stdlib.h> +__attribute__((noinline)) void foo() {} +__attribute__((noinline)) void foo2() {} +void (*FP)(); +int MainEntered = 0; +int CallocCalled = 0; +int MallocCalled = 0; + +extern void *__real_calloc(size_t s, size_t n); +extern void *__real_malloc(size_t s); + +void *__wrap_calloc(size_t s, size_t n) { + if (MainEntered) + CallocCalled = 1; + return __real_calloc(s, n); +} +void *__wrap_malloc(size_t s) { + if (MainEntered) + MallocCalled = 1; + return __real_malloc(s); +} + +void getFP(int i) { + if (i % 2) + FP = foo; + else + FP = foo2; +} + +int main() { + int i; + MainEntered = 1; + for (i = 0; i < 100; i++) { + getFP(i); + FP(); + } + return CallocCalled + MallocCalled; +} |