[PATCH] makedumpfile: inhibit predefined macros when cross building

Atsushi Kumagai kumagai-atsushi at mxc.nes.nec.co.jp
Thu Apr 3 23:59:28 EDT 2014


Hello Wang,

>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.

I'm curious to know is it possible to analyze arm vmcores with
x86_64 binaries even if using the logic for arm ? 
In such cases, is it not needed to build an arm binary with a cross
compiler ? I worry about endian issues.


Thanks
Atsushi Kumagai

>> 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
>>
>



More information about the kexec mailing list