When cross building makedumpfile, for example, build x86_64 exec for dealing with arm vmcore, makefile passes a "-D__arm__" to gcc, but gcc predefined macros still take effect, defines "__x86_64__". Which makes definitions for x86_64 and arm mixed together in makedumpfile.h, causes many problems. This patch changes Makefile: if host arch and target arch are different, passes "-U__$(HOST_ARCH)__" to gcc. I have tested by running following command on x86_64 machine: make ARCH=arm Signed-off-by: Wang Nan <wangnan0 at huawei.com> Cc: Atsushi Kumagai <kumagai-atsushi at mxc.nes.nec.co.jp> Cc: kexec at lists.infradead.org Cc: Geng Hui <hui.geng at huawei.com> --- Makefile | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 2f4845c..f85cc21 100644 --- a/Makefile +++ b/Makefile @@ -15,10 +15,11 @@ CFLAGS_ARCH = -g -O2 -Wall -D_FILE_OFFSET_BITS=64 \ -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE # LDFLAGS = -L/usr/local/lib -I/usr/local/include +HOST_ARCH := $(shell uname -m) # Use TARGET as the target architecture if specified. # Defaults to uname -m ifeq ($(strip($TARGET)),) -TARGET := $(shell uname -m) +TARGET := $(HOST_ARCH) endif ARCH := $(shell echo ${TARGET} | sed -e s/i.86/x86/ -e s/sun4u/sparc64/ \ @@ -26,8 +27,13 @@ ARCH := $(shell echo ${TARGET} | sed -e s/i.86/x86/ -e s/sun4u/sparc64/ \ -e s/s390x/s390/ -e s/parisc64/parisc/ \ -e s/ppc64/powerpc64/ -e s/ppc/powerpc32/) -CFLAGS += -D__$(ARCH)__ -CFLAGS_ARCH += -D__$(ARCH)__ +CROSS := +ifneq ($(TARGET), $(HOST_ARCH)) +CROSS := -U__$(HOST_ARCH)__ +endif + +CFLAGS += -D__$(ARCH)__ $(CROSS) +CFLAGS_ARCH += -D__$(ARCH)__ $(CROSS) ifeq ($(ARCH), powerpc64) CFLAGS += -m64 -- 1.8.4