Compare commits

...

No commits in common. "c8" and "c9s" have entirely different histories.
c8 ... c9s

10 changed files with 199 additions and 154 deletions

View File

@ -1 +1 @@
b9636e856f96e77b2047e12c3d87991ec88b067c SOURCES/crash-trace-command-3.0.tar.gz
b9636e856f96e77b2047e12c3d87991ec88b067c crash-trace-command-3.0.tar.gz

2
.gitignore vendored
View File

@ -1 +1 @@
SOURCES/crash-trace-command-3.0.tar.gz
/crash-trace-command-3.0.tar.gz

View File

@ -0,0 +1,126 @@
From c5913a960dfa07d64397e6b591e6f0d40ea0b503 Mon Sep 17 00:00:00 2001
From: HATAYAMA Daisuke <d.hatayama@fujitsu.com>
Date: Tue, 26 Sep 2023 02:55:49 -0400
Subject: [PATCH] trace: Support module memory layout change on Linux 6.4
Linux kernel introduced new module memory layout on Linux 6.4 at the
commit ac3b432 (module: replace module_layout with module_memory) and
crash utility supported it at the commit 7750e61 (Support module
memory layout change on Linux 6.4).
In the change, crash utility changed definition and usage of data
structure for kernel modules. However, crash trace also refers to the
data structures. As a result, with the crash utility with the change,
crash trace command results in segmentation fault:
crash> extend trace.so
/usr/lib64/crash/extensions/trace.so: shared object loaded
crash> trace show
Segmentation fault (core dumped)
To fix this issue, let's support the new definition and usage of
struct load_module in crash trace. This is at the same time intended
for crash trace to support the new module memory layout of the Linux
kernel.
On the other hand, there is still inevitable dependency left to size
of struct load_module, one of the data structures of crash utility, in
crash trace. struct symbol_table_data holds an array of objects of
struct load_module in member variable load_modules and we need to know
size of struct load_module in advance to refer to its elements.
struct symbol_table_data {
...snip...
int mods_installed;
struct load_module *current;
struct load_module *load_modules;
Due to this, once crash trace is built with the defs.h including
change of size of struct load_module, it can never be used with the
older crash utility that was built with a different size of struct
load_module.
Because there is no preferable way to tackle the dependency without
altering implementation of crash utility, we have no choice but accept
breaking backward-compatibility for the time being.
Signed-off-by: HATAYAMA Daisuke <d.hatayama@fujitsu.com>
Signed-off-by: Lianbo Jiang <lijiang@redhat.com>
---
trace.c | 49 +++++++++++++++++++++++++++++++++++++++++++++----
1 file changed, 45 insertions(+), 4 deletions(-)
diff --git a/trace.c b/trace.c
index c33907f98b00..9e51707da5f7 100644
--- a/trace.c
+++ b/trace.c
@@ -2219,14 +2219,11 @@ fail:
return -1;
}
-static int save_proc_kallsyms(int fd)
+static void __save_proc_kallsyms_mod_legacy(void)
{
int i;
struct syment *sp;
- for (sp = st->symtable; sp < st->symend; sp++)
- tmp_fprintf("%lx %c %s\n", sp->value, sp->type, sp->name);
-
for (i = 0; i < st->mods_installed; i++) {
struct load_module *lm = &st->load_modules[i];
@@ -2239,6 +2236,50 @@ static int save_proc_kallsyms(int fd)
sp->name, lm->mod_name);
}
}
+}
+
+#ifdef MODULE_MEMORY
+static void __save_proc_kallsyms_mod_v6_4(void)
+{
+ int i, t;
+ struct syment *sp;
+
+ for (i = 0; i < st->mods_installed; i++) {
+ struct load_module *lm = &st->load_modules[i];
+
+ for_each_mod_mem_type(t) {
+ if (!lm->symtable[t])
+ continue;
+
+ for (sp = lm->symtable[t]; sp <= lm->symend[t]; sp++) {
+ if (!strncmp(sp->name, "_MODULE_", strlen("_MODULE_")))
+ continue;
+
+ /* Currently sp->type for modules is not trusted */
+ tmp_fprintf("%lx %c %s\t[%s]\n", sp->value, 'm',
+ sp->name, lm->mod_name);
+ }
+ }
+ }
+}
+#else
+#define MODULE_MEMORY() (0)
+static inline void __save_proc_kallsyms_mod_v6_4(void)
+{
+}
+#endif
+
+static int save_proc_kallsyms(int fd)
+{
+ struct syment *sp;
+
+ for (sp = st->symtable; sp < st->symend; sp++)
+ tmp_fprintf("%lx %c %s\n", sp->value, sp->type, sp->name);
+
+ if (MODULE_MEMORY())
+ __save_proc_kallsyms_mod_v6_4();
+ else
+ __save_proc_kallsyms_mod_legacy();
if (tmp_file_record_size4(fd))
return -1;
--
2.41.0

3
README.md Normal file
View File

@ -0,0 +1,3 @@
# crash-trace-command
The crash-trace-command package

View File

@ -1,152 +0,0 @@
#
# crash core analysis suite
#
%global reponame crash-trace
Summary: Trace extension module for the crash utility
Name: crash-trace-command
Version: 3.0
Release: 1%{?dist}
License: GPLv2
Group: Development/Debuggers
Source: https://github.com/fujitsu/crash-trace/archive/v%{version}/%{name}-%{version}.tar.gz
URL: https://github.com/fujitsu/crash-trace
# Vendor: Fujitsu Limited
# Packager: Qiao Nuohan <qiaonuohan@cn.fujitsu.com>
ExclusiveOS: Linux
ExclusiveArch: x86_64 %{ix86} ppc64 ia64 s390 s390x aarch64 ppc64le
Buildroot: %{_tmppath}/%{name}-root
BuildRequires: zlib-devel lzo-devel snappy-devel
BuildRequires: crash-devel >= 7.2.0-2
Requires: trace-cmd
Requires: crash >= 7.2.0-2
Patch0: 0001-Makefile-set-DT_SONAME-to-trace.so.patch
Patch1: 0002-Makefile-fix-build-failure-on-aarch64-and-ppc64le.patch
%description
Command for reading ftrace data from a dumpfile.
%prep
%setup -q -n %{reponame}-%{version}
%patch0 -p1 -b 0001-Makefile-set-DT_SONAME-to-trace.so.patch
%patch1 -p1 -b 0002-Makefile-fix-build-failure-on-aarch64-and-ppc64le.patch
%build
make
%install
mkdir -p %{buildroot}%{_libdir}/crash/extensions/
cp %{_builddir}/%{reponame}-%{version}/trace.so %{buildroot}%{_libdir}/crash/extensions/
%clean
rm -rf %{buildroot}
%files
%defattr(-,root,root)
%{_libdir}/crash/extensions/trace.so
%doc COPYING
%changelog
* Fri Nov 18 2022 Lianbo Jiang <lijiang@redhat.com> - 3.0-1
- Rebase to upstream v3.0
- Update to the latest upstream commit
Resolves: rhbz#2119709
* Mon Feb 08 2021 Lianbo Jiang <lijiang@redhat.com> - 2.0-18
- Rename trace_buffer to array_buffer
- Rename ring_buffer to trace_buffer
Resolves: rhbz#1925907
* Mon Jul 27 2020 Bhupesh Sharma <bhsharma@redhat.com> - 2.0-17
- Chnage Source/URL to point to the latest github location
Resolves: rhbz#1851746
* Tue Apr 28 2019 Dave Anderson <anderson@redhat.com> - 2.0-16
- Fix for RHEL7 ftrace_event_call data structure change
Resolves: rhbz#1827734
* Wed Sep 19 2018 Dave Anderson <anderson@redhat.com> - 2.0-15
- annocheck: link with -Wl,-z,now
Resolves: rhbz#1630558
* Mon Aug 13 2018 Dave Anderson <anderson@redhat.com> - 2.0-14
- Bump release for mass rebuild
Resolves: rhbz#1615511
* Wed Dec 6 2017 Dave Anderson <anderson@redhat.com> - 2.0.13
- Build requires crash-devel-7.2.0-2 and usage requires crash-7.2.0-2
because of load_module structure change.
Resolves: rhbz#1520825
* Sun Apr 16 2017 Dave Anderson <anderson@redhat.com> - 2.0.12
- Differentiate ppc64 .ring_buffer_read text symbol from ring_buffer_read data symbol
- Fix for ring_buffer_per_cpu.nr_pages size change on big-endian systems
- Fix for Linux 4.7 change to the TRACE_EVENT_FL_TRACEPOINT flag
Resolves: rhbz#1441914
Resolves: rhbz#1440726
* Thu Feb 25 2016 Dave Anderson <anderson@redhat.com> - 2.0-10
- Fix for ftrace symbol name changes in Linux 4.2
Resolves: rhbz#1265553
* Tue Sep 02 2014 Dave Anderson <anderson@redhat.com> - 2.0-9
- Add ppc64le support.
Resolves: rhbz#1123995
* Fri Jan 24 2014 Daniel Mach <dmach@redhat.com> - 2.0-8
- Mass rebuild 2014-01-24
* Fri Dec 27 2013 Daniel Mach <dmach@redhat.com> - 2.0-7
- Mass rebuild 2013-12-27
* Thu Dec 5 2013 Dave Anderson <anderson@redhat.com> - 2.0-6
- Add Linux 3.10 support.
Resolves: rhbz#863833
* Tue Nov 12 2013 Dave Anderson <anderson@redhat.com> - 2.0-5
- Add ARM64 support.
Resolves: rhbz#1028580
* Tue Aug 20 2013 Dave Anderson <anderson@redhat.com> - 2.0-4
- crash utility has added LZO and snappy compression in addition to zlib
* Wed May 29 2013 Dave Anderson <anderson@redhat.com> - 2.0-3
- Replace obsolete _init() and _fini() functions.
- Fix possible segmentation violation on calloc() failure.
- Initialize trace_dat to avoid compiler warning.
* Mon Nov 26 2012 Dave Anderson <anderson@redhat.com> - 2.0-2
- trace-cmd package required
- rpmlint cleanups to this file
- fix compiler warnings for trace.c
* Wed Nov 21 2012 Qiao Nuohan <qiaonuohan@cn.fujitsu.com> - 2.0-1
- update code
Resolves: rhbz#863833
* Wed Feb 8 2012 Dave Anderson <anderson@redhat.com> - 1.0-4
- Build with RPM_OPT_FLAGS.
Resolves: rhbz#729018
* Wed Jun 9 2010 Dave Anderson <anderson@redhat.com> - 1.0-3
- Remove trace_dump.patch, which requires a kernel later than
the RHEL6 base of 2.6.32.
Resolves: rbhz#601536
* Mon May 24 2010 Dave Anderson <anderson@redhat.com> - 1.0-2
- Fix for segmentation violation with "trace show -c cpu" command,
and add "trace dump -t" command.
Resolves: rbhz#592887
* Wed Dec 09 2009 Dave Anderson <anderson@redhat.com> - 1.0-1.2
- fix Makefile to account for s390 build
- change exclusive arch entry from i386 to {ix86}
- Resolves: rbhz#545564
* Tue Dec 08 2009 Dennis Gregorovic <dgregor@redhat.com> - 1.0-1.1
- Rebuilt for RHEL 6
* Fri Sep 25 2009 Dave Anderson <anderson@redhat.com>
- Initial crash-trace-command package

61
crash-trace-command.spec Normal file
View File

@ -0,0 +1,61 @@
%global reponame crash-trace
Summary: Trace extension module for the crash utility
Name: crash-trace-command
Version: 3.0
Release: 7%{?dist}
License: GPLv2
Source: https://github.com/fujitsu/crash-trace/archive/v%{version}/%{name}-%{version}.tar.gz
URL: https://github.com/fujitsu/crash-trace
ExclusiveOS: Linux
ExclusiveArch: aarch64 ppc64le s390x x86_64
BuildRequires: crash-devel >= 8.0.4-1
BuildRequires: gcc
Requires: trace-cmd
Requires: crash >= 8.0.4-1
Patch0001: 0001-Makefile-set-DT_SONAME-to-trace.so.patch
Patch0002: 0002-Makefile-fix-build-failure-on-aarch64-and-ppc64le.patch
Patch0003: 0003-trace-Support-module-memory-layout-change-on-Linux-6.patch
%description
Command for reading ftrace data from a dump file.
%prep
%autosetup -n %{reponame}-%{version}
%build
%make_build
%install
install -m 0755 -d %{buildroot}%{_libdir}/crash/extensions
install -m 0755 -t %{buildroot}%{_libdir}/crash/extensions %{_builddir}/%{reponame}-%{version}/trace.so
%files
%dir %{_libdir}/crash
%dir %{_libdir}/crash/extensions
%{_libdir}/crash/extensions/trace.so
%license COPYING
%changelog
* Mon Nov 20 2023 Lianbo Jiang <lijiang@redhat.com> - 3.0-7
- Support module memory layout change on Linux 6.4
* Wed Dec 15 2021 Lianbo Jiang <lijiang@redhat.com> - 3.0-6
- Rebuild for the compatibility issue
* Thu Dec 09 2021 Lianbo Jiang <lijiang@redhat.com> - 3.0-5
- Fix the hardening issue "FAIL: bind-now test because not linked with -Wl,-z,now"
* Mon Aug 09 2021 Mohan Boddu <mboddu@redhat.com> - 3.0-4
- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags
Related: rhbz#1991688
* Thu Apr 15 2021 Mohan Boddu <mboddu@redhat.com> - 3.0-3
- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937
* Fri Feb 19 2021 HATAYAMA Daisuke <d.hatayama@fujitsu.com> - 3.0-2
- Makefile: set DT_SONAME to trace.so
- Makefile: fix build failure on aarch64 and ppc64le
* Fri Jan 22 2021 HATAYAMA Daisuke <d.hatayama@fujitsu.com> - 3.0-1
- Initial crash-trace-command package

6
gating.yaml Normal file
View File

@ -0,0 +1,6 @@
--- !Policy
product_versions:
- rhel-9
decision_context: osci_compose_gate
rules:
- !PassingTestCaseRule {test_case_name: kernel-qe.kernel-ci.general-crash.tier0.functional}

1
sources Normal file
View File

@ -0,0 +1 @@
SHA512 (crash-trace-command-3.0.tar.gz) = 1158b276684f664b94e0a1075341331c3f043b4d452c4c05f3e91f3e81c822033b1d6a478d816c8e0d6c995faa2c1f303929cb4d7d9ff3cb891929d3067eba7d