import systemtap-4.2-6.el8

This commit is contained in:
CentOS Sources 2020-04-28 04:51:45 -04:00 committed by Andrew Lukoshko
parent a37271da03
commit 92b503b22e
9 changed files with 201 additions and 244 deletions

2
.gitignore vendored
View File

@ -1 +1 @@
SOURCES/systemtap-4.1.tar.gz
SOURCES/systemtap-4.2.tar.gz

View File

@ -1 +1 @@
d3653e17960ac8bb23be3bb57dfa4b17dcb9d27d SOURCES/systemtap-4.1.tar.gz
efdb0d6e09ebdfa2acbfdb725542885db2195bb6 SOURCES/systemtap-4.2.tar.gz

View File

@ -1,51 +0,0 @@
commit 83071bc877b462eacca309fa49c9e8112fc16bdf
Author: Jafeer Uddin <juddin@redhat.com>
Date: Thu May 9 16:18:46 2019 -0400
PR23074: fix guru mode issue with generated calls to register get/set
diff --git a/elaborate.cxx b/elaborate.cxx
index 9ebf30b..fcd1d1d 100644
--- a/elaborate.cxx
+++ b/elaborate.cxx
@@ -3073,7 +3073,7 @@ public:
}
// Don't allow /* guru */ functions unless caller is privileged.
- if (!call->tok->location.file->privileged &&
+ if (!call->synthetic && !call->tok->location.file->privileged &&
s->tagged_p ("/* guru */"))
throw SEMANTIC_ERROR (_("function may not be used unless -g is specified"),
call->tok);
diff --git a/loc2stap.cxx b/loc2stap.cxx
index c1a48d0..d4fd051 100644
--- a/loc2stap.cxx
+++ b/loc2stap.cxx
@@ -1745,6 +1745,7 @@ location_context::handle_GNU_parameter_ref (Dwarf_Op expr)
// it and we want to be able to restore the registers back.
functioncall *get_ptregs = new functioncall;
get_ptregs->tok = e->tok;
+ get_ptregs->synthetic = true;
if (this->userspace_p)
get_ptregs->function = std::string("__get_uregs");
else
@@ -1870,6 +1871,7 @@ location_context::handle_GNU_parameter_ref (Dwarf_Op expr)
// Translation done, restore the pt_regs to its original value
functioncall *set_ptregs = new functioncall;
set_ptregs->tok = e->tok;
+ set_ptregs->synthetic = true;
if (this->userspace_p)
set_ptregs->function = std::string("__set_uregs");
else
diff --git a/staptree.h b/staptree.h
index d63156f..2735808 100644
--- a/staptree.h
+++ b/staptree.h
@@ -464,6 +464,7 @@ struct functioncall: public expression
interned_string function;
std::vector<expression*> args;
std::vector<functiondecl*> referents;
+ bool synthetic;
functioncall ();
void print (std::ostream& o) const;
void visit (visitor* u);

View File

@ -1,148 +0,0 @@
commit e037dc796de75b0d9e7e893fba6a39c2837aca2b
Author: Serhei Makarov <smakarov@redhat.com>
Date: Wed Jul 31 13:25:19 2019 -0400
stapbpf pr23875 bugfix :: allocate actual keysize in foreach to avoid stack clobber
* bpf-translate.cxx (bpf_unparser::visit_foreach_loop): allocate actual keysize.
* testsuite/systemtap.bpf/bpf_tests/foreach_string.stp: new partial PR23858 testcase,
added only the parts necessary to trigger a segfault when bugfix not applied.
diff --git a/bpf-translate.cxx b/bpf-translate.cxx
index b254be693..720e23d4e 100644
--- a/bpf-translate.cxx
+++ b/bpf-translate.cxx
@@ -1797,7 +1797,7 @@ bpf_unparser::visit_foreach_loop(foreach_loop* s)
this_prog.mk_jcond (this_ins, NE, this_prog.lookup_reg(BPF_REG_0), i0,
join_block, load_block);
- this_prog.use_tmp_space(16);
+ this_prog.use_tmp_space(2*keysize);
emit_jmp(load_block);
diff --git a/testsuite/systemtap.bpf/bpf_tests/foreach_string.stp b/testsuite/systemtap.bpf/bpf_tests/foreach_string.stp
new file mode 100644
index 000000000..956b1b409
--- /dev/null
+++ b/testsuite/systemtap.bpf/bpf_tests/foreach_string.stp
@@ -0,0 +1,119 @@
+global a[10], b[10]
+
+probe begin {
+ printf("BEGIN\n")
+
+ a["p"] = -1
+ a["q"] = 0
+ a["r"] = 1
+
+ b[-1] = "p"
+ b[0] = "q"
+ b[1] = "r"
+
+ exit()
+}
+
+global flag = 1
+global _flag = 1
+
+// XXX Split into separate probes due to stack size constraint.
+global end_probes = 0 // TODO: Remove this workaround for PR24812.
+
+probe end(1) {
+ printf("first end probe\n")
+
+ /* TODO: Requires PR23858.
+ foreach (ks- in a limit -10)
+ flag = 0
+
+ foreach (ks- in a limit 0)
+ flag = 0
+
+ found = 0
+ foreach (ks+ in a limit 1) {
+ found++
+ if (a[ks] != -1)
+ flag = 0
+ }
+
+ foreach (k in b+ limit 1) {
+ found++
+ if (k != -1)
+ flag = 0
+ }
+ if (found != 2)
+ flag = 0
+
+ foreach (ks1 in a limit 0)
+ foreach (ks2 in a)
+ flag = 0
+
+ foreach (ks1 in a)
+ foreach (ks2 in a limit 0)
+ flag = 0
+ */
+
+ x = 0
+ foreach (ks in a)
+ x += a[ks]
+ flag = flag && x == 0
+
+ if (end_probes == 0)
+ end_probes++
+ // { end_probes++; next; } // TODO: Investigate using next here.
+ else if (flag)
+ printf("END PASS\n")
+ else
+ printf("END FAIL\n")
+}
+
+probe end(2) {
+ printf("second end probe\n")
+
+ /* TODO: Requires PR23858.
+ x = -1
+ foreach (ks+ in a)
+ flag = flag && x++ == a[ks]
+ flag = flag && x == 2
+
+ x = 1
+ foreach (ks- in a)
+ {
+ flag = flag && x-- == a[ks]
+ }
+ flag = flag && x == -2
+
+ x = -1
+ y = 2
+ foreach (ks1+ in a) {
+ foreach (k2 in b-)
+ {
+ printf("got %s %d / %d %s\n", ks1, a[ks1], k2, b[k2])
+ flag = flag && x == a[ks1]
+ && y-- == k2
+ }
+ x++
+ y = 2
+ }
+ */
+
+ x = -1
+ y = 1
+ foreach (ks1+ in a) {
+ foreach (ks2- in a)
+ // TODO: Requires PR23858.
+ _flag = _flag && x == a[ks1]
+ && y-- == a[ks2]
+ x++
+ y = 1
+ }
+
+ if (end_probes == 0)
+ end_probes++
+ // { end_probes++; next; } // TODO: Investigate using next here.
+ else if (flag)
+ printf("END PASS\n")
+ else
+ printf("END FAIL\n")
+}

View File

@ -1,32 +0,0 @@
commit 7be7af0fda3633cd19e499617834cf4a5f51dd55
Author: William Cohen <wcohen@redhat.com>
Date: Tue Jul 23 14:24:14 2019 -0400
Fix aarch64 to properly access arguments for wrapped syscalls
Linux 4.18 added wrappers for aarch64 syscalls that pass a pointer to
a struct pt_regs holding the values for the actual arguments. The
syscall tapsets initialize CONTEXT->sregs to point at this data
structure. However, the aarch64 specific register access code was
using the CONTEXT->kregs and just getting the processor register state
when the kprobe triggered rather than the expected arguments in the
data structure being passed into the syscall. The aarch64 specific
register code now gets the syscall arguments from the correct pt_regs
structure.
diff --git a/tapset/arm64/registers.stp b/tapset/arm64/registers.stp
index b2e5649..8773df2 100644
--- a/tapset/arm64/registers.stp
+++ b/tapset/arm64/registers.stp
@@ -58,7 +58,10 @@ function uarch_bytes:long() {
function _stp_get_register_by_offset:long (offset:long) %{ /* pure */
long value;
struct pt_regs *regs;
- regs = (CONTEXT->user_mode_p ? CONTEXT->uregs : CONTEXT->kregs);
+ if (CONTEXT->sregs)
+ regs = CONTEXT->sregs;
+ else
+ regs = (CONTEXT->user_mode_p ? CONTEXT->uregs : CONTEXT->kregs);
if (!regs) {
CONTEXT->last_error = "No registers available in this context";
return;

65
SOURCES/rhbz1788648.patch Normal file
View File

@ -0,0 +1,65 @@
commit ab4a060a82d0eb68189590ff3f48e8eb5617b6ae
Author: Frank Ch. Eigler <fche@redhat.com>
Date: Thu Jan 9 11:43:59 2020 -0500
RHBZ1788648: parse arm64 sys/sdt.h operand format [x?, x?]
On arm64, the sys/sdt.h operand [x0, x1] was observed, and not
handled. New code in
sdt_uprobe_var_expanding_visitor::try_parse_arg_register_pair
recognizes that and parses it indirectly via
sdt_uprobe_var_expanding_visitor::try_parse_arg_effective_addr .
diff --git a/tapsets.cxx b/tapsets.cxx
index 68ec74b..aab7c83 100644
--- a/tapsets.cxx
+++ b/tapsets.cxx
@@ -6949,17 +6949,30 @@ sdt_uprobe_var_expanding_visitor::try_parse_arg_register_pair (target_symbol *e,
const string& asmarg,
long precision)
{
+
// BZ1613157: for powerpc, accept "R,R", as an alias of "(Ra,Rb)"
- if (sess.architecture.substr(0,7) != "powerpc")
- return NULL;
-
- // test for BASE_REGISTER,INDEX_REGISTER
- string regexp = "^(" + regnames + "),(" + regnames + ")$";
- vector<string> matches;
- if (!regexp_match(asmarg, regexp, matches))
+ if (sess.architecture.substr(0,7) == "powerpc")
+ {
+ // test for BASE_REGISTER,INDEX_REGISTER
+ string regexp = "^(" + regnames + "),(" + regnames + ")$";
+ vector<string> matches;
+ if (!regexp_match(asmarg, regexp, matches))
+ {
+ // delegate to parenthetic syntax
+ return try_parse_arg_effective_addr (e, string("(")+asmarg+string(")"), precision);
+ }
+ }
+ else if (elf_machine == EM_AARCH64) // BZ1788648
{
- // delegate to parenthetic syntax
- return try_parse_arg_effective_addr (e, string("(")+asmarg+string(")"), precision);
+ // test for [BASE_REGISTER, INDEX_REGISTER]
+ string regexp = "^\\[(" + regnames + "), (" + regnames + ")\\]$";
+ vector<string> matches;
+ if (!regexp_match(asmarg, regexp, matches))
+ {
+ // delegate to parenthetic syntax
+ string regnames = asmarg.substr(1, asmarg.length()-2); // trim the []
+ return try_parse_arg_effective_addr (e, string("(")+regnames+string(")"), precision); // add the ()
+ }
}
return NULL;
@@ -6975,7 +6988,7 @@ sdt_uprobe_var_expanding_visitor::try_parse_arg_effective_addr (target_symbol *e
// test for OFFSET(BASE_REGISTER,INDEX_REGISTER[,SCALE]) where OFFSET is +-N+-N+-N
// NB: Despite PR11821, we can use regnames here, since the parentheses
// make things unambiguous. (Note: gdb/stap-probe.c also parses this)
- string regexp = "^([+-]?[0-9]*)([+-][0-9]*)?([+-][0-9]*)?[(](" + regnames + "),(" +
+ string regexp = "^([+-]?[0-9]*)([+-][0-9]*)?([+-][0-9]*)?[(](" + regnames + "),[ ]?(" +
regnames + ")(,[1248])?[)]$";
vector<string> matches;
if (!regexp_match(asmarg, regexp, matches))

32
SOURCES/rhbz1788662.patch Normal file
View File

@ -0,0 +1,32 @@
commit 2699450dde9af4cc609bdeca2b346a014840f0f0
Author: Frank Ch. Eigler <fche@redhat.com>
Date: Thu Jan 23 13:35:30 2020 -0500
RHBZ1788662: check rcu_is_watching() before probe entry
Some tracepoints are problematic because they are called from an idle
context, where RCU/lockdep is not legal to call. On lockdep kernels,
RCU warnings and even possibly-related panics have been reported.
Kernel tracepoint handlers protect themselves by wrapping their
innards in rcu_irq_enter/rcu_irq_exit(), which flips the legality flag
back on (even during idle), but these functions are not
module-exported, and it's not clear they'd be sufficient anyway. So
we call the module-export'd rcu_is_watching() in
_stp_runtime_get_context() to reject any attempt to start a probe in
such an idling-cpu context. This covers the cpu_idle tracepoint as
well as others.
diff --git a/runtime/linux/runtime_context.h b/runtime/linux/runtime_context.h
index 48894a6..db38bfc 100644
--- a/runtime/linux/runtime_context.h
+++ b/runtime/linux/runtime_context.h
@@ -73,6 +73,8 @@ static void _stp_runtime_contexts_free(void)
static inline struct context * _stp_runtime_get_context(void)
{
+ if (! rcu_is_watching()) // rcu operations are rejected in idle-cpu contexts
+ return 0; // in effect: skip probe
return rcu_dereference_sched(contexts[smp_processor_id()]);
}

69
SOURCES/rhbz1795196.patch Normal file
View File

@ -0,0 +1,69 @@
commit 6053cecf4a4ffd19d1ac0a3bb3ffef100ab83fda
Author: Frank Ch. Eigler <fche@redhat.com>
Date: Tue Jan 28 15:48:42 2020 -0500
RHBZ1795196: tolerate partial elf + missing dwarf vmlinuz for -d kernel
Previous code in dump_symbol_tables() couldn't tolerate the case where
new elfutils opened /boot/vmlinuz* as an elf file for the kernel, and
could not extract a symbol table from that (nor an absent -debuginfo).
New code instead emits a warning and moves on. A special error code
triggers return to the dump_kallsyms() path that prior elfutils/stap
versions rely on.
diff --git a/testsuite/systemtap.base/kallsyms.exp b/testsuite/systemtap.base/kallsyms.exp
index 8ee5242..13ca4ad 100644
--- a/testsuite/systemtap.base/kallsyms.exp
+++ b/testsuite/systemtap.base/kallsyms.exp
@@ -5,7 +5,10 @@ if {![installtest_p]} {untested $test; return}
set script {"probe timer.profile {print_stack(backtrace()); exit()}"}
set passed 0
+# don't let stap find kernel debuginfo!
setenv SYSTEMTAP_DEBUGINFO_PATH $srcdir
+setenv DEBUGINFOD_URLS ""
+setenv DEBUGINFOD_CACHE_PATH "/dev/null"
eval spawn stap --all-modules -e $script
expect {
diff --git a/translate.cxx b/translate.cxx
index f142667..9e30427 100644
--- a/translate.cxx
+++ b/translate.cxx
@@ -6786,7 +6786,17 @@ dump_symbol_tables (Dwfl_Module *m,
dwfl_module_info (m, NULL, NULL, &end, NULL, NULL, NULL, NULL);
int syments = dwfl_module_getsymtab(m);
- DWFL_ASSERT (_F("Getting symbol table for %s", modname), syments >= 0);
+ if (syments < 0) // RHBZ1795196: elfutils 0.178+ can open vmlinuz as elf.main but fail here
+ {
+ c->session.print_warning(_F("libdwfl failure getting symbol table for %s: %s",
+ modname, dwfl_errmsg(-1)));
+ return DWARF_CB_ABORT;
+
+ // signal to dump_unwindsyms() to not let things proceed all the way to
+ // dump_unwindsym_cxt(), which then believes it has all the info for a
+ // complete record about this module. In the kernel's case, this allows
+ // PR17921 fallback to /proc/kallsyms via dump_kallsyms().
+ }
// Look up the relocation basis for symbols
int n = dwfl_module_relocations (m);
commit 3d571c2ab5797b41d07b51a7bbff626270d1e263
Author: Craig Ringer <craig.ringer@2ndquadrant.com>
Date: Sun Dec 29 14:51:47 2019 -0500
PR25265: fix strict-prototypes nit autoconf-stack-trace-save-regs.c
diff --git a/runtime/linux/autoconf-stack-trace-save-regs.c b/runtime/linux/autoconf-stack-trace-save-regs.c
index 8bf3339..1fd515f 100644
--- a/runtime/linux/autoconf-stack-trace-save-regs.c
+++ b/runtime/linux/autoconf-stack-trace-save-regs.c
@@ -1,6 +1,6 @@
#include <linux/stacktrace.h>
-unsigned int foo ()
+unsigned int foo (void)
{
unsigned long e[10];
struct pt_regs* r = 0;

View File

@ -14,7 +14,7 @@
%{!?elfutils_version: %global elfutils_version 0.142}
%{!?pie_supported: %global pie_supported 1}
%{!?with_boost: %global with_boost 0}
%ifarch %{ix86} x86_64 ppc ppc64
%ifarch %{ix86} x86_64 ppc ppc64 ppc64le aarch64
%{!?with_dyninst: %global with_dyninst 0%{?fedora} >= 18 || 0%{?rhel} >= 7}
%else
%{!?with_dyninst: %global with_dyninst 0}
@ -38,6 +38,7 @@
%{!?with_python2_probes: %global with_python2_probes (0%{?fedora} <= 28 && 0%{?rhel} <= 7)}
%{!?with_python3_probes: %global with_python3_probes (0%{?fedora} >= 23 || 0%{?rhel} > 7)}
%{!?with_httpd: %global with_httpd 0}
%{!?with_specific_python: %global with_specific_python 0%{?fedora} >= 31}
# Virt is supported on these arches, even on el7, but it's not in core EL7
%if 0%{?rhel} <= 7
@ -86,7 +87,7 @@
%define __brp_mangle_shebangs_exclude_from .stp$
Name: systemtap
Version: 4.1
Version: 4.2
Release: 6%{?release_override}%{?dist}
# for version, see also configure.ac
@ -123,10 +124,9 @@ License: GPLv2+
URL: http://sourceware.org/systemtap/
Source: ftp://sourceware.org/pub/systemtap/releases/systemtap-%{version}.tar.gz
Patch10: pr23074.patch
Patch11: rhbz1732173.patch
Patch12: pr23875_bugfix.patch
Patch10: rhbz1788648.patch
Patch11: rhbz1788662.patch
Patch12: rhbz1795196.patch
# Build*
BuildRequires: gcc-c++
@ -135,7 +135,7 @@ BuildRequires: gettext-devel
BuildRequires: pkgconfig(nss)
BuildRequires: pkgconfig(avahi-client)
%if %{with_dyninst}
BuildRequires: dyninst-devel >= 8.0
BuildRequires: dyninst-devel >= 10.0
BuildRequires: pkgconfig(libselinux)
%endif
%if %{with_sqlite}
@ -208,6 +208,9 @@ BuildRequires: python-setuptools
BuildRequires: python3-devel
BuildRequires: python3-setuptools
%endif
%if %{with_specific_python}
BuildRequires: /usr/bin/pathfix.py
%endif
%if %{with_httpd}
BuildRequires: libmicrohttpd-devel
@ -646,10 +649,6 @@ cd ..
%configure %{?elfutils_config} %{dyninst_config} %{sqlite_config} %{crash_config} %{docs_config} %{pie_config} %{rpm_config} %{java_config} %{virt_config} %{dracut_config} %{python3_config} %{python2_probes_config} %{python3_probes_config} %{httpd_config} %{bpf_config} --disable-silent-rules --with-extra-version="rpm %{version}-%{release}"
make %{?_smp_mflags}
%if %{with_emacsvim}
%{_emacs_bytecompile} emacs/systemtap-mode.el
%endif
%install
make DESTDIR=$RPM_BUILD_ROOT install
%find_lang %{name}
@ -776,6 +775,11 @@ done
touch $RPM_BUILD_ROOT%{dracutstap}/params.conf
%endif
%if %{with_specific_python}
# Some files got ambiguous python shebangs, we fix them after everything else is done
pathfix.py -pni "%{__python3} %{py3_shbang_opts}" %{buildroot}%{python3_sitearch} %{buildroot}%{_bindir}/*
%endif
%pre runtime
getent group stapusr >/dev/null || groupadd -f -g 156 -r stapusr
getent group stapsys >/dev/null || groupadd -f -g 157 -r stapsys
@ -1266,6 +1270,24 @@ done
# PRERELEASE
%changelog
* Tue Feb 11 2020 Frank Ch. Eigler <fche@redhat.com> - 4.2-6
- rhbz1795196 cont'd: autoconf fix for kernel change to stack_trace_save_regs
* Tue Jan 28 2020 Frank Ch. Eigler <fche@redhat.com> - 4.2-5
- rhbz1795196: kallsyms vs. elfutils/vmlinuz
* Thu Jan 23 2020 Frank Ch. Eigler <fche@redhat.com> - 4.2-4
- rhbz1788662: check for rcu_is_watching() during prologue
* Fri Jan 10 2020 Frank Ch. Eigler <fche@redhat.com> - 4.2-3
- rhbz1788544: stop bytecompiling systemtap-mode.el
* Fri Jan 10 2020 Frank Ch. Eigler <fche@redhat.com> - 4.2-2
- rhbz1788648: aarch64 sdt.h parse [x0, x1]
* Tue Nov 19 2019 Frank Ch. Eigler <fche@redhat.com> - 4.2-1
- rhbz1744989: Upstream release.
* Tue Aug 06 2019 Frank Ch. Eigler <fche@redhat.com> - 4.1-6
- rhbz1732514: add java-devel prereq to systemtap-runtime-java