diff options
author | Stan Cox <scox@redhat.com> | 2009-06-26 16:34:00 -0400 |
---|---|---|
committer | Stan Cox <scox@redhat.com> | 2009-06-26 16:34:00 -0400 |
commit | 2fd285e65eb8e1f77cb5b70a1f81377896ad6b2c (patch) | |
tree | 6c5c5e3328b671c71d484d5b1a8742fa77c456f3 /tapsets.cxx | |
parent | 0c3bfb1ef9f5415ec92afac94a72db5a827fa634 (diff) | |
download | systemtap-steved-2fd285e65eb8e1f77cb5b70a1f81377896ad6b2c.tar.gz systemtap-steved-2fd285e65eb8e1f77cb5b70a1f81377896ad6b2c.tar.xz systemtap-steved-2fd285e65eb8e1f77cb5b70a1f81377896ad6b2c.zip |
An i386 kprobe needs regparm(0) to access args.
* tapsets.cxx (probe_table::convert_probe): Add regparm for kprobe.
Diffstat (limited to 'tapsets.cxx')
-rw-r--r-- | tapsets.cxx | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/tapsets.cxx b/tapsets.cxx index 9d8dd51e..765c2cd3 100644 --- a/tapsets.cxx +++ b/tapsets.cxx @@ -887,6 +887,23 @@ dwarf_builder::probe_table::convert_probe (probe *new_base) be->right = new literal_string(mark_name); is->condition = be; b->statements.insert(b->statements.begin(),(statement*) is); + +#ifdef __i386__ + if (probe_type == kprobe_type) + { + functioncall *rp = new functioncall; + rp->tok = new_base->body->tok; + rp->function = "regparm"; + rp->tok = new_base->body->tok; + literal_number* littid = new literal_number(0); + littid->tok = new_base->body->tok; + rp->args.push_back(littid); + expr_statement* es = new expr_statement; + es->tok = new_base->body->tok; + es->value = rp; + b->statements.insert(b->statements.begin(),(statement*) es); + } +#endif } |