From: Jiri Olsa <jo...@redhat.com>

On Fedora systems the perl and python CFLAGS/LDFLAGS include the
hardened specs from redhat-rpm-config package. We apply them only
for perl/python objects, which makes them not compatible with the
rest of the objects and the build fails with:

  /usr/bin/ld: perf-in.o: relocation R_X86_64_32 against `.rodata.str1.1' can 
not be used when making a shared object; recompile with -fPIC
  /usr/bin/ld: libperf.a(libperf-in.o): relocation R_X86_64_32S against `.text' 
can not be used when making a shared object; recompile with -fPIC
  /usr/bin/ld: final link failed: Nonrepresentable section on output
  collect2: error: ld returned 1 exit status
  make[2]: *** [Makefile.perf:507: perf] Error 1
  make[1]: *** [Makefile.perf:210: sub-make] Error 2
  make: *** [Makefile:69: all] Error 2

Mainly it's caused by perl/python objects being compiled with:

  -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1

which prevent the final link impossible, because it will check
for 'proper' objects with following option:

  -specs=/usr/lib/rpm/redhat/redhat-hardened-ld

Fixing this by using the perl/python CFLAGS/LDFLAGS options
for all the objects.

Link: http://lkml.kernel.org/n/tip-bib4nb5dei0ubk83534ef...@git.kernel.org
Signed-off-by: Jiri Olsa <jo...@kernel.org>
---
 tools/perf/Makefile.config                      | 2 ++
 tools/perf/scripts/perl/Perf-Trace-Util/Build   | 2 +-
 tools/perf/scripts/python/Perf-Trace-Util/Build | 2 +-
 tools/perf/util/block-range.c                   | 2 +-
 tools/perf/util/scripting-engines/Build         | 4 ++--
 5 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config
index f6786fa2419f..5e3734e4c1e4 100644
--- a/tools/perf/Makefile.config
+++ b/tools/perf/Makefile.config
@@ -587,6 +587,7 @@ else
     NO_LIBPERL := 1
     msg := $(warning Missing perl devel files. Disabling perl scripting 
support, please install perl-ExtUtils-Embed/libperl-dev);
   else
+    CFLAGS  += $(PERL_EMBED_CCOPTS)
     LDFLAGS += $(PERL_EMBED_LDFLAGS)
     EXTLIBS += $(PERL_EMBED_LIBADD)
     $(call detected,CONFIG_LIBPERL)
@@ -636,6 +637,7 @@ else
           $(warning $(and ,))
           $(error   $(and ,))
         else
+          CFLAGS  += $(PYTHON_EMBED_CCOPTS)
           LDFLAGS += $(PYTHON_EMBED_LDFLAGS)
           EXTLIBS += $(PYTHON_EMBED_LIBADD)
           LANG_BINDINGS += $(obj-perf)python/perf.so
diff --git a/tools/perf/scripts/perl/Perf-Trace-Util/Build 
b/tools/perf/scripts/perl/Perf-Trace-Util/Build
index 34faecf774ae..ff9a452677fc 100644
--- a/tools/perf/scripts/perl/Perf-Trace-Util/Build
+++ b/tools/perf/scripts/perl/Perf-Trace-Util/Build
@@ -1,5 +1,5 @@
 libperf-y += Context.o
 
-CFLAGS_Context.o += $(PERL_EMBED_CCOPTS) -Wno-redundant-decls 
-Wno-strict-prototypes
+CFLAGS_Context.o += -Wno-redundant-decls -Wno-strict-prototypes
 CFLAGS_Context.o += -Wno-unused-parameter -Wno-nested-externs -Wno-undef
 CFLAGS_Context.o += -Wno-switch-default -Wno-shadow
diff --git a/tools/perf/scripts/python/Perf-Trace-Util/Build 
b/tools/perf/scripts/python/Perf-Trace-Util/Build
index aefc15c9444a..cd4da129c017 100644
--- a/tools/perf/scripts/python/Perf-Trace-Util/Build
+++ b/tools/perf/scripts/python/Perf-Trace-Util/Build
@@ -1,3 +1,3 @@
 libperf-y += Context.o
 
-CFLAGS_Context.o += $(PYTHON_EMBED_CCOPTS) -Wno-redundant-decls 
-Wno-strict-prototypes -Wno-unused-parameter -Wno-nested-externs
+CFLAGS_Context.o += -Wno-redundant-decls -Wno-strict-prototypes 
-Wno-unused-parameter -Wno-nested-externs
diff --git a/tools/perf/util/block-range.c b/tools/perf/util/block-range.c
index f1451c987eec..ff76d5f1d96f 100644
--- a/tools/perf/util/block-range.c
+++ b/tools/perf/util/block-range.c
@@ -15,7 +15,7 @@ static void block_range__debug(void)
         */
 #if 1
        struct rb_node *rb;
-       u64 old = 0; /* NULL isn't executable */
+       u64 old __maybe_unused = 0; /* NULL isn't executable */
 
        for (rb = rb_first(&block_ranges.root); rb; rb = rb_next(rb)) {
                struct block_range *entry = rb_entry(rb, struct block_range, 
node);
diff --git a/tools/perf/util/scripting-engines/Build 
b/tools/perf/util/scripting-engines/Build
index 82d28c67e0f3..38cd25ce1503 100644
--- a/tools/perf/util/scripting-engines/Build
+++ b/tools/perf/util/scripting-engines/Build
@@ -1,6 +1,6 @@
 libperf-$(CONFIG_LIBPERL)   += trace-event-perl.o
 libperf-$(CONFIG_LIBPYTHON) += trace-event-python.o
 
-CFLAGS_trace-event-perl.o += $(PERL_EMBED_CCOPTS) -Wno-redundant-decls 
-Wno-strict-prototypes -Wno-unused-parameter -Wno-shadow -Wno-nested-externs 
-Wno-undef -Wno-switch-default
+CFLAGS_trace-event-perl.o += -Wno-redundant-decls -Wno-strict-prototypes 
-Wno-unused-parameter -Wno-shadow -Wno-nested-externs -Wno-undef 
-Wno-switch-default
 
-CFLAGS_trace-event-python.o += $(PYTHON_EMBED_CCOPTS) -Wno-redundant-decls 
-Wno-strict-prototypes -Wno-unused-parameter -Wno-shadow
+CFLAGS_trace-event-python.o += -Wno-redundant-decls -Wno-strict-prototypes 
-Wno-unused-parameter -Wno-shadow
-- 
2.13.6

Reply via email to