Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932765AbcCCQyH (ORCPT ); Thu, 3 Mar 2016 11:54:07 -0500 Received: from torg.zytor.com ([198.137.202.12]:48380 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932730AbcCCQyE (ORCPT ); Thu, 3 Mar 2016 11:54:04 -0500 Date: Thu, 3 Mar 2016 08:52:04 -0800 From: tip-bot for Josh Poimboeuf Message-ID: Cc: torvalds@linux-foundation.org, masami.hiramatsu.pt@hitachi.com, adrian.hunter@intel.com, mpe@ellerman.id.au, hpa@zytor.com, tglx@linutronix.de, linux-kernel@vger.kernel.org, sfr@canb.auug.org.au, peterz@infradead.org, mingo@kernel.org, jpoimboe@redhat.com Reply-To: mingo@kernel.org, jpoimboe@redhat.com, sfr@canb.auug.org.au, peterz@infradead.org, tglx@linutronix.de, linux-kernel@vger.kernel.org, adrian.hunter@intel.com, mpe@ellerman.id.au, hpa@zytor.com, masami.hiramatsu.pt@hitachi.com, torvalds@linux-foundation.org In-Reply-To: <55b63eefc347f1bb28573f972d8d1adbf1f1c31d.1456962210.git.jpoimboe@redhat.com> References: <55b63eefc347f1bb28573f972d8d1adbf1f1c31d.1456962210.git.jpoimboe@redhat.com> To: linux-tip-commits@vger.kernel.org Subject: [tip:core/objtool] objtool: Support CROSS_COMPILE Git-Commit-ID: c1d45c3abd49b5bf9447e435099c1b000dcde752 X-Mailer: tip-git-log-daemon Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8 Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4416 Lines: 116 Commit-ID: c1d45c3abd49b5bf9447e435099c1b000dcde752 Gitweb: http://git.kernel.org/tip/c1d45c3abd49b5bf9447e435099c1b000dcde752 Author: Josh Poimboeuf AuthorDate: Wed, 2 Mar 2016 18:39:37 -0600 Committer: Ingo Molnar CommitDate: Thu, 3 Mar 2016 16:13:00 +0100 objtool: Support CROSS_COMPILE When building with CONFIG_STACK_VALIDATION on a ppc64le host with an x86 cross-compiler, Stephen Rothwell saw the following objtool build errors: DESCEND objtool CC /home/sfr/next/x86_64_allmodconfig/tools/objtool/builtin-check.o CC /home/sfr/next/x86_64_allmodconfig/tools/objtool/special.o CC /home/sfr/next/x86_64_allmodconfig/tools/objtool/elf.o CC /home/sfr/next/x86_64_allmodconfig/tools/objtool/objtool.o MKDIR /home/sfr/next/x86_64_allmodconfig/tools/objtool/arch/x86/insn/ CC /home/sfr/next/x86_64_allmodconfig/tools/objtool/libstring.o elf.c:22:23: fatal error: sys/types.h: No such file or directory compilation terminated. CC /home/sfr/next/x86_64_allmodconfig/tools/objtool/exec-cmd.o CC /home/sfr/next/x86_64_allmodconfig/tools/objtool/help.o builtin-check.c:28:20: fatal error: string.h: No such file or directory compilation terminated. objtool.c:28:19: fatal error: stdio.h: No such file or directory compilation terminated. It fails to build because it tries to compile objtool with the cross-compiler instead of the host compiler. Ensure that it always uses the host compiler by ignoring CROSS_COMPILE. In order to do that properly, the libsubcmd.a library needs to be built in tools/objtool/ rather than tools/lib/subcmd/. The latter directory contains the cross-compiled version which is needed for perf and possibly other tools. Note that cross-compiling for x86 on a _big_ endian system would result in a bunch of false positive objtool warnings during the kernel build because it isn't endian-aware. But that's generally a rare edge case and there haven't been any reports of anybody needing that. Reported-by: Stephen Rothwell Signed-off-by: Josh Poimboeuf Cc: Adrian Hunter Cc: Linus Torvalds Cc: Masami Hiramatsu Cc: Michael Ellerman Cc: Peter Zijlstra Cc: Thomas Gleixner Link: http://lkml.kernel.org/r/55b63eefc347f1bb28573f972d8d1adbf1f1c31d.1456962210.git.jpoimboe@redhat.com Signed-off-by: Ingo Molnar --- tools/lib/subcmd/Makefile | 6 ++++-- tools/objtool/Makefile | 17 ++++++++++------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/tools/lib/subcmd/Makefile b/tools/lib/subcmd/Makefile index 629cf8c..1faecb8 100644 --- a/tools/lib/subcmd/Makefile +++ b/tools/lib/subcmd/Makefile @@ -8,8 +8,10 @@ srctree := $(patsubst %/,%,$(dir $(srctree))) #$(info Determined 'srctree' to be $(srctree)) endif -CC = $(CROSS_COMPILE)gcc -AR = $(CROSS_COMPILE)ar +CC ?= $(CROSS_COMPILE)gcc +LD ?= $(CROSS_COMPILE)ld +AR ?= $(CROSS_COMPILE)ar + RM = rm -f MAKEFLAGS += --no-print-directory diff --git a/tools/objtool/Makefile b/tools/objtool/Makefile index c4f0713..e4a6bd5 100644 --- a/tools/objtool/Makefile +++ b/tools/objtool/Makefile @@ -7,13 +7,19 @@ ARCH := x86 endif endif +# always use the host compiler +CC = gcc +LD = ld +AR = ar + ifeq ($(srctree),) srctree := $(patsubst %/,%,$(dir $(shell pwd))) srctree := $(patsubst %/,%,$(dir $(srctree))) endif -SUBCMD_SRCDIR = $(srctree)/tools/lib/subcmd/ -LIBSUBCMD = $(if $(OUTPUT),$(OUTPUT),$(SUBCMD_SRCDIR))libsubcmd.a +SUBCMD_SRCDIR = $(srctree)/tools/lib/subcmd/ +LIBSUBCMD_OUTPUT = $(if $(OUTPUT),$(OUTPUT),$(PWD)/) +LIBSUBCMD = $(LIBSUBCMD_OUTPUT)libsubcmd.a OBJTOOL := $(OUTPUT)objtool OBJTOOL_IN := $(OBJTOOL)-in.o @@ -45,12 +51,9 @@ $(OBJTOOL): $(LIBSUBCMD) $(OBJTOOL_IN) $(LIBSUBCMD): fixdep FORCE - $(Q)$(MAKE) -C $(SUBCMD_SRCDIR) - -$(LIBSUBCMD)-clean: - $(Q)$(MAKE) -C $(SUBCMD_SRCDIR) clean > /dev/null + $(Q)$(MAKE) -C $(SUBCMD_SRCDIR) OUTPUT=$(LIBSUBCMD_OUTPUT) -clean: $(LIBSUBCMD)-clean +clean: $(call QUIET_CLEAN, objtool) $(RM) $(OBJTOOL) $(Q)find $(OUTPUT) -name '*.o' -delete -o -name '\.*.cmd' -delete -o -name '\.*.d' -delete $(Q)$(RM) $(OUTPUT)arch/x86/insn/inat-tables.c $(OUTPUT)fixdep