Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 405ffbd4 authored by Jean Pihet's avatar Jean Pihet Committed by Will Deacon
Browse files

perf tools: Check libunwind for availability of dwarf parsing feature

The newly added dwarf unwinding feature [1] requires:
. a recent version (>= 1.1) of libunwind,
. libunwind to be configured with --enable-debug-frame.

[1] http://www.spinics.net/lists/kernel/msg1598951.html



Add the corresponding API tests in the feature check list.

Acked-by: default avatarJiri Olsa <jolsa@redhat.com>
Signed-off-by: default avatarJean Pihet <jean.pihet@linaro.org>
Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
parent 7495f374
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -226,9 +226,13 @@ endif

FLAGS_UNWIND=$(LIBUNWIND_CFLAGS) $(CFLAGS) $(LIBUNWIND_LDFLAGS) $(LDFLAGS) $(EXTLIBS) $(LIBUNWIND_LIBS)
ifneq ($(call try-cc,$(SOURCE_LIBUNWIND),$(FLAGS_UNWIND),libunwind),y)
  msg := $(warning No libunwind found, disabling post unwind support. Please install libunwind-dev[el] >= 0.99);
  msg := $(warning No libunwind found, disabling post unwind support. Please install libunwind-dev[el] >= 1.1);
  NO_LIBUNWIND := 1
endif # Libunwind support
ifneq ($(call try-cc,$(SOURCE_LIBUNWIND_DEBUG_FRAME),$(FLAGS_UNWIND),libunwind debug_frame),y)
  msg := $(warning No debug_frame support found in libunwind);
CFLAGS += -DNO_LIBUNWIND_DEBUG_FRAME
endif # debug_frame support in libunwind
endif # NO_LIBUNWIND

ifndef NO_LIBUNWIND
+20 −1
Original line number Diff line number Diff line
@@ -185,7 +185,6 @@ extern int UNW_OBJ(dwarf_search_unwind_table) (unw_addr_space_t as,
                                      unw_proc_info_t *pi,
                                      int need_unwind_info, void *arg);


#define dwarf_search_unwind_table UNW_OBJ(dwarf_search_unwind_table)

int main(void)
@@ -197,6 +196,26 @@ int main(void)
	return 0;
}
endef

define SOURCE_LIBUNWIND_DEBUG_FRAME
#include <libunwind.h>
#include <stdlib.h>

extern int
UNW_OBJ(dwarf_find_debug_frame) (int found, unw_dyn_info_t *di_debug,
				 unw_word_t ip, unw_word_t segbase,
				 const char *obj_name, unw_word_t start,
				 unw_word_t end);

#define dwarf_find_debug_frame UNW_OBJ(dwarf_find_debug_frame)

int main(void)
{
	dwarf_find_debug_frame(0, NULL, 0, 0, NULL, 0, 0);
	return 0;
}
endef

endif

ifndef NO_BACKTRACE