|
|
8ca3af |
commit e3287bddcdc51705bb206479daa82e97fb28071f
|
|
|
8ca3af |
Author: Frank Ch. Eigler <fche@redhat.com>
|
|
|
8ca3af |
Date: Wed Dec 9 22:29:43 2020 -0500
|
|
|
8ca3af |
|
|
|
8ca3af |
PR27044: fix lock loop for conditional probes
|
|
|
8ca3af |
|
|
|
8ca3af |
Emit a nested block carefully so that the "goto out;" from a failed
|
|
|
8ca3af |
stp_lock_probe() call in that spot near the epilogue of a
|
|
|
8ca3af |
probe-handler goes downward, not upward.
|
|
|
8ca3af |
|
|
|
8ca3af |
diff --git a/translate.cxx b/translate.cxx
|
|
|
8ca3af |
index f0195486c..d7fe1e3b2 100644
|
|
|
8ca3af |
--- a/translate.cxx
|
|
|
8ca3af |
+++ b/translate.cxx
|
|
|
8ca3af |
@@ -2969,21 +2969,21 @@ c_unparser::emit_probe (derived_probe* v)
|
|
|
8ca3af |
{
|
|
|
8ca3af |
// PR26296
|
|
|
8ca3af |
// emit all read/write locks for global variables ... if somehow still not done by now
|
|
|
8ca3af |
+ // emit a local out: label, for error catching in these condition exprs
|
|
|
8ca3af |
+ o->newline() << "{";
|
|
|
8ca3af |
+ o->newline(1) << "__label__ out, deref_fault;";
|
|
|
8ca3af |
if (v->needs_global_locks ())
|
|
|
8ca3af |
emit_lock ();
|
|
|
8ca3af |
|
|
|
8ca3af |
for (set<derived_probe*>::const_iterator
|
|
|
8ca3af |
- it = v->probes_with_affected_conditions.begin();
|
|
|
8ca3af |
- it != v->probes_with_affected_conditions.end(); ++it)
|
|
|
8ca3af |
+ it = v->probes_with_affected_conditions.begin();
|
|
|
8ca3af |
+ it != v->probes_with_affected_conditions.end(); ++it)
|
|
|
8ca3af |
{
|
|
|
8ca3af |
- // emit a local out: label, for error catching in these condition exprs
|
|
|
8ca3af |
- o->newline() << "{";
|
|
|
8ca3af |
- o->newline(1) << "__label__ out, deref_fault;";
|
|
|
8ca3af |
emit_probe_condition_update(*it);
|
|
|
8ca3af |
- o->newline(-1) << "deref_fault: __attribute__((unused));";
|
|
|
8ca3af |
- o->newline() << "out: __attribute__((unused));";
|
|
|
8ca3af |
- o->newline() << "}";
|
|
|
8ca3af |
}
|
|
|
8ca3af |
+ o->newline(-1) << "deref_fault: __attribute__((unused));";
|
|
|
8ca3af |
+ o->newline() << "out: __attribute__((unused));";
|
|
|
8ca3af |
+ o->newline() << "}";
|
|
|
8ca3af |
}
|
|
|
8ca3af |
|
|
|
8ca3af |
// PR26296
|