Hi, Alexander Thanks for the patch. 在 2020年11月08日 01:00, crash-utility-request@xxxxxxxxxx 写道: > Date: Fri, 6 Nov 2020 19:48:07 +0100 > From: Alexander Egorenkov <egorenar-dev@xxxxxxxxxx> > To: crash-utility@xxxxxxxxxx > Subject: [PATCH v3 1/1] Support cross-compilation > Message-ID: <20201106184807.29574-1-egorenar-dev@xxxxxxxxxx> > Content-Type: text/plain; charset="US-ASCII" > > In order to support cross-compilation of crash-utilty, > the configure tool compiled from configure.c must be built > for the host architecture where the cross-compilation will run > instead of the target architecture where the crash-utility shall run. > Therefore, we need to support two C compilers in Maklefile, > one for the host and one for the target. The old CC makefile variable > shall represent the compiler for the target architecture and > the new HOSTCC makefile variable shall represent the host compiler. > Both variables differ only when a cross-compilation is performed. > Furthermore, there must be a way to override the target architecture > which is deduced from the preprocessor macros defined by the compiler > used for the compilation of configure.c, because otherwise the configure > tool will deduce host's architecture instead of the desired target. > With the new preprocessor define CONF_DEFAULT_TARGET, it is possible to > set the desired target architecture for the compiled crash-utility. > When cross-compiling, set the makefile variable CROSS_COMPILE > to the prefix of the cross-compiler and the default target > architecture will be deduced from it, e.g. like this: > > make CROSS_COMPILE=s390x-linux- > After applied this patch, the cross build failed in Fedora as below: [root@hpe-apollo-cn99xx-15-vm-21 crash]# make CROSS_COMPILE=s390x-linux- ... rm -f ./libiberty.a pic/./libiberty.a s390x-linux-ar rc ./libiberty.a \ ./regex.o ./cplus-dem.o ./cp-demangle.o ./md5.o ./sha1.o ./alloca.o ./argv.o ./choose-temp.o ./concat.o ./cp-demint.o ./crc32.o ./dwarfnames.o ./dyn-string.o ./fdmatch.o ./fibheap.o ./filename_cmp.o ./floatformat.o ./fnmatch.o ./fopen_unlocked.o ./getopt.o ./getopt1.o ./getpwd.o ./getruntime.o ./hashtab.o ./hex.o ./lbasename.o ./lrealpath.o ./make-relative-prefix.o ./make-temp-file.o ./mkstemps.o ./objalloc.o ./obstack.o ./partition.o ./pexecute.o ./physmem.o ./pex-common.o ./pex-one.o ./pex-unix.o ./safe-ctype.o ./simple-object.o ./simple-object-coff.o ./simple-object-elf.o ./simple-object-mach-o.o ./simple-object-xcoff.o ./sort.o ./spaces.o ./splay-tree.o ./stack-limit.o ./strerror.o ./strsignal.o ./timeval-utils.o ./unlink-if-ordinary.o ./xatexit.o ./xexit.o ./xmalloc.o ./xmemdup.o ./xstrdup.o ./xstrerror.o ./xstrndup.o ./setproctitle.o make[4]: s390x-linux-ar: Command not found make[4]: *** [Makefile:247: libiberty.a] Error 127 make[3]: *** [Makefile:6996: all-libiberty] Error 2 make[2]: *** [Makefile:835: all] Error 2 crash build failed make[1]: *** [Makefile:281: gdb_merge] Error 1 make: *** [Makefile:272: all] Error 2 [root@hpe-apollo-cn99xx-15-vm-21 crash]# Can you help to check this patch again and do some coverage testing? Thanks. Lianbo > and the default target architecture shall be S390X. > > Signed-off-by: Alexander Egorenkov <egorenar-dev@xxxxxxxxxx> > --- > > v2 -> v3: > * Use CROSS_COMPILE makefile variable to pass cross-compiler prefix > > v1 -> v2: > * Improved commit message > * Added a note how to cross-compile crash-utilty to README > * Moved CONF_CC makefile variable to correct place location > > > Makefile | 53 +++++++++++++++++++++++++++++++++++++++++++++++++---- > README | 5 +++++ > configure.c | 39 +++------------------------------------ > 3 files changed, 57 insertions(+), 40 deletions(-) > > diff --git a/Makefile b/Makefile > index d185719..7185dcd 100644 > --- a/Makefile > +++ b/Makefile > @@ -20,15 +20,60 @@ > PROGRAM=crash > > # > -# Supported targets: X86 ALPHA PPC IA64 PPC64 SPARC64 > +# Supported targets: X86 X86_64 IA64 ALPHA PPC PPC64 ARM ARM64 SPARC64 MIPS S390 S390X > # TARGET and GDB_CONF_FLAGS will be configured automatically by configure > # > TARGET= > GDB_CONF_FLAGS= > > -ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/) > +ifneq ($(CROSS_COMPILE),) > +ARCH := $(shell echo $(CROSS_COMPILE) | sed 's:^.*/::g' | cut -d- -f1) > +else > +ARCH := $(shell uname -m) > +endif > +ARCH := $(shell echo $(ARCH) | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/) > + > +CC = $(CROSS_COMPILE)gcc > +HOSTCC = gcc > + > ifeq (${ARCH}, ppc64) > -CONF_FLAGS = -m64 > +CONF_FLAGS += -m64 > +endif > + > +ifeq (${ARCH}, i386) > +CONF_DEFAULT_TARGET := X86 > +else ifeq (${ARCH}, x86_64) > +CONF_DEFAULT_TARGET := X86_64 > +else ifeq (${ARCH}, ia64) > +CONF_DEFAULT_TARGET := IA64 > +else ifeq (${ARCH}, alpha) > +CONF_DEFAULT_TARGET := ALPHA > +else ifeq (${ARCH}, ppc) > +CONF_DEFAULT_TARGET := PPC > +else ifeq (${ARCH}, ppc64) > +CONF_DEFAULT_TARGET := PPC64 > +else ifeq (${ARCH}, ppc64le) > +CONF_DEFAULT_TARGET := PPC64 > +else ifeq (${ARCH}, arm) > +CONF_DEFAULT_TARGET := ARM > +else ifeq (${ARCH}, aarch64) > +CONF_DEFAULT_TARGET := ARM64 > +else ifeq (${ARCH}, mips) > +CONF_DEFAULT_TARGET := MIPS > +else ifeq (${ARCH}, sparc64) > +CONF_DEFAULT_TARGET := SPARC64 > +else ifeq (${ARCH}, s390) > +CONF_DEFAULT_TARGET := S390 > +else ifeq (${ARCH}, s390x) > +CONF_DEFAULT_TARGET := S390X > +else > +$(error unsupported architecture ${ARCH}) > +endif > + > +CONF_FLAGS += -DCONF_DEFAULT_TARGET=${CONF_DEFAULT_TARGET} > + > +ifneq ($(CROSS_COMPILE),) > +CONF_FLAGS += -DGDB_TARGET_DEFAULT="\"GDB_CONF_FLAGS=--host=$(shell echo $(CROSS_COMPILE) | sed -e 's:^.*/::g' -e 's/-$$//')\"" > endif > > # > @@ -288,7 +333,7 @@ force: > > make_configure: force > @rm -f configure > - @${CC} ${CONF_FLAGS} -o configure configure.c ${WARNING_ERROR} ${WARNING_OPTIONS} > + @${HOSTCC} ${CONF_FLAGS} -o configure configure.c ${WARNING_ERROR} ${WARNING_OPTIONS} > > clean: make_configure > @./configure ${CONF_TARGET_FLAG} -q -b > diff --git a/README b/README > index bfbaef6..f5bd476 100644 > --- a/README > +++ b/README > @@ -100,6 +100,11 @@ > o On an x86_64 host, an x86_64 binary that can be used to analyze > ppc64le dumpfiles may be built by typing "make target=PPC64". > > + To cross-compile the crash utility, set the makefile variable CROSS_COMPILE to > + the prefix of the cross-compiler, e.g. like this: > + > + $ make CROSS_COMPILE=s390x-linux- > + > Traditionally when vmcores are compressed via the makedumpfile(8) facility > the libz compression library is used, and by default the crash utility > only supports libz. Recently makedumpfile has been enhanced to optionally > diff --git a/configure.c b/configure.c > index 7f6d19e..970a547 100644 > --- a/configure.c > +++ b/configure.c > @@ -154,7 +154,9 @@ void add_extra_lib(char *); > #define TARGET_CFLAGS_MIPS_ON_X86_64 "TARGET_CFLAGS=-m32 -D_FILE_OFFSET_BITS=64" > #define TARGET_CFLAGS_SPARC64 "TARGET_CFLAGS=" > > +#ifndef GDB_TARGET_DEFAULT > #define GDB_TARGET_DEFAULT "GDB_CONF_FLAGS=" > +#endif > #define GDB_TARGET_ARM_ON_X86 "GDB_CONF_FLAGS=--target=arm-elf-linux" > #define GDB_TARGET_ARM_ON_X86_64 "GDB_CONF_FLAGS=--target=arm-elf-linux CFLAGS=-m32" > #define GDB_TARGET_X86_ON_X86_64 "GDB_CONF_FLAGS=--target=i686-pc-linux-gnu CFLAGS=-m32" > @@ -349,42 +351,7 @@ get_current_configuration(struct supported_gdb_version *sp) > static char buf[512]; > char *p; > > -#ifdef __alpha__ > - target_data.target = ALPHA; > -#endif > -#ifdef __i386__ > - target_data.target = X86; > -#endif > -#ifdef __powerpc__ > - target_data.target = PPC; > -#endif > -#ifdef __ia64__ > - target_data.target = IA64; > -#endif > -#ifdef __s390__ > - target_data.target = S390; > -#endif > -#ifdef __s390x__ > - target_data.target = S390X; > -#endif > -#ifdef __powerpc64__ > - target_data.target = PPC64; > -#endif > -#ifdef __x86_64__ > - target_data.target = X86_64; > -#endif > -#ifdef __arm__ > - target_data.target = ARM; > -#endif > -#ifdef __aarch64__ > - target_data.target = ARM64; > -#endif > -#ifdef __mips__ > - target_data.target = MIPS; > -#endif > -#ifdef __sparc_v9__ > - target_data.target = SPARC64; > -#endif > + target_data.target = CONF_DEFAULT_TARGET; > > set_initial_target(sp); > > -- 2.29.2 -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/crash-utility