summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2024-08-01 13:50:57 +0000
committerCoprDistGit <infra@openeuler.org>2024-08-01 13:50:57 +0000
commit27042feea242dec8bc28094d50fadadea2e270ca (patch)
tree7aebdb09b94024d2d069545f36ffc07051aaf4b7
parentfb8cdbb7e45d2a3b5a6487fcaf784620aabd132a (diff)
automatic import of crash-trace-commandopeneuler24.03_LTS
-rw-r--r--.gitignore1
-rw-r--r--0001-Makefile-set-DT_SONAME-to-trace.so.patch36
-rw-r--r--0002-Makefile-fix-build-failure-on-aarch64-and-ppc64le.patch50
-rw-r--r--0003-trace-Support-module-memory-layout-change-on-Linux-6.patch126
-rw-r--r--crash-trace-command.spec61
-rw-r--r--sources1
6 files changed, 275 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..a93eb47 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/crash-trace-command-3.0.tar.gz
diff --git a/0001-Makefile-set-DT_SONAME-to-trace.so.patch b/0001-Makefile-set-DT_SONAME-to-trace.so.patch
new file mode 100644
index 0000000..208e4d7
--- /dev/null
+++ b/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 <d.hatayama@fujitsu.com>
+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 <d.hatayama@fujitsu.com>
+---
+ 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/0002-Makefile-fix-build-failure-on-aarch64-and-ppc64le.patch b/0002-Makefile-fix-build-failure-on-aarch64-and-ppc64le.patch
new file mode 100644
index 0000000..14d4767
--- /dev/null
+++ b/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 <d.hatayama@fujitsu.com>
+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 <d.hatayama@fujitsu.com>
+---
+ 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/0003-trace-Support-module-memory-layout-change-on-Linux-6.patch b/0003-trace-Support-module-memory-layout-change-on-Linux-6.patch
new file mode 100644
index 0000000..205ae1e
--- /dev/null
+++ b/0003-trace-Support-module-memory-layout-change-on-Linux-6.patch
@@ -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
+
diff --git a/crash-trace-command.spec b/crash-trace-command.spec
new file mode 100644
index 0000000..91578f5
--- /dev/null
+++ b/crash-trace-command.spec
@@ -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
diff --git a/sources b/sources
new file mode 100644
index 0000000..c469969
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+bdb26679893c46792d261dc4de74b8df crash-trace-command-3.0.tar.gz