All of lore.kernel.org
 help / color / mirror / Atom feed
From: He Kuang <hekuang@huawei.com>
To: <acme@kernel.org>, <jolsa@kernel.org>, <mingo@redhat.com>,
	<a.p.zijlstra@chello.nl>, Namhyung Kim <namhyung@kernel.org>,
	Steven Rostedt <rostedt@goodmis.org>
Cc: <wangnan0@huawei.com>, <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH RESEND 1/2] tools lib traceevent: Export dynamic symbols used by traceevent plugins
Date: Fri, 5 Jun 2015 19:39:26 +0800	[thread overview]
Message-ID: <55718A6E.2060104@huawei.com> (raw)
In-Reply-To: <1432819735-35040-1-git-send-email-hekuang@huawei.com>

hi, Arnaldo

ping..

On 2015/5/28 21:28, He Kuang wrote:
> 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>
> ---
>   tools/lib/traceevent/Makefile | 14 +++++++++++++-
>   tools/perf/Makefile.perf      | 14 ++++++++++++--
>   2 files changed, 25 insertions(+), 3 deletions(-)
>
> diff --git a/tools/lib/traceevent/Makefile b/tools/lib/traceevent/Makefile
> index 8464039..6daaff6 100644
> --- a/tools/lib/traceevent/Makefile
> +++ b/tools/lib/traceevent/Makefile
> @@ -23,6 +23,7 @@ endef
>   # Allow setting CC and AR, or setting CROSS_COMPILE as a prefix.
>   $(call allow-override,CC,$(CROSS_COMPILE)gcc)
>   $(call allow-override,AR,$(CROSS_COMPILE)ar)
> +$(call allow-override,NM,$(CROSS_COMPILE)nm)
>
>   EXT = -std=gnu99
>   INSTALL = install
> @@ -157,8 +158,9 @@ PLUGINS_IN := $(PLUGINS:.so=-in.o)
>
>   TE_IN    := $(OUTPUT)libtraceevent-in.o
>   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)
>
> @@ -175,6 +177,9 @@ $(OUTPUT)libtraceevent.so: $(TE_IN)
>   $(OUTPUT)libtraceevent.a: $(TE_IN)
>   	$(QUIET_LINK)$(RM) $@; $(AR) rcs $@ $^
>
> +$(OUTPUT)libtraceevent-dynamic-list: $(PLUGINS)
> +	$(QUIET_GEN)$(call do_generate_dynamic_list_file, $(PLUGINS), $@)
> +
>   plugins: $(PLUGINS)
>
>   __plugin_obj = $(notdir $@)
> @@ -244,6 +249,13 @@ define do_install_plugins
>   	done
>   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
>   	$(call QUIET_INSTALL, $(LIB_FILE)) \
>   		$(call do_install,$(LIB_FILE),$(libdir_SQ))
> diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf
> index 5816a3b..b1dfcd8 100644
> --- a/tools/perf/Makefile.perf
> +++ b/tools/perf/Makefile.perf
> @@ -173,6 +173,9 @@ endif
>   LIBTRACEEVENT = $(TE_PATH)libtraceevent.a
>   export LIBTRACEEVENT
>
> +LIBTRACEEVENT_DYNAMIC_LIST = $(TE_PATH)libtraceevent-dynamic-list
> +LDFLAGS += -Xlinker --dynamic-list=$(LIBTRACEEVENT_DYNAMIC_LIST)
> +
>   LIBAPI = $(LIB_PATH)libapi.a
>   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
>   	$(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 $@
>
>   $(GTK_IN): FORCE
> @@ -373,7 +376,13 @@ $(LIB_FILE): $(LIBPERF_IN)
>   LIBTRACEEVENT_FLAGS += plugin_dir=$(plugindir_SQ)
>
>   $(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:
>   	$(call QUIET_CLEAN, libtraceevent)
> @@ -555,4 +564,5 @@ FORCE:
>   .PHONY: all install clean config-clean strip install-gtk
>   .PHONY: shell_compatibility_test please_set_SHELL_PATH_to_a_more_modern_shell
>   .PHONY: $(GIT-HEAD-PHONY) TAGS tags cscope FORCE single_dep
> +.PHONY: libtraceevent_plugins
>
>


  parent reply	other threads:[~2015-06-05 11:48 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-05-28 13:28 [PATCH RESEND 1/2] tools lib traceevent: Export dynamic symbols used by traceevent plugins He Kuang
2015-05-28 13:28 ` [PATCH RESEND 2/2] tools lib traceevent: Ignore libtrace-dynamic-list file He Kuang
2015-06-09  9:52   ` [tip:perf/core] " tip-bot for He Kuang
2015-06-05 11:39 ` He Kuang [this message]
2015-06-05 14:41   ` [PATCH RESEND 1/2] tools lib traceevent: Export dynamic symbols used by traceevent plugins Arnaldo Carvalho de Melo
2015-06-09  9:51 ` [tip:perf/core] " tip-bot for He Kuang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=55718A6E.2060104@huawei.com \
    --to=hekuang@huawei.com \
    --cc=a.p.zijlstra@chello.nl \
    --cc=acme@kernel.org \
    --cc=jolsa@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=namhyung@kernel.org \
    --cc=rostedt@goodmis.org \
    --cc=wangnan0@huawei.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.