On 2014/4/1 12:28, Wang Nan wrote: > 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 Sorry, should be TARGET=arm. I have tested and build okay. > > 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 >