[Python-Dev] Developing a Python JIT and have troubld (original) (raw)
Yuheng Zou zouyuheng1998 at gmail.com
Fri Mar 31 00:38:30 EDT 2017
- Previous message (by thread): [Python-Dev] PEP 545: Python Documentation Translations
- Next message (by thread): [Python-Dev] [Python-compilers] Developing a Python JIT and have troubld
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
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 use dlopen and dlsym 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 of f pointer didn't change, but f->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. -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.python.org/pipermail/python-dev/attachments/20170331/1800d8b7/attachment.html>
- Previous message (by thread): [Python-Dev] PEP 545: Python Documentation Translations
- Next message (by thread): [Python-Dev] [Python-compilers] Developing a Python JIT and have troubld
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]