[Crash-utility] [ANNOUNCE] crash gcore command, version 1.3.0 is released
Dave Anderson
anderson at redhat.com
Tue Nov 4 17:10:05 UTC 2014
----- Original Message -----
> This is the release of crash gcore command, version 1.3.0.
>
> This release newly adds ARM64 and PPC64 supports, thanks to respective
> maintainers for their development of patch sets and verifications at
> each rc release.
Hello Daisuke,
Because Red Hat no longer support 32-bit x86 in RHEL7, I never bothered to
test it. However, in our build system, the 32-bit x86 package does still
get built. And as luck would have it, it fails to build, because the
user_i387_struct is not defined for X86:
# make -f gcore.mk
make[1]: Entering directory `/root/crash-gcore-command-1.3.0'
gcc -D_FILE_OFFSET_BITS=64 -Wall -I/usr/include/crash -I./libgcore -fPIC -DX86 -DVERSION='"1.3.0"' -DRELEASE_DATE='"4 Nov 2014"' -DPERIOD='"2010, 2011, 2012, 2013, 2014"' -c -o libgcore/gcore_coredump.o libgcore/gcore_coredump.c
gcc -D_FILE_OFFSET_BITS=64 -Wall -I/usr/include/crash -I./libgcore -fPIC -DX86 -DVERSION='"1.3.0"' -DRELEASE_DATE='"4 Nov 2014"' -DPERIOD='"2010, 2011, 2012, 2013, 2014"' -c -o libgcore/gcore_coredump_table.o libgcore/gcore_coredump_table.c
gcc -D_FILE_OFFSET_BITS=64 -Wall -I/usr/include/crash -I./libgcore -fPIC -DX86 -DVERSION='"1.3.0"' -DRELEASE_DATE='"4 Nov 2014"' -DPERIOD='"2010, 2011, 2012, 2013, 2014"' -c -o libgcore/gcore_dumpfilter.o libgcore/gcore_dumpfilter.c
gcc -D_FILE_OFFSET_BITS=64 -Wall -I/usr/include/crash -I./libgcore -fPIC -DX86 -DVERSION='"1.3.0"' -DRELEASE_DATE='"4 Nov 2014"' -DPERIOD='"2010, 2011, 2012, 2013, 2014"' -c -o libgcore/gcore_elf_struct.o libgcore/gcore_elf_struct.c
gcc -D_FILE_OFFSET_BITS=64 -Wall -I/usr/include/crash -I./libgcore -fPIC -DX86 -DVERSION='"1.3.0"' -DRELEASE_DATE='"4 Nov 2014"' -DPERIOD='"2010, 2011, 2012, 2013, 2014"' -c -o libgcore/gcore_global_data.o libgcore/gcore_global_data.c
gcc -D_FILE_OFFSET_BITS=64 -Wall -I/usr/include/crash -I./libgcore -fPIC -DX86 -DVERSION='"1.3.0"' -DRELEASE_DATE='"4 Nov 2014"' -DPERIOD='"2010, 2011, 2012, 2013, 2014"' -c -o libgcore/gcore_regset.o libgcore/gcore_regset.c
gcc -D_FILE_OFFSET_BITS=64 -Wall -I/usr/include/crash -I./libgcore -fPIC -DX86 -DVERSION='"1.3.0"' -DRELEASE_DATE='"4 Nov 2014"' -DPERIOD='"2010, 2011, 2012, 2013, 2014"' -c -o libgcore/gcore_verbose.o libgcore/gcore_verbose.c
gcc -D_FILE_OFFSET_BITS=64 -Wall -I/usr/include/crash -I./libgcore -fPIC -DX86 -DVERSION='"1.3.0"' -DRELEASE_DATE='"4 Nov 2014"' -DPERIOD='"2010, 2011, 2012, 2013, 2014"' -c -o libgcore/gcore_x86.o libgcore/gcore_x86.c
libgcore/gcore_x86.c: In function ‘gcore_x86_get_thread_struct_fpu_thread_xstate_size’:
libgcore/gcore_x86.c:580: error: invalid application of ‘sizeof’ to incomplete type ‘struct user_i387_struct’
make[1]: *** [libgcore/gcore_x86.o] Error 1
make[1]: Leaving directory `/root/crash-gcore-command-1.3.0'
make: *** [gcore.so] Error 2
#
As I understand it, it can be fixed like so:
--- crash-gcore-command-1.3.0/libgcore/gcore_x86.c.orig
+++ crash-gcore-command-1.3.0/libgcore/gcore_x86.c
@@ -577,7 +577,11 @@ static ulong gcore_x86_get_thread_struct
static ulong gcore_x86_get_thread_struct_fpu_thread_xstate_size(void)
{
+#ifdef X86
+ return sizeof(struct user_i387_ia32_struct);
+#else
return sizeof(struct user_i387_struct);
+#endif
}
static ulong gcore_x86_get_thread_struct_thread_xstate(struct task_context *tc)
But how do you want to handle this?
Dave
>
> The remaining changes are all bugfixes.
>
> # The ChangeLog includes those that appeared at each rc release.
>
> ChangeLog:
>
> [new features]
>
> - Add ARM64 support. In addition to native ARM64 build, like crash
> utility, we can build x86_64 executable of crash gcore command for
> ARM64 crash dump by make target=ARM64, just like crash utility.
> (anderson at redhat.com)
>
> - Add ARM64 compat mode support. This allows gcore to create
> corefiles for tasks running in 32-bit compatible mode on ARM64.
> (weishu at marvell.com)
>
> - Add PPC64 support. This includes both big-endian and little-endian
> formats.
> (mtoman at redhat.com, anderson at redhat.com)
>
> [bugfixes]
>
> - Correct a read buffer size for NT_FPREGSET as sizeof(struct
> user_i387_struct). So far we had used sizeof(union thread_xstate)
> falsely as a read buffer size but it had accidentally been equal to
> sizeof(struct user_i387_struct). However, the following patch
> extended union thread_xstate and sizeof(union thread_xstate) became
> larger than sizeof(struct user_i387_struct):
>
> commit e7d820a5e549b3eb6c3f9467507566565646a669
> Author: Qiaowei Ren <qiaowei.ren at intel.com>
> Date: Thu Dec 5 17:15:34 2013 +0800
>
> x86, xsave: Support eager-only xsave features, add MPX support
>
> Some features, like Intel MPX, work only if the kernel uses eagerfpu
> model. So we should force eagerfpu on unless the user has explicitly
> disabled it.
>
> Add definitions for Intel MPX and add it to the supported list.
>
> [ hpa: renamed XSTATE_FLEXIBLE to XSTATE_LAZY and added comments ]
>
> Signed-off-by: Qiaowei Ren <qiaowei.ren at intel.com>
> Link:
> http://lkml.kernel.org/r/9E0BE1322F2F2246BD820DA9FC397ADE014A6115@SHSMSX102.ccr.corp.intel.com
> Signed-off-by: H. Peter Anvin <hpa at linux.intel.com>
>
> Without this patch, for vmcores whose kernel versions are v3.14 or
> later, gcore results in segmentation fault due to a buffer overrite
> of NT_FPREGSET.
> (d.hatayama at jp.fujitsu.com)
>
> - Although ELF_DATA is defined in gcore_defs.h, ELFDATA2LSB is used
> directly at elf{64,32}_fill_elf_header(). There's so far been no
> problem since the exisitng supported architectures are all
> little-endian systems. Fix this to support PPC64 that uses
> little-endian format.
> (anderson at redhat.com)
>
> - Fix a bug that registers in NT_PRSTATUS note information is
> broken. This had been since v1.2.2 when O(1) note informaiton
> collection was added. Without this fix, we can never get reliable
> register values for failure analysis.
> (weishu at marvell.com)
>
> - Fix a bug that NT_386_IOPERM note information is not collected. So
> far, ioperm_get() had always returned 1. As a result, NT_386_IOPERM
> note information had never been not included in a generated core
> file even if it is available for a given task on a given crash
> dump.
> (d.hatayama at jp.fujitsu.com)
>
> - Add new member offset initialization for struct
> nsproxy::pid_ns_for_children. In upstream, the following patch
> renamed struct nsproxy::pid_ns into struct
> nsproxy::pid_ns_for_children.
>
> $ git log -1 c2b1df2e
> commit c2b1df2eb42978073ec27c99cc199d20ae48b849
> Author: Andy Lutomirski <luto at amacapital.net>
> Date: Thu Aug 22 11:39:16 2013 -0700
>
> Rename nsproxy.pid_ns to nsproxy.pid_ns_for_children
>
> nsproxy.pid_ns is *not* the task's pid namespace. The name
> should clarify that.
>
> This makes it more obvious that setns on a pid namespace is weird --
> it won't change the pid namespace shown in procfs.
>
> Signed-off-by: Andy Lutomirski <luto at amacapital.net>
> Reviewed-by: "Eric W. Biederman" <ebiederm at xmission.com>
> Signed-off-by: David S. Miller <davem at davemloft.net>
>
> Without this fix, gcore exited abnormally at its initialization
> part and so core file is never generated.
> (d.hatayama at jp.fujitsu.com)
>
> - Fix a bug that a wrong way of checking return value of
> fopen(). fopen() returns NULL in case of error, but gcore had seen
> it as returning a minus integer. As a result, gcore continues
> execution after the check even in case of error and then exits
> abnormally at the first call of fwrite() with the broken file
> pointer gcore failed to open.
>
> From users' viewpoint, we face this bug when trying to overwrite an
> existing corefile with more priviledged permission and resulting in
> EPERM failure.
> (d.hatayama at jp.fujitsu.com)
>
> MD5 CheckSum:
>
> $ md5sum ./crash-gcore-command-1.3.0.tar.gz
> d530b7211793f1541a0da5968a305f4d ./crash-gcore-command-1.3.0.tar.gz
>
> --
> Thanks.
> HATAYAMA, Daisuke
>
> --
> Crash-utility mailing list
> Crash-utility at redhat.com
> https://www.redhat.com/mailman/listinfo/crash-utility
More information about the Crash-utility
mailing list