Activate the stack profiler trampoline *backend*.
The only supported backend is ``"perf"``.
+ Stack trampolines cannot be activated if the JIT is active.
+
.. availability:: Linux.
.. versionadded:: 3.12
--- /dev/null
+Don't allow the JIT and perf support to be active at the same time. Patch by
+Pablo Galindo
enabled = *env != '0';
}
if (enabled) {
- PyObject *opt = _PyOptimizer_NewUOpOptimizer();
- if (opt == NULL) {
- return _PyStatus_ERR("can't initialize optimizer");
- }
- if (_Py_SetTier2Optimizer((_PyOptimizerObject *)opt)) {
- return _PyStatus_ERR("can't install optimizer");
+ if (config->perf_profiling > 0) {
+ (void)PyErr_WarnEx(
+ PyExc_RuntimeWarning,
+ "JIT deactivated as perf profiling support is active",
+ 0);
+ } else {
+ PyObject *opt = _PyOptimizer_NewUOpOptimizer();
+ if (opt == NULL) {
+ return _PyStatus_ERR("can't initialize optimizer");
+ }
+ if (_Py_SetTier2Optimizer((_PyOptimizerObject *)opt)) {
+ return _PyStatus_ERR("can't install optimizer");
+ }
+ Py_DECREF(opt);
}
- Py_DECREF(opt);
}
}
#endif
/*[clinic end generated code: output=5783cdeb51874b43 input=a12df928758a82b4]*/
{
#ifdef PY_HAVE_PERF_TRAMPOLINE
+#ifdef _Py_JIT
+ _PyOptimizerObject* optimizer = _Py_GetOptimizer();
+ if (optimizer != NULL) {
+ PyErr_SetString(PyExc_ValueError, "Cannot activate the perf trampoline if the JIT is active");
+ return NULL;
+ }
+#endif
+
if (strcmp(backend, "perf") == 0) {
_PyPerf_Callbacks cur_cb;
_PyPerfTrampoline_GetCallbacks(&cur_cb);