_______________________________________________I am building a Python JIT, so I want to change the
interp->eval_frame
to my own function.I built a C++ library which contains
EvalFrame
function, and then usedlopen
anddlsym
to use it. It looks like this:extern "C" PyObject *EvalFrame(PyFrameObject *f, int throwflag) { return _PyEval_EvalFrameDefault(f, throwflag); }
I added following code to
Python/pylifecycle.c
at function_Py_InitializeEx_Private
(Python version is 3.6.1):void *pyjit = NULL; pyjit = dlopen("../cmake-build-debug/libPubbon.dylib", 0); if (pyjit != NULL) { interp->eval_frame = (_PyFrameEvalFunction)dlsym(pyjit, "EvalFrame"); //interp->eval_frame = _PyEval_EvalFrameDefault; }
Then something strange happened. I used LLDB to trace the variables. When it ran at
EvalFrame
, the address off
pointer didn't change, butf->f_lineno
changed.Why the address of the pointer didn't change, but the context change?
I am working on Mac OS X and Python 3.6.1. I want to know how to replace _PyEval_EvalFrameDefault in interp->eval_frame with my own function.
Python-compilers mailing list
Python-compilers@python.org
https://mail.python.org/mailman/listinfo/python-compilers