mmap_handler, machine, true, 500);
 }
 
+/*
+ * We need to keep these functions global, despite the
+ * fact that they are used only locally in this object,
+ * in order to keep them around even if the binary is
+ * stripped. If they are gone, the unwind check for
+ * symbol fails.
+ */
+int test_dwarf_unwind__thread(struct thread *thread);
+int test_dwarf_unwind__compare(void *p1, void *p2);
+int test_dwarf_unwind__krava_3(struct thread *thread);
+int test_dwarf_unwind__krava_2(struct thread *thread);
+int test_dwarf_unwind__krava_1(struct thread *thread);
+
 #define MAX_STACK 8
 
 static int unwind_entry(struct unwind_entry *entry, void *arg)
        char *symbol = entry->sym ? entry->sym->name : NULL;
        static const char *funcs[MAX_STACK] = {
                "test__arch_unwind_sample",
-               "unwind_thread",
-               "compare",
+               "test_dwarf_unwind__thread",
+               "test_dwarf_unwind__compare",
                "bsearch",
-               "krava_3",
-               "krava_2",
-               "krava_1",
+               "test_dwarf_unwind__krava_3",
+               "test_dwarf_unwind__krava_2",
+               "test_dwarf_unwind__krava_1",
                "test__dwarf_unwind"
        };
        /*
        return strcmp((const char *) symbol, funcs[idx]);
 }
 
-static noinline int unwind_thread(struct thread *thread)
+noinline int test_dwarf_unwind__thread(struct thread *thread)
 {
        struct perf_sample sample;
        unsigned long cnt = 0;
 
 static int global_unwind_retval = -INT_MAX;
 
-static noinline int compare(void *p1, void *p2)
+noinline int test_dwarf_unwind__compare(void *p1, void *p2)
 {
        /* Any possible value should be 'thread' */
        struct thread *thread = *(struct thread **)p1;
                /* Call unwinder twice for both callchain orders. */
                callchain_param.order = ORDER_CALLER;
 
-               global_unwind_retval = unwind_thread(thread);
+               global_unwind_retval = test_dwarf_unwind__thread(thread);
                if (!global_unwind_retval) {
                        callchain_param.order = ORDER_CALLEE;
-                       global_unwind_retval = unwind_thread(thread);
+                       global_unwind_retval = test_dwarf_unwind__thread(thread);
                }
        }
 
        return p1 - p2;
 }
 
-static noinline int krava_3(struct thread *thread)
+noinline int test_dwarf_unwind__krava_3(struct thread *thread)
 {
        struct thread *array[2] = {thread, thread};
        void *fp = &bsearch;
                        size_t, int (*)(void *, void *));
 
        _bsearch = fp;
-       _bsearch(array, &thread, 2, sizeof(struct thread **), compare);
+       _bsearch(array, &thread, 2, sizeof(struct thread **),
+                test_dwarf_unwind__compare);
        return global_unwind_retval;
 }
 
-static noinline int krava_2(struct thread *thread)
+noinline int test_dwarf_unwind__krava_2(struct thread *thread)
 {
-       return krava_3(thread);
+       return test_dwarf_unwind__krava_3(thread);
 }
 
-static noinline int krava_1(struct thread *thread)
+noinline int test_dwarf_unwind__krava_1(struct thread *thread)
 {
-       return krava_2(thread);
+       return test_dwarf_unwind__krava_2(thread);
 }
 
 int test__dwarf_unwind(struct test *test __maybe_unused, int subtest __maybe_unused)
                goto out;
        }
 
-       err = krava_1(thread);
+       err = test_dwarf_unwind__krava_1(thread);
        thread__put(thread);
 
  out: