From fc74faf94cf6384c5cf5cb2ca7ab597865ce5acb Mon Sep 17 00:00:00 2001 From: MSVSphere Packaging Team Date: Fri, 29 Mar 2024 15:25:28 +0300 Subject: [PATCH] import crash-trace-command-3.0-2.el8 --- .crash-trace-command.metadata | 1 + .gitignore | 1 + ...1-Makefile-set-DT_SONAME-to-trace.so.patch | 36 ++++ ...build-failure-on-aarch64-and-ppc64le.patch | 50 ++++++ ...dule-memory-layout-change-on-Linux-6.patch | 125 ++++++++++++++ SPECS/crash-trace-command.spec | 157 ++++++++++++++++++ 6 files changed, 370 insertions(+) create mode 100644 .crash-trace-command.metadata create mode 100644 .gitignore create mode 100644 SOURCES/0001-Makefile-set-DT_SONAME-to-trace.so.patch create mode 100644 SOURCES/0002-Makefile-fix-build-failure-on-aarch64-and-ppc64le.patch create mode 100644 SOURCES/0003-trace-Support-module-memory-layout-change-on-Linux-6.patch create mode 100644 SPECS/crash-trace-command.spec diff --git a/.crash-trace-command.metadata b/.crash-trace-command.metadata new file mode 100644 index 0000000..8f7b9ce --- /dev/null +++ b/.crash-trace-command.metadata @@ -0,0 +1 @@ +b9636e856f96e77b2047e12c3d87991ec88b067c SOURCES/crash-trace-command-3.0.tar.gz diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..340279d --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/crash-trace-command-3.0.tar.gz diff --git a/SOURCES/0001-Makefile-set-DT_SONAME-to-trace.so.patch b/SOURCES/0001-Makefile-set-DT_SONAME-to-trace.so.patch new file mode 100644 index 0000000..208e4d7 --- /dev/null +++ b/SOURCES/0001-Makefile-set-DT_SONAME-to-trace.so.patch @@ -0,0 +1,36 @@ +From 153629a96b07a8ae96b0b28cce100fde9ea1398d Mon Sep 17 00:00:00 2001 +From: HATAYAMA Daisuke +Date: Thu, 28 Jan 2021 00:08:35 -0500 +Subject: [PATCH 1/2] Makefile: set DT_SONAME to trace.so + +Fedora never requires SONAME versioning for plugins according to the +Packaging Guidelines: + + https://docs.fedoraproject.org/en-US/packaging-guidelines/#_downstream_so_name_versioning + + In cases where upstream ships unversioned .so library (so this is + not needed for plugins, drivers, etc.), the packager MUST try to + convince upstream to start versioning it. + +On the other hand, fedpkg lint still prints warning if the shared +library doesn't have DT_SONAME. To surpress this, we set DT_SONAME +field to trace.so for in case. + +Signed-off-by: HATAYAMA Daisuke +--- + Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Makefile b/Makefile +index a9e0a21..b4573b4 100755 +--- a/Makefile ++++ b/Makefile +@@ -28,4 +28,4 @@ INCDIR=/usr/include/crash + all: trace.so + + trace.so: $(INCDIR)/defs.h trace.c +- gcc $(RPM_OPT_FLAGS) -Wall -I$(INCDIR) -nostartfiles -shared -rdynamic -o trace.so trace.c -fPIC -D$(TARGET) $(TARGET_CFLAGS) ++ gcc $(RPM_OPT_FLAGS) -Wall -I$(INCDIR) -nostartfiles -shared -rdynamic -Wl,-z,now -Wl,-soname,trace.so -o trace.so trace.c -fPIC -D$(TARGET) $(TARGET_CFLAGS) +-- +2.29.2 + diff --git a/SOURCES/0002-Makefile-fix-build-failure-on-aarch64-and-ppc64le.patch b/SOURCES/0002-Makefile-fix-build-failure-on-aarch64-and-ppc64le.patch new file mode 100644 index 0000000..14d4767 --- /dev/null +++ b/SOURCES/0002-Makefile-fix-build-failure-on-aarch64-and-ppc64le.patch @@ -0,0 +1,50 @@ +From 17c35d075f067d80fee112ae18365b8defa2ca5a Mon Sep 17 00:00:00 2001 +From: HATAYAMA Daisuke +Date: Fri, 19 Feb 2021 11:38:59 +0900 +Subject: [PATCH 2/2] Makefile: fix build failure on aarch64 and ppc64le + +Currently, there is build failure on aarch64 and ppc64le as follows: + + gcc -O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mcpu=power8 -mtune=power8 -fasynchronous-unwind-tables -fstack-clash-protection -Wall -I/usr/include/crash -nostartfiles -shared -rdynamic -o trace.so trace.c -fPIC -D + gcc: error: macro name missing after '-D' + +The failure is caused by missing arguments for -D option because +TARGET variable is empty. + +This commit fixes the issue by defining TARGET variable properly +according to aarch64 and ppc64le. + +Signed-off-by: HATAYAMA Daisuke +--- + Makefile | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/Makefile b/Makefile +index b4573b4..0d35d4f 100755 +--- a/Makefile ++++ b/Makefile +@@ -6,6 +6,10 @@ ifeq ($(shell arch), ppc64) + TARGET=PPC64 + TARGET_CFLAGS=-m64 + endif ++ifeq ($(shell arch), ppc64le) ++ TARGET=PPC64 ++ TARGET_CFLAGS=-m64 ++endif + ifeq ($(shell arch), ia64) + TARGET=IA64 + TARGET_CFLAGS= +@@ -22,6 +26,10 @@ ifeq ($(shell arch), s390) + TARGET=S390 + TARGET_CFLAGS= + endif ++ifeq ($(shell arch), aarch64) ++ TARGET=ARM64 ++ TARGET_CFLAGS= ++endif + + INCDIR=/usr/include/crash + +-- +2.29.2 + diff --git a/SOURCES/0003-trace-Support-module-memory-layout-change-on-Linux-6.patch b/SOURCES/0003-trace-Support-module-memory-layout-change-on-Linux-6.patch new file mode 100644 index 0000000..be3bb3b --- /dev/null +++ b/SOURCES/0003-trace-Support-module-memory-layout-change-on-Linux-6.patch @@ -0,0 +1,125 @@ +From c5913a960dfa07d64397e6b591e6f0d40ea0b503 Mon Sep 17 00:00:00 2001 +From: HATAYAMA Daisuke +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 +--- + 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 + diff --git a/SPECS/crash-trace-command.spec b/SPECS/crash-trace-command.spec new file mode 100644 index 0000000..ee669fc --- /dev/null +++ b/SPECS/crash-trace-command.spec @@ -0,0 +1,157 @@ +# +# crash core analysis suite +# +%global reponame crash-trace + +Summary: Trace extension module for the crash utility +Name: crash-trace-command +Version: 3.0 +Release: 2%{?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 +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 >= 8.0.3-1 +Requires: trace-cmd +Requires: crash >= 8.0.3-1 + +Patch0: 0001-Makefile-set-DT_SONAME-to-trace.so.patch +Patch1: 0002-Makefile-fix-build-failure-on-aarch64-and-ppc64le.patch +Patch2: 0003-trace-Support-module-memory-layout-change-on-Linux-6.patch + +%description +Command for reading ftrace data from a dumpfile. + +%prep +%setup -q -n %{reponame}-%{version} +%patch -P 0 -p1 -b 0001-Makefile-set-DT_SONAME-to-trace.so.patch +%patch -P 1 -p1 -b 0002-Makefile-fix-build-failure-on-aarch64-and-ppc64le.patch +%patch -P 2 -p1 -b 0003-trace-Support-module-memory-layout-change-on-Linux-6.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 +* Tue Nov 21 2023 Lianbo Jiang - 3.0-2 +- Support module memory layout change on Linux 6.4 + +* Fri Nov 18 2022 Lianbo Jiang - 3.0-1 +- Rebase to upstream v3.0 +- Update to the latest upstream commit + Resolves: rhbz#2119709 + +* Mon Feb 08 2021 Lianbo Jiang - 2.0-18 +- Rename trace_buffer to array_buffer +- Rename ring_buffer to trace_buffer + Resolves: rhbz#1925907 + +* Mon Jul 27 2020 Bhupesh Sharma - 2.0-17 +- Chnage Source/URL to point to the latest github location + Resolves: rhbz#1851746 + +* Tue Apr 28 2019 Dave Anderson - 2.0-16 +- Fix for RHEL7 ftrace_event_call data structure change + Resolves: rhbz#1827734 + +* Wed Sep 19 2018 Dave Anderson - 2.0-15 +- annocheck: link with -Wl,-z,now + Resolves: rhbz#1630558 + +* Mon Aug 13 2018 Dave Anderson - 2.0-14 +- Bump release for mass rebuild + Resolves: rhbz#1615511 + +* Wed Dec 6 2017 Dave Anderson - 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 - 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 - 2.0-10 +- Fix for ftrace symbol name changes in Linux 4.2 + Resolves: rhbz#1265553 + +* Tue Sep 02 2014 Dave Anderson - 2.0-9 +- Add ppc64le support. + Resolves: rhbz#1123995 + +* Fri Jan 24 2014 Daniel Mach - 2.0-8 +- Mass rebuild 2014-01-24 + +* Fri Dec 27 2013 Daniel Mach - 2.0-7 +- Mass rebuild 2013-12-27 + +* Thu Dec 5 2013 Dave Anderson - 2.0-6 +- Add Linux 3.10 support. + Resolves: rhbz#863833 + +* Tue Nov 12 2013 Dave Anderson - 2.0-5 +- Add ARM64 support. + Resolves: rhbz#1028580 + +* Tue Aug 20 2013 Dave Anderson - 2.0-4 +- crash utility has added LZO and snappy compression in addition to zlib + +* Wed May 29 2013 Dave Anderson - 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 - 2.0-2 +- trace-cmd package required +- rpmlint cleanups to this file +- fix compiler warnings for trace.c + +* Wed Nov 21 2012 Qiao Nuohan - 2.0-1 +- update code + Resolves: rhbz#863833 + +* Wed Feb 8 2012 Dave Anderson - 1.0-4 +- Build with RPM_OPT_FLAGS. + Resolves: rhbz#729018 + +* Wed Jun 9 2010 Dave Anderson - 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 - 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 - 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 - 1.0-1.1 +- Rebuilt for RHEL 6 + +* Fri Sep 25 2009 Dave Anderson +- Initial crash-trace-command package +