summaryrefslogtreecommitdiff
path: root/test/profile/Inputs/instrprof-alloc.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/profile/Inputs/instrprof-alloc.c')
-rw-r--r--test/profile/Inputs/instrprof-alloc.c41
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;
+}