Bug 1227260 - kernel build failure on ppc64le
Summary: kernel build failure on ppc64le
Keywords:
Status: CLOSED CURRENTRELEASE
Alias: None
Product: Fedora
Classification: Fedora
Component: kernel
Version: 23
Hardware: ppc64le
OS: Linux
unspecified
high
Target Milestone: ---
Assignee: Kernel Maintainer List
QA Contact: Fedora Extras Quality Assurance
URL:
Whiteboard:
Depends On:
Blocks: F-ExcludeArch-ppc64le, PPC64LETracker
TreeView+ depends on / blocked
 
Reported: 2015-06-02 09:19 UTC by Than Ngo
Modified: 2016-01-20 13:08 UTC (History)
7 users (show)

Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Clone Of:
Environment:
Last Closed: 2016-01-20 13:08:14 UTC
Type: Bug
Embargoed:


Attachments (Terms of Use)

Description Than Ngo 2015-06-02 09:19:13 UTC
kernel-4.1.0-0.rc6.git0.1.fc23 doesn't build on ppc64le in f23. it looks like stubs-32.h is needed in this case to build perf-read-vdso.c. The build breaks with errors:

gcc -m32  -Wall -Werror -o perf-read-vdso32 perf-read-vdso.c
  gcc -Wp,-MD,arch/powerpc/util/.skip-callchain-idx.o.d,-MT,arch/powerpc/util/skip-callchain-idx.o  -Wbad-function-cast -Wdeclaration-after-statement -Wformat-security -Wformat-y2k -Winit-self -Wmissing-declarations -Wmissing-prototypes -Wnested-externs -Wno-system-headers -Wold-style-definition -Wpacked -Wredundant-decls -Wshadow -Wstrict-aliasing=3 -Wstrict-prototypes -Wswitch-default -Wswitch-enum -Wundef -Wwrite-strings -Wformat -O6 -fno-omit-frame-pointer -ggdb3 -funwind-tables -Wall -Wextra -std=gnu99 -fstack-protector-all -D_FORTIFY_SOURCE=2 -I/builddir/build/BUILD/kernel-4.0.fc23/linux-4.1.0-0.rc6.git0.1.fc23.ppc64le/tools/perf/util/include -I/builddir/build/BUILD/kernel-4.0.fc23/linux-4.1.0-0.rc6.git0.1.fc23.ppc64le/tools/perf/arch/powerpc/include -I/builddir/build/BUILD/kernel-4.0.fc23/linux-4.1.0-0.rc6.git0.1.fc23.ppc64le/tools/include/ -I/builddir/build/BUILD/kernel-4.0.fc23/linux-4.1.0-0.rc6.git0.1.fc23.ppc64le/arch/powerpc/include/uapi -I/builddir/build/BUILD/kernel-4.0.fc23/linux-4.1.0-0.rc6.git0.1.fc23.ppc64le/arch/powerpc/include -I/builddir/build/BUILD/kernel-4.0.fc23/linux-4.1.0-0.rc6.git0.1.fc23.ppc64le/include/uapi -I/builddir/build/BUILD/kernel-4.0.fc23/linux-4.1.0-0.rc6.git0.1.fc23.ppc64le/include -I/builddir/build/BUILD/kernel-4.0.fc23/linux-4.1.0-0.rc6.git0.1.fc23.ppc64le/tools/perf/util -I/builddir/build/BUILD/kernel-4.0.fc23/linux-4.1.0-0.rc6.git0.1.fc23.ppc64le/tools/perf -I/builddir/build/BUILD/kernel-4.0.fc23/linux-4.1.0-0.rc6.git0.1.fc23.ppc64le/tools/lib/ -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DHAVE_SYNC_COMPARE_AND_SWAP_SUPPORT -DHAVE_PTHREAD_ATTR_SETAFFINITY_NP -DHAVE_LIBELF_SUPPORT -DHAVE_LIBELF_MMAP_SUPPORT -DHAVE_ELF_GETPHDRNUM_SUPPORT -DHAVE_DWARF_SUPPORT  -DHAVE_SKIP_CALLCHAIN_IDX -DHAVE_LIBAUDIT_SUPPORT -I/usr/include/slang -DHAVE_SLANG_SUPPORT -DHAVE_TIMERFD_SUPPORT -DHAVE_LIBBFD_SUPPORT -DHAVE_ZLIB_SUPPORT -DHAVE_BACKTRACE_SUPPORT -DHAVE_LIBNUMA_SUPPORT -DHAVE_PERF_READ_VDSO32 -D"BUILD_STR(s)=#s"   -c -o arch/powerpc/util/skip-callchain-idx.o arch/powerpc/util/skip-callchain-idx.c
  gcc -Wp,-MD,./.trace-seq.o.d,-MT,trace-seq.o -g -Wall -fPIC  -I. -I /builddir/build/BUILD/kernel-4.0.fc23/linux-4.1.0-0.rc6.git0.1.fc23.ppc64le/tools/include  '-DPLUGIN_DIR="/usr/lib64/traceevent/plugins"'  -D_GNU_SOURCE -D"BUILD_STR(s)=#s"   -c -o trace-seq.o trace-seq.c
In file included from /usr/include/features.h:389:0,
                 from /usr/include/stdio.h:27,
                 from perf-read-vdso.c:1:
/usr/include/gnu/stubs.h:8:27: fatal error: gnu/stubs-32.h: No such file or directory
compilation terminated.
   ld -r -o scripts/python/Perf-Trace-Util/libperf-in.o scripts/python/Perf-Trace-Util/Context.o
Makefile.perf:353: recipe for target 'perf-read-vdso32' failed
make[1]: *** [perf-read-vdso32] Error 1

Comment 1 Dan Horák 2015-06-02 09:32:10 UTC
The error is not a clear kernel issue, but more a toolchain one (no 32-bit environment on ppc64le). It is related to the use of 32-bit code in 64-bit kernel, see also bug #1205236. Probably time to clean the kernel buildsystem so it is not trying to build 32-bit vdso support on pure 64-bit kernel.

Comment 2 Dan Horák 2015-06-02 09:39:57 UTC
There is even an option for it - http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/tools/perf/Makefile.perf#n64

Comment 3 Than Ngo 2015-06-02 10:41:30 UTC
i created 2 solutions to fix the above issue. I attach both so you can review.

1. solution
diff -Nur linux-4.0/tools/perf/config/Makefile.than linux-4.0/tools/perf/config/Makefile
--- linux-4.0/tools/perf/config/Makefile.than   2015-06-02 11:58:17.525763988 +0200
+++ linux-4.0/tools/perf/config/Makefile        2015-06-02 12:31:04.898865043 +0200
@@ -642,6 +642,9 @@
     CFLAGS += -DHAVE_KVM_STAT_SUPPORT
 endif
 
+ifeq ($(ARCH),ppc64le)
+  NO_PERF_READ_VDSO32 := 1
+endif
 ifeq (${IS_64_BIT}, 1)
   ifndef NO_PERF_READ_VDSO32
     $(call feature_check,compile-32)

2. solution
diff --git a/kernel.spec b/kernel.spec
index de76387..ad55636 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -351,7 +351,7 @@ Group: System Environment/Kernel
 License: GPLv2 and Redistributable, no modification permitted
 URL: http://www.kernel.org/
 Version: %{rpmversion}
-Release: %{pkg_release}
+Release: %{pkg_release}.than
 # DO NOT CHANGE THE 'ExclusiveArch' LINE TO TEMPORARILY EXCLUDE AN ARCHITECTURE BUILD.
 # SET %%nobuildarches (ABOVE) INSTEAD
 ExclusiveArch: %{all_x86} x86_64 ppc64 ppc64p7 s390 s390x %{arm} aarch64 ppc64le
@@ -1746,8 +1746,13 @@ BuildKernel %make_target %kernel_image %{pae}
 BuildKernel %make_target %kernel_image
 %endif
 
+%ifarch ppc64le
+# no 32-bit environment on ppc64le, so disable it
+%define no32bit NO_PERF_READ_VDSO32=1
+%endif
+
 %global perf_make \
-  make -s %{?cross_opts} %{?_smp_mflags} -C tools/perf V=1 WERROR=0 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_STRLCPY=1 NO_BIONIC=1 prefix=%{_prefix}
+  make -s %{?cross_opts} %{?_smp_mflags} -C tools/perf V=1 %{?no32bit} WERROR=0 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_STRLCPY=1 NO_BIONIC=1 prefix=%{_prefix}
 %if %{with_perf}
 # perf
 %{perf_make} DESTDIR=$RPM_BUILD_ROOT all

Comment 4 Josh Boyer 2015-06-03 20:05:53 UTC
I went with solution #2 for now so we don't have to carry a patch.  Once the patch works its way upstream we can drop it.


Note You need to log in before you can comment on or make changes to this bug.