import systemtap-4.5-8.el9_b
This commit is contained in:
parent
041325fbf8
commit
b63617a7a9
|
@ -852,3 +852,240 @@ index 40dc3e2e0..d47462513 100644
|
||||||
spin_unlock(&files->file_lock);
|
spin_unlock(&files->file_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
commit e6a1b008b822ed211b8f9c15fda565f8d51e512d
|
||||||
|
Author: Stan Cox <scox@redhat.com>
|
||||||
|
Date: Thu Aug 26 09:46:20 2021 -0400
|
||||||
|
|
||||||
|
Shorten function names that will exceed the kernel's objtool limit of 128
|
||||||
|
|
||||||
|
translate.cxx (c_unparser::emit_global_init_type,emit_function) Shorten
|
||||||
|
(c_unparser::c_funcname) Add funcname_shortened parm, shorten
|
||||||
|
name if length limit exceeded
|
||||||
|
|
||||||
|
testsuite/systemtap.base/func_definition.{exp,stp} Add shorten funcname test.
|
||||||
|
|
||||||
|
diff --git a/testsuite/systemtap.base/func_definition.exp b/testsuite/systemtap.base/func_definition.exp
|
||||||
|
index 6598aeea5..0aeab4c70 100644
|
||||||
|
--- a/testsuite/systemtap.base/func_definition.exp
|
||||||
|
+++ b/testsuite/systemtap.base/func_definition.exp
|
||||||
|
@@ -5,9 +5,25 @@ if {![installtest_p]} { untested "$test"; return }
|
||||||
|
|
||||||
|
foreach runtime [get_runtime_list] {
|
||||||
|
if {$runtime != ""} {
|
||||||
|
- stap_run $test no_load (${all_pass_string}){5} \
|
||||||
|
+ stap_run $test no_load (${all_pass_string}){6} \
|
||||||
|
--runtime=$runtime $srcdir/$subdir/$test.stp
|
||||||
|
} else {
|
||||||
|
- stap_run $test no_load (${all_pass_string}){5} $srcdir/$subdir/$test.stp
|
||||||
|
+ stap_run $test no_load (${all_pass_string}){6} $srcdir/$subdir/$test.stp
|
||||||
|
}
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+set ok 0
|
||||||
|
+set cmd "bash -c {$env(SYSTEMTAP_PATH)/stap --runtime=$runtime -v -v -p3 $srcdir/$subdir/$test.stp |& grep -A 1 'function_names_over_128'}"
|
||||||
|
+eval spawn $cmd
|
||||||
|
+expect {
|
||||||
|
+ -timeout 180
|
||||||
|
+ # Match shortened function declaration, definition, and reference
|
||||||
|
+ -re { function_[0-9] } { incr ok; exp_continue }
|
||||||
|
+ eof { }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+if {$ok == 3} {
|
||||||
|
+ pass "$test function name shorten"
|
||||||
|
+} else {
|
||||||
|
+ fail "$test function name shorten ($ok!=3)"
|
||||||
|
+}
|
||||||
|
diff --git a/testsuite/systemtap.base/func_definition.stp b/testsuite/systemtap.base/func_definition.stp
|
||||||
|
index eaa8d94c5..7ed938eb9 100644
|
||||||
|
--- a/testsuite/systemtap.base/func_definition.stp
|
||||||
|
+++ b/testsuite/systemtap.base/func_definition.stp
|
||||||
|
@@ -39,6 +39,11 @@ function f5()
|
||||||
|
println("systemtap test success")
|
||||||
|
}
|
||||||
|
|
||||||
|
+function function_names_over_128_characters_exceed_MAX_NAME_LEN_in_linux_objtool_which_is_invoked_by_kbuild_and_are_therefore_shortened()
|
||||||
|
+{
|
||||||
|
+ return 2021
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
probe end {
|
||||||
|
println("systemtap ending probe")
|
||||||
|
|
||||||
|
@@ -57,4 +62,7 @@ probe end {
|
||||||
|
printf("systemtap test failure - return_value of f4:%d != 2015\n", f4())
|
||||||
|
|
||||||
|
f5()
|
||||||
|
+
|
||||||
|
+ if (function_names_over_128_characters_exceed_MAX_NAME_LEN_in_linux_objtool_which_is_invoked_by_kbuild_and_are_therefore_shortened() == 2021)
|
||||||
|
+ println("systemtap test success")
|
||||||
|
}
|
||||||
|
diff --git a/translate.cxx b/translate.cxx
|
||||||
|
index 59fa2e4a0..beb7d7acd 100644
|
||||||
|
--- a/translate.cxx
|
||||||
|
+++ b/translate.cxx
|
||||||
|
@@ -58,6 +58,9 @@ extern "C" {
|
||||||
|
#define STAP_T_06 _("\"empty aggregate\";")
|
||||||
|
#define STAP_T_07 _("\"histogram index out of range\";")
|
||||||
|
|
||||||
|
+// This matches MAX_NAME_LEN in linux objtool/elf.c used by kbuild
|
||||||
|
+#define MAX_NAME_LEN 128
|
||||||
|
+
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
class var;
|
||||||
|
@@ -183,6 +186,7 @@ struct c_unparser: public unparser, public visitor
|
||||||
|
virtual string c_localname (const string& e, bool mangle_oldstyle = false);
|
||||||
|
virtual string c_globalname (const string &e);
|
||||||
|
virtual string c_funcname (const string &e);
|
||||||
|
+ virtual string c_funcname (const string &e, bool &funcname_shortened);
|
||||||
|
|
||||||
|
string c_arg_define (const string& e);
|
||||||
|
string c_arg_undef (const string& e);
|
||||||
|
@@ -1755,7 +1759,11 @@ c_unparser::emit_global_init_type (vardecl *v)
|
||||||
|
void
|
||||||
|
c_unparser::emit_functionsig (functiondecl* v)
|
||||||
|
{
|
||||||
|
- o->newline() << "static void " << c_funcname(v->name)
|
||||||
|
+ bool funcname_shortened;
|
||||||
|
+ string funcname = c_funcname (v->name, funcname_shortened);
|
||||||
|
+ if (funcname_shortened)
|
||||||
|
+ o->newline() << "/* " << v->name << " */";
|
||||||
|
+ o->newline() << "static void " << funcname
|
||||||
|
<< " (struct context * __restrict__ c);";
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -2520,7 +2528,11 @@ c_tmpcounter::emit_function (functiondecl* fd)
|
||||||
|
// indent the dummy output as if we were already in a block
|
||||||
|
this->o->indent (1);
|
||||||
|
|
||||||
|
- o->newline() << "struct " << c_funcname (fd->name) << "_locals {";
|
||||||
|
+ bool funcname_shortened;
|
||||||
|
+ string funcname = c_funcname (fd->name, funcname_shortened);
|
||||||
|
+ if (funcname_shortened)
|
||||||
|
+ o->newline() << "/* " << fd->name << " */";
|
||||||
|
+ o->newline() << "struct " << funcname << "_locals {";
|
||||||
|
o->indent(1);
|
||||||
|
|
||||||
|
for (unsigned j=0; j<fd->locals.size(); j++)
|
||||||
|
@@ -2615,7 +2627,11 @@ c_unparser::emit_function (functiondecl* v)
|
||||||
|
this->action_counter = 0;
|
||||||
|
this->already_checked_action_count = false;
|
||||||
|
|
||||||
|
- o->newline() << "static void " << c_funcname (v->name)
|
||||||
|
+ bool funcname_shortened;
|
||||||
|
+ string funcname = c_funcname (v->name, funcname_shortened);
|
||||||
|
+ if (funcname_shortened)
|
||||||
|
+ o->newline() << "/* " << v->name << " */";
|
||||||
|
+ o->newline() << "static void " << funcname
|
||||||
|
<< " (struct context* __restrict__ c) {";
|
||||||
|
o->indent(1);
|
||||||
|
|
||||||
|
@@ -3385,11 +3401,41 @@ c_unparser::c_globalname (const string& e)
|
||||||
|
|
||||||
|
|
||||||
|
string
|
||||||
|
-c_unparser::c_funcname (const string& e)
|
||||||
|
+c_unparser::c_funcname (const string& e, bool& funcname_shortened)
|
||||||
|
{
|
||||||
|
+ const string function_prefix = "function_";
|
||||||
|
// XXX uncomment to test custom mangling:
|
||||||
|
- // return "function_" + e + "_" + lex_cast(do_hash(e.c_str()));
|
||||||
|
- return "function_" + e;
|
||||||
|
+ // return function_prefix + e + "_" + lex_cast(do_hash(e.c_str()));
|
||||||
|
+
|
||||||
|
+ // The kernel objtool used by kbuild has a hardcoded function length limit
|
||||||
|
+ if (e.length() > MAX_NAME_LEN - function_prefix.length())
|
||||||
|
+ {
|
||||||
|
+ int function_index = 0;
|
||||||
|
+ for (map<string,functiondecl*>::iterator it = session->functions.begin();
|
||||||
|
+ it != session->functions.end(); it++)
|
||||||
|
+ {
|
||||||
|
+ if (it->first == e)
|
||||||
|
+ {
|
||||||
|
+ funcname_shortened = true;
|
||||||
|
+ return function_prefix + to_string(function_index);
|
||||||
|
+ }
|
||||||
|
+ function_index += 1;
|
||||||
|
+ }
|
||||||
|
+ throw SEMANTIC_ERROR (_("unresolved symbol: ") + e); // should not happen
|
||||||
|
+ }
|
||||||
|
+ else
|
||||||
|
+ {
|
||||||
|
+ funcname_shortened = false;
|
||||||
|
+ return function_prefix + e;
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+string
|
||||||
|
+c_unparser::c_funcname (const string& e)
|
||||||
|
+{
|
||||||
|
+ bool funcname_shortened;
|
||||||
|
+ return c_funcname (e, funcname_shortened);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
commit 3bca174698360389fbf2c28e8eaaacc0b7cbbdb0
|
||||||
|
Author: Stan Cox <scox@redhat.com>
|
||||||
|
Date: Mon Aug 30 16:53:51 2021 -0400
|
||||||
|
|
||||||
|
Use lex_cast instead of to_string when shortening function names.
|
||||||
|
|
||||||
|
diff --git a/testsuite/systemtap.base/func_definition.exp b/testsuite/systemtap.base/func_definition.exp
|
||||||
|
index 0aeab4c70..721900f98 100644
|
||||||
|
--- a/testsuite/systemtap.base/func_definition.exp
|
||||||
|
+++ b/testsuite/systemtap.base/func_definition.exp
|
||||||
|
@@ -13,7 +13,7 @@ foreach runtime [get_runtime_list] {
|
||||||
|
}
|
||||||
|
|
||||||
|
set ok 0
|
||||||
|
-set cmd "bash -c {$env(SYSTEMTAP_PATH)/stap --runtime=$runtime -v -v -p3 $srcdir/$subdir/$test.stp |& grep -A 1 'function_names_over_128'}"
|
||||||
|
+set cmd "bash -c {$env(SYSTEMTAP_PATH)/stap -v -v -p3 $srcdir/$subdir/$test.stp |& grep -A 1 'function_names_over_128'}"
|
||||||
|
eval spawn $cmd
|
||||||
|
expect {
|
||||||
|
-timeout 180
|
||||||
|
diff --git a/translate.cxx b/translate.cxx
|
||||||
|
index beb7d7acd..312fd0801 100644
|
||||||
|
--- a/translate.cxx
|
||||||
|
+++ b/translate.cxx
|
||||||
|
@@ -3410,14 +3410,14 @@ c_unparser::c_funcname (const string& e, bool& funcname_shortened)
|
||||||
|
// The kernel objtool used by kbuild has a hardcoded function length limit
|
||||||
|
if (e.length() > MAX_NAME_LEN - function_prefix.length())
|
||||||
|
{
|
||||||
|
- int function_index = 0;
|
||||||
|
+ long function_index = 0;
|
||||||
|
for (map<string,functiondecl*>::iterator it = session->functions.begin();
|
||||||
|
it != session->functions.end(); it++)
|
||||||
|
{
|
||||||
|
if (it->first == e)
|
||||||
|
{
|
||||||
|
funcname_shortened = true;
|
||||||
|
- return function_prefix + to_string(function_index);
|
||||||
|
+ return function_prefix + lex_cast (function_index);
|
||||||
|
}
|
||||||
|
function_index += 1;
|
||||||
|
}
|
||||||
|
commit 4996a29c6b5dd891aeaf31df1a50058bd785621b
|
||||||
|
Author: Frank Ch. Eigler <fche@redhat.com>
|
||||||
|
Date: Thu Sep 9 21:22:31 2021 -0400
|
||||||
|
|
||||||
|
tapset: start adopting kernel netif_* tracepoints in netdev.* tapset
|
||||||
|
|
||||||
|
Start with netdev.receive.
|
||||||
|
|
||||||
|
diff --git a/tapset/linux/networking.stp b/tapset/linux/networking.stp
|
||||||
|
index 0b52cbc50..bf9cabfd5 100644
|
||||||
|
--- a/tapset/linux/networking.stp
|
||||||
|
+++ b/tapset/linux/networking.stp
|
||||||
|
@@ -117,7 +117,8 @@ function get_netdev_name:string (addr:long) {
|
||||||
|
///</para>
|
||||||
|
// Main device receive routine, be called when packet arrives on network device
|
||||||
|
probe netdev.receive
|
||||||
|
- = kernel.function("netif_receive_skb_internal") !,
|
||||||
|
+ = kernel.trace("netif_receive_skb") !,
|
||||||
|
+ kernel.function("netif_receive_skb_internal") !,
|
||||||
|
kernel.function("netif_receive_skb")
|
||||||
|
{
|
||||||
|
try { dev_name = get_netdev_name($skb->dev) } catch { }
|
||||||
|
|
|
@ -90,7 +90,7 @@
|
||||||
|
|
||||||
Name: systemtap
|
Name: systemtap
|
||||||
Version: 4.5
|
Version: 4.5
|
||||||
Release: 7%{?release_override}%{?dist}
|
Release: 8%{?release_override}%{?dist}
|
||||||
# for version, see also configure.ac
|
# for version, see also configure.ac
|
||||||
|
|
||||||
|
|
||||||
|
@ -1221,6 +1221,9 @@ exit 0
|
||||||
|
|
||||||
# PRERELEASE
|
# PRERELEASE
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Sep 09 2021 Frank Ch. Eigler <fche@redhat.com> - 4.5-8
|
||||||
|
- rhbz1985124: Kernel 5.14 compatibility omnibus cont'd.
|
||||||
|
|
||||||
* Thu Aug 12 2021 Frank Ch. Eigler <fche@redhat.com> - 4.5-7
|
* Thu Aug 12 2021 Frank Ch. Eigler <fche@redhat.com> - 4.5-7
|
||||||
- rhbz1985124: Kernel 5.14 compatibility omnibus.
|
- rhbz1985124: Kernel 5.14 compatibility omnibus.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue