+2005-12-01 Frank Ch. Eigler <fche@redhat.com>
+
+ PR 1944 quick hack.
+ * translator.cxx (translate_pass): Reduce default MAXNESTING to 10.
+ (emit_module_init): Add a paranoid check against oversize contexts.
+ * stap.1.in: Document MAXNESTING change.
+
2005-11-30 Frank Ch. Eigler <fche@redhat.com>
PR 1276
.ESAMPLE
Functions may call others or themselves
recursively, up to a fixed nesting limit. This limit is defined by
-a macro in the translated C code and is in the neighbourhood of 30.
+a macro in the translated C code and is in the neighbourhood of 10.
.SS EMBEDDED C
When in guru mode, the translator accepts embedded code in the
}
o->newline(-1) << "} locals [MAXNESTING];";
o->newline(-1) << "};" << endl;
- o->newline() << "void *contexts; /* alloc_percpu */" << endl;
+ o->newline() << "void *contexts = NULL; /* alloc_percpu */" << endl;
emit_map_type_instantiations ();
// terminate. These may set STAP_SESSION_ERROR!
// per-cpu context
- o->newline() << "contexts = alloc_percpu (struct context);";
- o->newline() << "if (contexts == NULL) {";
+ o->newline() << "if (sizeof (struct context) <= 131072)";
+ o->newline(1) << "contexts = alloc_percpu (struct context);";
+ o->newline(-1) << "if (contexts == NULL) {";
o->newline() << "_stp_error (\"percpu context (size %lu) allocation failed\", sizeof (struct context));";
o->newline(1) << "rc = -ENOMEM;";
o->newline() << "goto out;";
s.op->line() << "#define TEST_MODE " << (s.test_mode ? 1 : 0) << endl;
s.op->newline() << "#ifndef MAXNESTING";
- s.op->newline() << "#define MAXNESTING 30";
+ s.op->newline() << "#define MAXNESTING 10";
s.op->newline() << "#endif";
s.op->newline() << "#ifndef MAXSTRINGLEN";
s.op->newline() << "#define MAXSTRINGLEN 128";