Message ID | 1471887222-26270-1-git-send-email-abrodkin@synopsys.com |
---|---|
State | New |
Headers | show |
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
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
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 >
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
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
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
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(+)