perf tools: Fix static building
diff mbox

Message ID 1471887222-26270-1-git-send-email-abrodkin@synopsys.com
State New
Headers show

Commit Message

Alexey Brodkin Aug. 22, 2016, 5:33 p.m. UTC
With commit e3d09ec8126f ("tools lib traceevent: Export dynamic symbols
used by traceevent plugins") we started to add "--dynamic-list" in
LDFLAGS. One side-effect of that was inability to build really
statically-linked perf.

I.e. even if "LDFLAGS=-static" were passed on perf building command-line
it had no effect and perf was built dynamically.

This change disables setup of "--dynamic-list" if LDFLAGS contains
"-static" option.

Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Vineet Gupta <vgupta@synopsys.com>
Cc: Wang Nan <wangnan0@huawei.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: He Kuang <hekuang@huawei.com>
Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Zefan Li <lizefan@huawei.com>
Cc: pi3orama@163.com
---
 tools/perf/Makefile.perf | 2 ++
 1 file changed, 2 insertions(+)

Comments

Vineet Gupta Aug. 30, 2016, 4:21 p.m. UTC | #1
On 08/22/2016 10:35 AM, Alexey Brodkin wrote:
> With commit e3d09ec8126f ("tools lib traceevent: Export dynamic symbols
> used by traceevent plugins") we started to add "--dynamic-list" in
> LDFLAGS. One side-effect of that was inability to build really
> statically-linked perf.
>
> I.e. even if "LDFLAGS=-static" were passed on perf building command-line
> it had no effect and perf was built dynamically.
>
> This change disables setup of "--dynamic-list" if LDFLAGS contains
> "-static" option.
>
> Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
> Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
> Cc: Vineet Gupta <vgupta@synopsys.com>
> Cc: Wang Nan <wangnan0@huawei.com>
> Cc: Jiri Olsa <jolsa@kernel.org>
> Cc: He Kuang <hekuang@huawei.com>
> Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
> Cc: Namhyung Kim <namhyung@kernel.org>
> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
> Cc: Zefan Li <lizefan@huawei.com>
> Cc: pi3orama@163.com
> ---
>  tools/perf/Makefile.perf | 2 ++
>  1 file changed, 2 insertions(+)
>
> diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf
> index 2d908750..e9acc7c 100644
> --- a/tools/perf/Makefile.perf
> +++ b/tools/perf/Makefile.perf
> @@ -236,7 +236,9 @@ LIBTRACEEVENT = $(TE_PATH)libtraceevent.a
>  export LIBTRACEEVENT
>  
>  LIBTRACEEVENT_DYNAMIC_LIST = $(TE_PATH)libtraceevent-dynamic-list
> +ifeq ($(filter -static,$(LDFLAGS)),)
>  LIBTRACEEVENT_DYNAMIC_LIST_LDFLAGS = -Xlinker --dynamic-list=$(LIBTRACEEVENT_DYNAMIC_LIST)
> +endif
>  
>  LIBAPI = $(API_PATH)libapi.a
>  export LIBAPI

Gentle Ping while Alexey is away on vacation !
Arnaldo are you ok with this patch.

Thx,
-Vineet
Jiri Olsa Aug. 31, 2016, 7:21 a.m. UTC | #2
On Mon, Aug 22, 2016 at 08:33:42PM +0300, Alexey Brodkin wrote:
> With commit e3d09ec8126f ("tools lib traceevent: Export dynamic symbols
> used by traceevent plugins") we started to add "--dynamic-list" in
> LDFLAGS. One side-effect of that was inability to build really
> statically-linked perf.

IIRC --dynamic-list forces perf to exports some symbols to
be used by plugins.. don't see this breaking static build

also it's working properly for me:

[jolsa@krava perf]$ make LDFLAGS=-static
...
[jolsa@krava perf]$ ldd ./perf
        not a dynamic executable

unless I miss what you mean by 'really statically-linked' ;-)

Maybe different features enabled/build environment could you
please send the .config-detected along with the build error?

thanks,
jirka
Jiri Olsa Aug. 31, 2016, 7:24 a.m. UTC | #3
On Mon, Aug 22, 2016 at 08:33:42PM +0300, Alexey Brodkin wrote:
> With commit e3d09ec8126f ("tools lib traceevent: Export dynamic symbols
> used by traceevent plugins") we started to add "--dynamic-list" in
> LDFLAGS. One side-effect of that was inability to build really
> statically-linked perf.
> 
> I.e. even if "LDFLAGS=-static" were passed on perf building command-line
> it had no effect and perf was built dynamically.
> 
> This change disables setup of "--dynamic-list" if LDFLAGS contains
> "-static" option.
> 
> Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
> Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
> Cc: Vineet Gupta <vgupta@synopsys.com>
> Cc: Wang Nan <wangnan0@huawei.com>
> Cc: Jiri Olsa <jolsa@kernel.org>
> Cc: He Kuang <hekuang@huawei.com>
> Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
> Cc: Namhyung Kim <namhyung@kernel.org>
> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
> Cc: Zefan Li <lizefan@huawei.com>
> Cc: pi3orama@163.com
> ---
>  tools/perf/Makefile.perf | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf
> index 2d908750..e9acc7c 100644
> --- a/tools/perf/Makefile.perf
> +++ b/tools/perf/Makefile.perf
> @@ -236,7 +236,9 @@ LIBTRACEEVENT = $(TE_PATH)libtraceevent.a
>  export LIBTRACEEVENT
>  
>  LIBTRACEEVENT_DYNAMIC_LIST = $(TE_PATH)libtraceevent-dynamic-list
> +ifeq ($(filter -static,$(LDFLAGS)),)
>  LIBTRACEEVENT_DYNAMIC_LIST_LDFLAGS = -Xlinker --dynamic-list=$(LIBTRACEEVENT_DYNAMIC_LIST)
> +endif

hum, e3d09ec8126f changelog mentioned python feature adding this by default

but not sure python could be added within static build

jirka

>  
>  LIBAPI = $(API_PATH)libapi.a
>  export LIBAPI
> -- 
> 2.7.4
>
Vineet Gupta Sept. 1, 2016, 6:28 p.m. UTC | #4
On 08/31/2016 12:21 AM, Jiri Olsa wrote:
> On Mon, Aug 22, 2016 at 08:33:42PM +0300, Alexey Brodkin wrote:
>> With commit e3d09ec8126f ("tools lib traceevent: Export dynamic symbols
>> used by traceevent plugins") we started to add "--dynamic-list" in
>> LDFLAGS. One side-effect of that was inability to build really
>> statically-linked perf.
> 
> IIRC --dynamic-list forces perf to exports some symbols to
> be used by plugins.. don't see this breaking static build
> 
> also it's working properly for me:
> 
> [jolsa@krava perf]$ make LDFLAGS=-static
> ...
> [jolsa@krava perf]$ ldd ./perf
>         not a dynamic executable
> 
> unless I miss what you mean by 'really statically-linked' ;-)

Right - so I tried this as well and indeed I can confirm that it builds for me as
static. Atleast the build system doesn;t need changing as -sattic being propagated
to fianl link cmd.

There seems to be some weirdness with ARC tools: file reports

| ELF 32-bit LSB executable, *unknown arch 0xc3* version 1 (SYSV),
| dynamically linked, interpreter *empty*, for GNU/Linux 3.9.0, not stripped


That is clearly wrong !

And the static binary as expected doesn't seem to run on target - exits with -EACCESS.

-Vineet
Alexey Brodkin Sept. 14, 2016, 4:21 p.m. UTC | #5
Hi Vineet, Jiri,

On Thu, 2016-09-01 at 11:28 -0700, Vineet Gupta wrote:
> On 08/31/2016 12:21 AM, Jiri Olsa wrote:

> > 

> > On Mon, Aug 22, 2016 at 08:33:42PM +0300, Alexey Brodkin wrote:

> > > 

> > > With commit e3d09ec8126f ("tools lib traceevent: Export dynamic symbols

> > > used by traceevent plugins") we started to add "--dynamic-list" in

> > > LDFLAGS. One side-effect of that was inability to build really

> > > statically-linked perf.

> > 

> > IIRC --dynamic-list forces perf to exports some symbols to

> > be used by plugins.. don't see this breaking static build

> > 

> > also it's working properly for me:

> > 

> > [jolsa@krava perf]$ make LDFLAGS=-static

> > ...

> > [jolsa@krava perf]$ ldd ./perf

> >         not a dynamic executable

> > 

> > unless I miss what you mean by 'really statically-linked' ;-)

> 

> Right - so I tried this as well and indeed I can confirm that it builds for me as

> static. Atleast the build system doesn;t need changing as -sattic being propagated

> to fianl link cmd.

> 

> There seems to be some weirdness with ARC tools: file reports

> 

> > 

> > ELF 32-bit LSB executable, *unknown arch 0xc3* version 1 (SYSV),

> > dynamically linked, interpreter *empty*, for GNU/Linux 3.9.0, not stripped

> 

> 

> That is clearly wrong !

> 

> And the static binary as expected doesn't seem to run on target - exits with -EACCESS.


I may confirm what Vineet said already adding just that funny ldd output on target:
-------------------->8-----------------
# ldd /home/perf 
	 =>  (0x00000000)
-------------------->8-----------------

Just for comparison that's ldd output for dynamically built perf:
-------------------->8-----------------
# ldd /usr/bin/perf 
checking sub-depends for '/lib/libpthread.so.0'
checking sub-depends for '/lib/librt.so.0'
checking sub-depends for '/lib/libm.so.0'
checking sub-depends for '/lib/libdl.so.0'
checking sub-depends for '/lib/libc.so.0'
	libpthread.so.0 => /lib/libpthread.so.0 (0x00000000)
	librt.so.0 => /lib/librt.so.0 (0x00000000)
	libm.so.0 => /lib/libm.so.0 (0x00000000)
	libdl.so.0 => /lib/libdl.so.0 (0x00000000)
	libc.so.0 => /lib/libc.so.0 (0x00000000)
	/lib/ld-uClibc.so.1 => /lib/ld-uClibc.so.1 (0x00000000)
-------------------->8-----------------

And most probably the reason for me to think perf built with LDFLAGS=-static
was not static is indeed "file" output:
-------------------->8-----------------
file tools/perf/perf
tools/perf/perf: ELF 32-bit LSB executable, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux
3.9.0, not stripped
-------------------->8-----------------

Sorry for the noise.

-Alexey

Patch
diff mbox

diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf
index 2d908750..e9acc7c 100644
--- a/tools/perf/Makefile.perf
+++ b/tools/perf/Makefile.perf
@@ -236,7 +236,9 @@  LIBTRACEEVENT = $(TE_PATH)libtraceevent.a
 export LIBTRACEEVENT
 
 LIBTRACEEVENT_DYNAMIC_LIST = $(TE_PATH)libtraceevent-dynamic-list
+ifeq ($(filter -static,$(LDFLAGS)),)
 LIBTRACEEVENT_DYNAMIC_LIST_LDFLAGS = -Xlinker --dynamic-list=$(LIBTRACEEVENT_DYNAMIC_LIST)
+endif
 
 LIBAPI = $(API_PATH)libapi.a
 export LIBAPI