This patch enables crash on PPC64 to analyze the cores generated
on a PPC32 machine. I plan to look at adding support for PPC32 Kdump
core in the following patches. Running crash on a PPC32 board is not
a good thing to do. Hence using a PPC64 machine to do the same.

Signed-off-by: Suzuki K. Poulose <suz...@in.ibm.com>
---

 Makefile        |    6 +++---
 configure.c     |   14 +++++++++++++-
 gdb-7.3.1.patch |    4 ++--
 netdump.c       |    6 ++++++
 4 files changed, 24 insertions(+), 6 deletions(-)

diff --git a/Makefile b/Makefile
index 923844e..eee5aee 100644
--- a/Makefile
+++ b/Makefile
@@ -27,7 +27,7 @@ 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/)
-ifeq ($(ARCH), ppc64)
+ifeq (${TARGET}, ppc64)
 CONF_FLAGS = -m64
 endif
 
@@ -256,8 +256,8 @@ gdb_merge: force
        @if [ ! -f ${GDB}/config.status ]; then \
          (cd ${GDB}; ./configure ${GDB_CONF_FLAGS} 
--with-separate-debug-dir=/usr/lib/debug \
            --with-bugurl="" --with-expat=no --with-python=no; \
-         make --no-print-directory; echo ${TARGET} > crash.target) \
-       else (cd ${GDB}/gdb; make --no-print-directory;); fi
+         make --no-print-directory TARGET=${TARGET}; echo ${TARGET} > 
crash.target) \
+       else (cd ${GDB}/gdb; make --no-print-directory TARGET=${TARGET};); fi
        @if [ ! -f ${GDB}/gdb/libgdb.a ]; then \
          echo; echo "gdb build failed: ${GDB}/gdb/libgdb.a does not exist"; \
          echo; exit 1; fi
diff --git a/configure.c b/configure.c
index 00e7bb2..a1858a4 100755
--- a/configure.c
+++ b/configure.c
@@ -134,11 +134,13 @@ char *get_extra_flags(char *);
 #define TARGET_CFLAGS_ARM_ON_X86     "TARGET_CFLAGS=-D_FILE_OFFSET_BITS=64"
 #define TARGET_CFLAGS_ARM_ON_X86_64  "TARGET_CFLAGS=-m32 
-D_FILE_OFFSET_BITS=64"
 #define TARGET_CFLAGS_X86_ON_X86_64  "TARGET_CFLAGS=-m32 
-D_FILE_OFFSET_BITS=64"
+#define TARGET_CFLAGS_PPC_ON_PPC64   "TARGET_CFLAGS=-m32 
-D_FILE_OFFSET_BITS=64 -fPIC"
 
 #define GDB_TARGET_DEFAULT        "GDB_CONF_FLAGS="
 #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"
+#define GDB_TARGET_PPC_ON_PPC64   "GDB_CONF_FLAGS=--target=ppc-elf-linux 
CFLAGS=-m32"
 
 /*
  *  The original plan was to allow the use of a particular version
@@ -361,6 +363,12 @@ get_current_configuration(struct supported_gdb_version *sp)
                         *  Build an X86 crash binary on an X86_64 host.
                         */
                        target_data.target = X86;
+               } else if ((target_data.target == PPC64) &&
+                       (name_to_target((char *)target_data.target_as_param) == 
PPC)) {
+                       /*
+                        *  Build an PPC crash binary on an PPC64 host.
+                        */
+                       target_data.target = PPC;
                } else if (name_to_target((char *)target_data.target_as_param) 
==
                        target_data.host) {
                        if ((target_data.initial_gdb_target != UNKNOWN) &&
@@ -556,7 +564,11 @@ build_configure(struct supported_gdb_version *sp)
                break;
        case PPC:
                target = TARGET_PPC;
-               target_CFLAGS = TARGET_CFLAGS_PPC;
+               if (target_data.host == PPC64) {
+                        target_CFLAGS = TARGET_CFLAGS_PPC_ON_PPC64;
+                       gdb_conf_flags = GDB_TARGET_PPC_ON_PPC64;
+               } else
+                       target_CFLAGS = TARGET_CFLAGS_PPC;
                break;
        case IA64:
                target = TARGET_IA64;
diff --git a/gdb-7.3.1.patch b/gdb-7.3.1.patch
index 013ed8f..7a8d824 100644
--- a/gdb-7.3.1.patch
+++ b/gdb-7.3.1.patch
@@ -1209,7 +1209,7 @@
  AS_FOR_BUILD = @AS_FOR_BUILD@
  CC_FOR_BUILD = @CC_FOR_BUILD@
  CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@
-+ifeq ($(shell arch), ppc64)
++ifeq (${TARGET}, ppc64)
 +CFLAGS_FOR_BUILD += -m64 -fPIC
 +endif
  CXXFLAGS_FOR_BUILD = @CXXFLAGS_FOR_BUILD@
@@ -1219,7 +1219,7 @@
  GNATMAKE = @GNATMAKE@
  
  CFLAGS = @CFLAGS@
-+ifeq ($(shell arch), ppc64)
++ifeq (${TARGET}, ppc64)
 +CFLAGS += -m64 -fPIC
 +endif
  LDFLAGS = @LDFLAGS@
diff --git a/netdump.c b/netdump.c
index 4011f36..c0ee9ae 100644
--- a/netdump.c
+++ b/netdump.c
@@ -183,6 +183,12 @@ is_netdump(char *file, ulong source_query)
                                goto bailout;
                        break;
 
+               case EM_PPC:
+                       if (machine_type_mismatch(file, "PPC", NULL,
+                           source_query))
+                               goto bailout;
+                       break;
+
                default:
                        if (machine_type_mismatch(file, "(unknown)", NULL,
                            source_query))

--
Crash-utility mailing list
Crash-utility@redhat.com
https://www.redhat.com/mailman/listinfo/crash-utility

Reply via email to