mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-04-04 13:24:45 +00:00
tools lib traceevent: Export dynamic symbols used by traceevent plugins
Traceevent plugins need dynamic symbols exported from libtraceevent.a, otherwise a dlopen error will occur during plugins loading. This patch uses dynamic-list-file to export dynamic symbols which will be used in plugins to perf executable. The problem is covered up if feature-libpython is enabled, because PYTHON_EMBED_LDOPTS contains '-Xlinker --export-dynamic' which adds all symbols to the dynamic symbol table. So we should reproduce the problem by setting NO_LIBPYTHON=1. Before this patch: (Prepare plugins) $ ls /root/.traceevent/plugins/ plugin_sched_switch.so plugin_function.so ... $ perf record -e 'ftrace:function' ls $ perf script Warning: could not load plugin '/mnt/data/root/.traceevent/plugins/plugin_sched_switch.so' /root/.traceevent/plugins/plugin_sched_switch.so: undefined symbol: pevent_unregister_event_handler Warning: could not load plugin '/root/.traceevent/plugins/plugin_function.so' /root/.traceevent/plugins/plugin_function.so: undefined symbol: warning ... :1049 1049 [000] 9666.754487: ftrace:function: ffffffff8118bc50 <-- ffffffff8118c5b3 :1049 1049 [000] 9666.754487: ftrace:function: ffffffff818e2440 <-- ffffffff8118bc75 :1049 1049 [000] 9666.754487: ftrace:function: ffffffff8106eee0 <-- ffffffff811212e2 After this patch: $ perf record -e 'ftrace:function' ls $ perf script :1049 1049 [000] 9666.754487: ftrace:function: __set_task_comm :1049 1049 [000] 9666.754487: ftrace:function: _raw_spin_lock :1049 1049 [000] 9666.754487: ftrace:function: task_tgid_nr_ns ... Signed-off-by: He Kuang <hekuang@huawei.com> Acked-by: Jiri Olsa <jolsa@kernel.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Wang Nan <wangnan0@huawei.com> Link: http://lkml.kernel.org/r/1432819735-35040-1-git-send-email-hekuang@huawei.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
f87027b968
commit
e3d09ec812
2 changed files with 25 additions and 3 deletions
|
@ -23,6 +23,7 @@ endef
|
||||||
# Allow setting CC and AR, or setting CROSS_COMPILE as a prefix.
|
# Allow setting CC and AR, or setting CROSS_COMPILE as a prefix.
|
||||||
$(call allow-override,CC,$(CROSS_COMPILE)gcc)
|
$(call allow-override,CC,$(CROSS_COMPILE)gcc)
|
||||||
$(call allow-override,AR,$(CROSS_COMPILE)ar)
|
$(call allow-override,AR,$(CROSS_COMPILE)ar)
|
||||||
|
$(call allow-override,NM,$(CROSS_COMPILE)nm)
|
||||||
|
|
||||||
EXT = -std=gnu99
|
EXT = -std=gnu99
|
||||||
INSTALL = install
|
INSTALL = install
|
||||||
|
@ -157,8 +158,9 @@ PLUGINS_IN := $(PLUGINS:.so=-in.o)
|
||||||
|
|
||||||
TE_IN := $(OUTPUT)libtraceevent-in.o
|
TE_IN := $(OUTPUT)libtraceevent-in.o
|
||||||
LIB_FILE := $(addprefix $(OUTPUT),$(LIB_FILE))
|
LIB_FILE := $(addprefix $(OUTPUT),$(LIB_FILE))
|
||||||
|
DYNAMIC_LIST_FILE := $(OUTPUT)libtraceevent-dynamic-list
|
||||||
|
|
||||||
CMD_TARGETS = $(LIB_FILE) $(PLUGINS)
|
CMD_TARGETS = $(LIB_FILE) $(PLUGINS) $(DYNAMIC_LIST_FILE)
|
||||||
|
|
||||||
TARGETS = $(CMD_TARGETS)
|
TARGETS = $(CMD_TARGETS)
|
||||||
|
|
||||||
|
@ -175,6 +177,9 @@ $(OUTPUT)libtraceevent.so: $(TE_IN)
|
||||||
$(OUTPUT)libtraceevent.a: $(TE_IN)
|
$(OUTPUT)libtraceevent.a: $(TE_IN)
|
||||||
$(QUIET_LINK)$(RM) $@; $(AR) rcs $@ $^
|
$(QUIET_LINK)$(RM) $@; $(AR) rcs $@ $^
|
||||||
|
|
||||||
|
$(OUTPUT)libtraceevent-dynamic-list: $(PLUGINS)
|
||||||
|
$(QUIET_GEN)$(call do_generate_dynamic_list_file, $(PLUGINS), $@)
|
||||||
|
|
||||||
plugins: $(PLUGINS)
|
plugins: $(PLUGINS)
|
||||||
|
|
||||||
__plugin_obj = $(notdir $@)
|
__plugin_obj = $(notdir $@)
|
||||||
|
@ -244,6 +249,13 @@ define do_install_plugins
|
||||||
done
|
done
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
define do_generate_dynamic_list_file
|
||||||
|
(echo '{'; \
|
||||||
|
$(NM) -u -D $1 | awk 'NF>1 {print "\t"$$2";"}' | sort -u; \
|
||||||
|
echo '};'; \
|
||||||
|
) > $2
|
||||||
|
endef
|
||||||
|
|
||||||
install_lib: all_cmd install_plugins
|
install_lib: all_cmd install_plugins
|
||||||
$(call QUIET_INSTALL, $(LIB_FILE)) \
|
$(call QUIET_INSTALL, $(LIB_FILE)) \
|
||||||
$(call do_install,$(LIB_FILE),$(libdir_SQ))
|
$(call do_install,$(LIB_FILE),$(libdir_SQ))
|
||||||
|
|
|
@ -173,6 +173,9 @@ endif
|
||||||
LIBTRACEEVENT = $(TE_PATH)libtraceevent.a
|
LIBTRACEEVENT = $(TE_PATH)libtraceevent.a
|
||||||
export LIBTRACEEVENT
|
export LIBTRACEEVENT
|
||||||
|
|
||||||
|
LIBTRACEEVENT_DYNAMIC_LIST = $(TE_PATH)libtraceevent-dynamic-list
|
||||||
|
LDFLAGS += -Xlinker --dynamic-list=$(LIBTRACEEVENT_DYNAMIC_LIST)
|
||||||
|
|
||||||
LIBAPI = $(LIB_PATH)libapi.a
|
LIBAPI = $(LIB_PATH)libapi.a
|
||||||
export LIBAPI
|
export LIBAPI
|
||||||
|
|
||||||
|
@ -278,7 +281,7 @@ build := -f $(srctree)/tools/build/Makefile.build dir=. obj
|
||||||
$(PERF_IN): $(OUTPUT)PERF-VERSION-FILE $(OUTPUT)common-cmds.h FORCE
|
$(PERF_IN): $(OUTPUT)PERF-VERSION-FILE $(OUTPUT)common-cmds.h FORCE
|
||||||
$(Q)$(MAKE) $(build)=perf
|
$(Q)$(MAKE) $(build)=perf
|
||||||
|
|
||||||
$(OUTPUT)perf: $(PERFLIBS) $(PERF_IN)
|
$(OUTPUT)perf: $(PERFLIBS) $(PERF_IN) $(LIBTRACEEVENT_DYNAMIC_LIST)
|
||||||
$(QUIET_LINK)$(CC) $(CFLAGS) $(LDFLAGS) $(PERF_IN) $(LIBS) -o $@
|
$(QUIET_LINK)$(CC) $(CFLAGS) $(LDFLAGS) $(PERF_IN) $(LIBS) -o $@
|
||||||
|
|
||||||
$(GTK_IN): FORCE
|
$(GTK_IN): FORCE
|
||||||
|
@ -373,7 +376,13 @@ $(LIB_FILE): $(LIBPERF_IN)
|
||||||
LIBTRACEEVENT_FLAGS += plugin_dir=$(plugindir_SQ)
|
LIBTRACEEVENT_FLAGS += plugin_dir=$(plugindir_SQ)
|
||||||
|
|
||||||
$(LIBTRACEEVENT): FORCE
|
$(LIBTRACEEVENT): FORCE
|
||||||
$(Q)$(MAKE) -C $(TRACE_EVENT_DIR) $(LIBTRACEEVENT_FLAGS) O=$(OUTPUT) $(OUTPUT)libtraceevent.a plugins
|
$(Q)$(MAKE) -C $(TRACE_EVENT_DIR) $(LIBTRACEEVENT_FLAGS) O=$(OUTPUT) $(OUTPUT)libtraceevent.a
|
||||||
|
|
||||||
|
libtraceevent_plugins: FORCE
|
||||||
|
$(Q)$(MAKE) -C $(TRACE_EVENT_DIR) $(LIBTRACEEVENT_FLAGS) O=$(OUTPUT) plugins
|
||||||
|
|
||||||
|
$(LIBTRACEEVENT_DYNAMIC_LIST): libtraceevent_plugins
|
||||||
|
$(Q)$(MAKE) -C $(TRACE_EVENT_DIR) $(LIBTRACEEVENT_FLAGS) O=$(OUTPUT) $(OUTPUT)libtraceevent-dynamic-list
|
||||||
|
|
||||||
$(LIBTRACEEVENT)-clean:
|
$(LIBTRACEEVENT)-clean:
|
||||||
$(call QUIET_CLEAN, libtraceevent)
|
$(call QUIET_CLEAN, libtraceevent)
|
||||||
|
@ -555,4 +564,5 @@ FORCE:
|
||||||
.PHONY: all install clean config-clean strip install-gtk
|
.PHONY: all install clean config-clean strip install-gtk
|
||||||
.PHONY: shell_compatibility_test please_set_SHELL_PATH_to_a_more_modern_shell
|
.PHONY: shell_compatibility_test please_set_SHELL_PATH_to_a_more_modern_shell
|
||||||
.PHONY: $(GIT-HEAD-PHONY) TAGS tags cscope FORCE single_dep
|
.PHONY: $(GIT-HEAD-PHONY) TAGS tags cscope FORCE single_dep
|
||||||
|
.PHONY: libtraceevent_plugins
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue