panda-re / panda

Platform for Architecture-Neutral Dynamic Analysis
https://panda.re
Other
2.48k stars 479 forks source link

PyPANDA interactive terminal problems #864

Closed AndrewFasano closed 3 years ago

AndrewFasano commented 3 years ago

There is some weird behavior in PyPANDA scripts that try to get data from stdin.

For example, the following script will sometimes raise an EOFError on the call to input()

#!/usr/bin/env python3
from pandare import Panda

panda = Panda(generic="i386")

@panda.queue_blocking
def driver():
    i = input("Testing: ")
    print("Input:", i)
    panda.end_analysis()

panda.run()

Surprisingly, the following workaround fixes the issue: just run the script with python3 -m pdb script.py.

I've also seen segfaults caused by calls to pdb.set_trace()/ipdb.set_trace() at the end of complex pypanda scripts (e.g., multiple callbacks, ppp functions, and blocking functions). My PoC for that is huge so I'm not going to post it, but I believe it's related as the same workaround makes the crash go away.

Here's the backtrace for that crash:

Thread 1 "python" received signal SIGSEGV, Segmentation fault.
0x000000000055f131 in PyModule_GetState () at ../Objects/moduleobject.c:558
558     ../Objects/moduleobject.c: No such file or directory.
(gdb) bt
#0  0x000000000055f131 in PyModule_GetState (m=0x0) at ../Objects/moduleobject.c:558
#1  0x00007fffd1f630ce in on_startup_hook () at ./Modules/readline.c:903
#2  0x00007fffda93c441 in rl_initialize () at /usr/lib/x86_64-linux-gnu/libedit.so.2
#3  0x00007fffd1f62f79 in setup_readline (mod_state=<optimized out>, mod_state=<optimized out>)
    at ./Modules/readline.c:1175
#4  0x00007fffd1f62f79 in PyInit_readline () at ./Modules/readline.c:1425
#5  0x00000000005fb3af in _PyImport_LoadDynamicModuleWithSpec (spec=<ModuleSpec(name='readline', loader=<ExtensionFileLoader(name='readline', path='/usr/lib/python3.6/lib-dynload/readline.cpython-36m-x86_64-linux-gnu.so') at remote 0x7fffc1d74c50>, origin='/usr/lib/python3.6/lib-dynload/readline.cpython-36m-x86_64-linux-gnu.so', loader_state=None, submodule_search_locations=None, _set_fileattr=True, _cached=None) at remote 0x7fffc1d747f0>, fp=<optimized out>) at ../Python/importdl.c:159
#6  0x00000000005fb62d in _imp_create_dynamic_impl (module=<optimized out>, file=<optimized out>, spec=<ModuleSpec(name='readline', loader=<ExtensionFileLoader(name='readline', path='/usr/lib/python3.6/lib-dynload/readline.cpython-36m-x86_64-linux-gnu.so') at remote 0x7fffc1d74c50>, origin='/usr/lib/python3.6/lib-dynload/readline.cpython-36m-x86_64-linux-gnu.so', loader_state=None, submodule_search_locations=None, _set_fileattr=True, _cached=None) at remote 0x7fffc1d747f0>) at ../Python/import.c:1994
#7  0x00000000005fb62d in _imp_create_dynamic (module=<optimized out>, args=<optimized out>)
    at ../Python/clinic/import.c.h:289
#8  0x0000000000566fae in PyCFunction_Call (func=<built-in method create_dynamic of module object at remote 0x7ffff7f864f8>, args=<optimized out>, kwds=<optimized out>) at ../Objects/methodobject.c:112
#9  0x0000000000510e51 in do_call_core (kwdict={}, callargs=(<ModuleSpec(name='readline', loader=<ExtensionFileLoader(name='readline', path='/usr/lib/python3.6/lib-dynload/readline.cpython-36m-x86_64-linux-gnu.so') at remote 0x7fffc1d74c50>, origin='/usr/lib/python3.6/lib-dynload/readline.cpython-36m-x86_64-linux-gnu.so', loader_state=None, submodule_search_locations=None, _set_fileattr=True, _cached=None) at remote 0x7fffc1d747f0>,), func=<built-in method create_dynamic of module object at remote 0x7ffff7f864f8>)
    at ../Python/ceval.c:5116
#10 0x0000000000510e51 in _PyEval_EvalFrameDefault (f=<optimized out>, throwflag=<optimized out>)
    at ../Python/ceval.c:3404
#11 0x0000000000507be4 in PyEval_EvalFrameEx (throwflag=0, f=Frame 0x7fffc27cf768, for file <frozen importlib._bootstrap>, line 219, in _call_with_frames_removed (f=<built-in method create_dynamic of module object at remote 0x7ffff7f864f8>, args=(<ModuleSpec(name='readline', loader=<ExtensionFileLoader(name='readline', path='/usr/lib/python3.6/lib-dynload/readline.cpython-36m-x86_64-linux-gnu.so') at remote 0x7fffc1d74c50>, origin='/usr/lib/python3.6/lib-dynload/readline.cpython-36m-x86_64-linux-gnu.so', loader_state=None, submodule_search_locations=None, _set_fileattr=True, _cached=None) at remote 0x7fffc1d747f0>,), kwds={})) at ../Python/ceval.c:754
#12 0x0000000000507be4 in _PyEval_EvalCodeWithName.lto_priv.1820 (_co=<optimized out>, globals=<optimized out>, locals=<optimized out>, args=<optimized out>, argcount=<optimized out>, kwnames=0x0, kwargs=0x7ffff680f760, kwcount=<optimized out>, kwstep=1, defs=0x0, defcount=0, kwdefs=0x0, closure=0x0, name='_call_with_frames_removed', qualname='_call_with_frames_removed') at ../Python/ceval.c:4166
#13 0x0000000000509900 in fast_function.lto_priv (func=<function at remote 0x7ffff7fa8ea0>, stack=0x7ffff680f750, nargs=2, kwnames=<optimized out>) at ../Python/ceval.c:4992
#14 0x000000000050a2fd in call_function.lto_priv (pp_stack=0x7fffffffc1a0, oparg=<optimized out>, kwnames=<optimized out>) at ../Python/ceval.c:4872
#15 0x000000000050beb4 in _PyEval_EvalFrameDefault (f=<optimized out>, throwflag=<optimized out>)
    at ../Python/ceval.c:3335
#16 0x00000000005095c8 in PyEval_EvalFrameEx (throwflag=0, f=Frame 0x7ffff680f5b8, for file <frozen importlib._bootstrap_external>, line 922, in create_module (self=<ExtensionFileLoader(name='readline', path='/usr/lib/python3.6/lib-dynload/readline.cpython-36m-x86_64-linux-gnu.so') at remote 0x7fffc1d74c50>, spec=<ModuleSpec(name='readline', loader=<...>, origin='/usr/lib/python3.6/lib-dynload/readline.cpython-36m----Type <return> to continue, or q <return> to quit---
None) at remote 0x7fffc1d747f0>)) at ../Python/ceval.c:754
#17 0x00000000005095c8 in _PyFunction_FastCall (globals=<optimized out>, nargs=140737329034680, args=<optimized out>, co=<optimized out>) at ../Python/ceval.c:4933
#18 0x00000000005095c8 in fast_function.lto_priv (func=<function at remote 0x7ffff7f2e6a8>, stack=<optimized out>, nargs=2, kwnames=<optimized out>) at ../Python/ceval.c:4968
#19 0x000000000050a2fd in call_function.lto_priv (pp_stack=0x7fffffffc390, oparg=<optimized out>, kwnames=<optimized out>) at ../Python/ceval.c:4872
#20 0x000000000050beb4 in _PyEval_EvalFrameDefault (f=<optimized out>, throwflag=<optimized out>) at ../Python/ceval.c:3335
#21 0x00000000005095c8 in PyEval_EvalFrameEx (throwflag=0, f=Frame 0x7fffd0d99e48, for file <frozen importlib._bootstrap>, line 571, in module_from_spec (spec=<ModuleSpec(name='readline', loader=<ExtensionFileLoader(name='readline', path='/usr/lib/python3.6/lib-dynload/readline.cpython-36m-x86_64-linux-gnu.so') at remote 0x7fffc1d74c50>, origin='/usr/lib/python3.6/lib-dynload/readline.cpython-36m-x86_64-linux-gnu.so', loader_state=None, submodule_search_locations=None, _set_fileattr=True, _cached=None) at remote 0x7fffc1d747f0>, module=None)) at ../Python/ceval.c:754
#22 0x00000000005095c8 in _PyFunction_FastCall (globals=<optimized out>, nargs=140736697310792, args=<optimized out>, co=<optimized out>) at ../Python/ceval.c:4933
#23 0x00000000005095c8 in fast_function.lto_priv (func=<function at remote 0x7ffff7f879d8>, stack=<optimized out>, nargs=1, kwnames=<optimized out>) at ../Python/ceval.c:4968
#24 0x000000000050a2fd in call_function.lto_priv (pp_stack=0x7fffffffc580, oparg=<optimized out>, kwnames=<optimized out>) at ../Python/ceval.c:4872
#25 0x000000000050beb4 in _PyEval_EvalFrameDefault (f=<optimized out>, throwflag=<optimized out>) at ../Python/ceval.c:3335
#26 0x00000000005095c8 in PyEval_EvalFrameEx (throwflag=0, f=Frame 0x7fffc27e7c48, for file <frozen importlib._bootstrap>, line 658, in _load_unlocked (spec=<ModuleSpec(name='readline', loader=<ExtensionFileLoader(name='readline', path='/usr/lib/python3.6/lib-dynload/readline.cpython-36m-x86_64-linux-gnu.so') at remote 0x7fffc1d74c50>, origin='/usr/lib/python3.6/lib-dynload/readline.cpython-36m-x86_64-linux-gnu.so', loader_state=None, submodule_search_locations=None, _set_fileattr=True, _cached=None) at remote 0x7fffc1d747f0>)) at ../Python/ceval.c:754
#27 0x00000000005095c8 in _PyFunction_FastCall (globals=<optimized out>, nargs=140736456457288, args=<optimized out>, co=<optimized out>) at ../Python/ceval.c:4933
#28 0x00000000005095c8 in fast_function.lto_priv (func=<function at remote 0x7ffff7f87bf8>, stack=<optimized out>, nargs=1, kwnames=<optimized out>) at ../Python/ceval.c:4968
#29 0x000000000050a2fd in call_function.lto_priv (pp_stack=0x7fffffffc770, oparg=<optimized out>, kwnames=<optimized out>) at ../Python/ceval.c:4872
#30 0x000000000050beb4 in _PyEval_EvalFrameDefault (f=<optimized out>, throwflag=<optimized out>) at ../Python/ceval.c:3335
#31 0x00000000005095c8 in PyEval_EvalFrameEx (throwflag=0, f=Frame 0x1692638, for file <frozen importlib._bootstrap>, line 955, in _find_and_load_unlocked (name='readline', import_=<built-in method __import__ of module object at remote 0x7ffff7fcb638>, path=None, parent='', spec=<ModuleSpec(name='readline', loader=<ExtensionFileLoader(name='readline', path='/usr/lib/python3.6/lib-dynload/readline.cpython-36m-x86_64-linux-gnu.so') at remote 0x7fffc1d74c50>, origin='/usr/lib/python3.6/lib-dynload/readline.cpython-36m-x86_64-linux-gnu.so', loader_state=None, submodule_search_locations=None, _set_fileattr=True, _cached=None)
at remote 0x7fffc1d747f0>)) at ../Python/ceval.c:754
#32 0x00000000005095c8 in _PyFunction_FastCall (globals=<optimized out>, nargs=23668280, args=<optimized out>, co=<optimized out>) at ../Python/ceval.c:4933
#33 0x00000000005095c8 in fast_function.lto_priv (func=<function at remote 0x7ffff7f89d08>, stack=<optimized out>, nargs=2, kwnames=<optimized out>) at ../Python/ceval.c:4968
#34 0x000000000050a2fd in call_function.lto_priv (pp_stack=0x7fffffffc960, oparg=<optimized out>, kwnames=<optimized out>) at ../Python/ceval.c:4872
#35 0x000000000050beb4 in _PyEval_EvalFrameDefault (f=<optimized out>, throwflag=<optimized out>) at ../Python/ceval.c:3335
#36 0x0000000000508cd5 in PyEval_EvalFrameEx (throwflag=0, f=Frame 0x1687998, for file <frozen importlib._bootstrap>, line 971, in _find_and_load (name='readline', import_=<built-in method __import__ of module object at remote 0x7ffff7fcb638>, module=<object at remote 0x7ffff7f8d030>)) at ../Python/ceval.c:754
#37 0x0000000000508cd5 in _PyFunction_FastCall (globals=<optimized out>, nargs=<optimized out>, args=<optimized out>, co=<optimized out>) at ../Python/ceval.c:4933
#38 0x0000000000508cd5 in _PyFunction_FastCallDict (func=<optimized out>, args=<optimized out>, nargs=<optimized out>, kwargs=0x0) at ../Python/ceval.c:5035
#39 0x00000000005a4c61 in _PyObject_FastCallDict (func=<function at remote 0x7ffff7f89d90>, args=0x7fffffffcb00, nargs=2, kwargs=0x0) at ../Objects/abstract.c:2310
#40 0x00000000005a5c9e in _PyObject_CallMethodIdObjArgs (callable=<function at remote 0x7ffff7f89d90>, name=<optimized out>) at ../Objects/abstract.c:2796
#41 0x00000000004f6d6d in PyImport_ImportModuleLevelObject (name='readline', globals=<optimized out>, locals=<optimized out>, fromlist=None, level=0) at ../Python/import.c:1578
#42 0x000000000050ddbf in import_name (level=0, fromlist=None, name='readline', f=Frame 0x2bf4018, for file /usr/lib/python3.6/pdb.py, line 154, in __init__ (self=<TerminalPdb(context=3, skip=None, breaks={}, fncache={}, frame_returning=None, stdin=<_io.TextIOWrapper at remote 0x7ffff7f79558>, stdout=<_io.TextIOWrapper at remote 0x7ffff7f79630>, cmdqueue=[], completekey=None, prompt='(Pdb) ', aliases={}, displaying={}, mainpyfile='', _wait_for_mainpyfile=False, tb_lineno={}) at remote 0x7fffc1d970b8>, completekey=None, stdin=None, stdout=None, skip=None, nosigint=False, readrc=True)) at ../Python/ceval.c:5245
#43 0x000000000050ddbf in _PyEval_EvalFrameDefault (f=<optimized out>, throwflag=<optimized out>) at ../Python/ceval.c:2899
#44 0x0000000000507be4 in PyEval_EvalFrameEx (throwflag=0, f=Frame 0x2bf4018, for file /usr/lib/python3.6/pdb.py, line 154, in __init__ (self=<TerminalPdb(context=3, skip=None, breaks={}, fncache={}, frame_returning=None, stdin=<_io.TextIOWrapper at remote 0x7ffff7f79558>, stdout=<_io.TextIOWrapper at remote 0x7ffff7f79630>, cmdqueue=[], completekey=None, prompt='(Pdb) ', aliases={}, displaying={}, mainpyfile='', _wait_for_mainpyfile=False, tb_lineno={}) at remote 0x7fffc1d970b8>, completekey=None, stdin=None, stdout=None, skip=None, nosigint=False, readrc=True)) at ../Python/ceval.c:754
#45 0x0000000000507be4 in _PyEval_EvalCodeWithName.lto_priv.1820 (_co=<optimized out>, globals=<optimized out>, locals=<optimized out>, args=<optimized out>, argcount=<optimized out>, kwnames=0x7ffff7f92060, kwargs=0x7ffff7f92068, kwcount=<optimized out>, kwstep=2, defs=0x7fffd1087360, defcount=6, kwdefs=0x0, closure=0x0, name=0x0, qualname=0x0) at ../Python/ceval.c:4166
#46 0x0000000000588d41 in PyEval_EvalCodeEx (closure=<optimized out>, kwdefs=<optimized out>, defcount=6, defs=0x7fffd1087360, kwcount=0, kws=0x7ffff7f92060, argcount=<optimized out>, args=0x7fffc29eac40, locals=0x0, globals=<optimized out>, _co=<optimized out>) at ../Python/ceval.c:4187
#47 0x0000000000588d41 in function_call.lto_priv (func=<optimized out>, arg=(<TerminalPdb(context=3, skip=None, breaks={}, fncache={}, frame_returning=None, stdin=<_io.TextIOWrapper at remote 0x7ffff7f79558>, stdout=<_io.TextIOWrapper at remote 0x7ffff7f79630>, cmdqueue=[], completekey=None, prompt='(Pdb) ', aliases={}, displaying={}, mainpyfile='', _wait_for_mainpyfile=False, tb_lineno={}) at remote 0x7fffc1d970b8>, None, None, None), kw={}) at ../Objects/funcobject.c:604
#48 0x000000000059fd0e in PyObject_Call (func=<function at remote 0x7fffd109b7b8>, args=<optimized out>, kwargs=<optimized out>) at ../Objects/abstract.c:2261
#49 0x000000000050d256 in do_call_core (kwdict={}, callargs=(<TerminalPdb(context=3, skip=None, breaks={}, fncache={}, frame_returning=None, stdin=<_io.TextIOWrapper at remote 0x7ffff7f79558>, stdout=<_io.Text---Type <return> to continue, or q <return> to quit---
IOWrapper at remote 0x7ffff7f79630>, cmdqueue=[], completekey=None, prompt='(Pdb) ', aliases={}, displaying={}, mainpyfile='', _wait_for_mainpyfile=False, tb_lineno={}) at remote 0x7fffc1d970b8>, None, None, None), func=<function at remote 0x7fffd109b7b8>) at ../Python/ceval.c:5120
#50 0x000000000050d256 in _PyEval_EvalFrameDefault (f=<optimized out>, throwflag=<optimized out>) at ../Python/ceval.c:3404
#51 0x0000000000507be4 in PyEval_EvalFrameEx (throwflag=0, f=Frame 0x1ec45b8, for file /home/fasano/panda/panda/python/venv/lib/python3.6/site-packages/IPython/core/debugger.py, line 227, in __init__ (self=<TerminalPdb(context=3, skip=None, breaks={}, fncache={}, frame_returning=None, stdin=<_io.TextIOWrapper at remote 0x7ffff7f79558>, stdout=<_io.TextIOWrapper at remote 0x7ffff7f79630>, cmdqueue=[], completekey=None, prompt='(Pdb) ', aliases={}, displaying={}, mainpyfile='', _wait_for_mainpyfile=False, tb_lineno={}) at remote 0x7fffc1d970b8>, color_scheme=None, completekey=None, stdin=None, stdout=None, context=3, kwargs={})) at ../Python/ceval.c:754
#52 0x0000000000507be4 in _PyEval_EvalCodeWithName.lto_priv.1820 (_co=<optimized out>, globals=<optimized out>, locals=<optimized out>, args=<optimized out>, argcount=<optimized out>, kwnames=0x7ffff4517220, kwargs=0x7ffff4517228, kwcount=<optimized out>, kwstep=2, defs=0x7fffd1134ab0, defcount=5, kwdefs=0x0, closure=0x0, name=0x0, qualname=0x0) at ../Python/ceval.c:4166
#53 0x0000000000588e5c in PyEval_EvalCodeEx (closure=<optimized out>, kwdefs=<optimized out>, defcount=5, defs=<optimized out>, kwcount=<optimized out>, kws=<optimized out>, argcount=<optimized out>, args=0x7fffd0d9fa00, locals=0x0, globals=<optimized out>, _co=<optimized out>) at ../Python/ceval.c:4187
#54 0x0000000000588e5c in function_call.lto_priv (func=<function at remote 0x7fffd109f950>, arg=(<TerminalPdb(context=3, skip=None, breaks={}, fncache={}, frame_returning=None, stdin=<_io.TextIOWrapper at remote 0x7ffff7f79558>, stdout=<_io.TextIOWrapper at remote 0x7ffff7f79630>, cmdqueue=[], completekey=None, prompt='(Pdb) ', aliases={}, displaying={}, mainpyfile='', _wait_for_mainpyfile=False, tb_lineno={}) at remote 0x7fffc1d970b8>,), kw=<optimized out>) at ../Objects/funcobject.c:604
#55 0x000000000059fd0e in PyObject_Call (func=<function at remote 0x7fffd109f950>, args=<optimized out>, kwargs=<optimized out>) at ../Objects/abstract.c:2261
#56 0x000000000050d256 in do_call_core (kwdict={'context': 3}, callargs=(<TerminalPdb(context=3, skip=None, breaks={}, fncache={}, frame_returning=None, stdin=<_io.TextIOWrapper at remote 0x7ffff7f79558>, stdout=<_io.TextIOWrapper at remote 0x7ffff7f79630>, cmdqueue=[], completekey=None, prompt='(Pdb) ', aliases={}, displaying={}, mainpyfile='', _wait_for_mainpyfile=False, tb_lineno={}) at remote 0x7fffc1d970b8>,), func=<function at remote 0x7fffd109f950>) at ../Python/ceval.c:5120
#57 0x000000000050d256 in _PyEval_EvalFrameDefault (f=<optimized out>, throwflag=<optimized out>) at ../Python/ceval.c:3404
#58 0x0000000000507be4 in PyEval_EvalFrameEx (throwflag=0, f=Frame 0x7fffa1ac95a0, for file /home/fasano/panda/panda/python/venv/lib/python3.6/site-packages/IPython/terminal/debugger.py, line 30, in __init__ (self=<TerminalPdb(context=3, skip=None, breaks={}, fncache={}, frame_returning=None, stdin=<_io.TextIOWrapper at remote 0x7ffff7f79558>, stdout=<_io.TextIOWrapper at remote 0x7ffff7f79630>, cmdqueue=[], completekey=None, prompt='(Pdb) ', aliases={}, displaying={}, mainpyfile='', _wait_for_mainpyfile=False, tb_lineno={}) at remote 0x7fffc1d970b8>, args=(), kwargs={'context': 3})) at ../Python/ceval.c:754
#59 0x0000000000507be4 in _PyEval_EvalCodeWithName.lto_priv.1820 (_co=<optimized out>, globals=<optimized out>, locals=<optimized out>, args=<optimized out>, argcount=<optimized out>, kwnames=0x7fffc2782920, kwargs=0x7fffc2782928, kwcount=<optimized out>, kwstep=2, defs=0x0, defcount=0, kwdefs=0x0, closure=0x0, name='__init__', qualname='TerminalPdb.__init__') at ../Python/ceval.c:4166
#60 0x0000000000508ec2 in _PyFunction_FastCallDict (func=<optimized out>, args=0x7fffffffd500, nargs=1, kwargs=<optimized out>) at ../Python/ceval.c:5075
#61 0x0000000000594a01 in _PyObject_FastCallDict (kwargs={'context': 3}, nargs=1, args=0x7fffffffd500, func=<function at remote 0x7fffc393a730>) at ../Objects/abstract.c:2310
#62 0x0000000000594a01 in _PyObject_Call_Prepend (kwargs={'context': 3}, args=<optimized out>, obj=<optimized out>, func=<function at remote 0x7fffc393a730>) at ../Objects/abstract.c:2373
#63 0x0000000000594a01 in method_call.lto_priv (method=<optimized out>, args=<optimized out>, kwargs={'context': 3}, method=<optimized out>, args=<optimized out>, kwargs=<optimized out>)
    at ../Objects/classobject.c:314
#64 0x0000000000549e8f in PyObject_Call (kwargs={'context': 3}, args=(), func=<method at remote 0x7fffa2a7d308>) at ../Objects/abstract.c:2261
#65 0x0000000000549e8f in slot_tp_init (self=<TerminalPdb(context=3, skip=None, breaks={}, fncache={}, frame_returning=None, stdin=<_io.TextIOWrapper at remote 0x7ffff7f79558>, stdout=<_io.TextIOWrapper at remote 0x7ffff7f79630>, cmdqueue=[], completekey=None, prompt='(Pdb) ', aliases={}, displaying={}, mainpyfile='', _wait_for_mainpyfile=False, tb_lineno={}) at remote 0x7fffc1d970b8>, args=(), kwds={'context': 3}) at ../Objects/typeobject.c:6420
#66 0x00000000005515c1 in type_call.lto_priv (type=<optimized out>, args=(), kwds={'context': 3}) at ../Objects/typeobject.c:915
#67 0x00000000005a9dac in _PyObject_FastCallDict (kwargs=<optimized out>, nargs=0, args=0x16c66c0, func=<type at remote 0x124f408>) at ../Objects/tupleobject.c:131
#68 0x00000000005a9dac in _PyObject_FastCallKeywords (func=<type at remote 0x124f408>, stack=0x16c66c0, nargs=0, kwnames=<optimized out>) at ../Objects/abstract.c:2496
#69 0x000000000050a433 in call_function.lto_priv (pp_stack=0x7fffffffd788, oparg=<optimized out>, kwnames=<optimized out>) at ../Python/ceval.c:4875
#70 0x000000000050cc96 in _PyEval_EvalFrameDefault (f=<optimized out>, throwflag=<optimized out>) at ../Python/ceval.c:3351
#71 0x0000000000507be4 in PyEval_EvalFrameEx (throwflag=0, f=Frame 0x16c6528, for file /home/fasano/panda/panda/python/venv/lib/python3.6/site-packages/ipdb/__main__.py, line 54, in _init_pdb (context=3, commands=[])) at ../Python/ceval.c:754
#72 0x0000000000507be4 in _PyEval_EvalCodeWithName.lto_priv.1820 (_co=<optimized out>, globals=<optimized out>, locals=<optimized out>, args=<optimized out>, argcount=<optimized out>, kwnames=0x0, kwargs=0x7fffa1e61b00, kwcount=<optimized out>, kwstep=1, defs=0x7ffff40de560, defcount=2, kwdefs=0x0, closure=0x0, name='_init_pdb', qualname='_init_pdb') at ../Python/ceval.c:4166
#73 0x0000000000509900 in fast_function.lto_priv (func=<function at remote 0x7fffc2a40378>, stack=0x7fffa1e61af8, nargs=1, kwnames=<optimized out>) at ../Python/ceval.c:4992
#74 0x000000000050a2fd in call_function.lto_priv (pp_stack=0x7fffffffdaa0, oparg=<optimized out>, kwnames=<optimized out>) at ../Python/ceval.c:4872
#75 0x000000000050beb4 in _PyEval_EvalFrameDefault (f=<optimized out>, throwflag=<optimized out>) at ../Python/ceval.c:3335
#76 0x0000000000505f44 in PyEval_EvalFrameEx (throwflag=0, f=Frame 0x7fffa1e61958, for file /home/fasano/panda/panda/python/venv/lib/python3.6/site-packages/ipdb/__main__.py, line 75, in set_trace (frame=Frame 0x7fffc27e7848, for file /home/fasano/git/pandata/crawl.py, line 471, in crawl (self=<Crawler(panda=<Panda(arch_name='arm', mem='1G', os=None, os_type='linux', qcow=None, plugins=<plugin_list(_panda=<...>) at remote 0x7fffa2a9dd58>, expect_prompt=None, lambda_cnt=0, arch=<ArmArch(panda=<...>, reg_sp=13, reg_pc=15, reg_retaddr=14, registers={'R0': 0, 'R1': 1, 'R2': 2, 'R3': 3, 'R4': 4, 'R5': 5, 'R6': 6, 'R7': 7, 'R8': 8, 'R9': 9, 'R10': 10, 'R11': 11, 'R12': 12, 'SP': 13, 'LR': 14, 'IP': 15}) at remote 0x7ffff4512ef0>, _Panda__sighandler=<_cffi_backend.__CDataOwnGC at remote 0x7fffc1fe3438>, bits=32, endianness='little', register_size=4, build_dir='/home/fasano/panda/build', libpanda_path='/home/fasano/panda/build/arm-softmmu/libpanda-arm.so', panda='/home/fasano/panda/build/arm-softmmu/libpanda-arm.so', ffi=<_cffi_backend.F---Type <return> to continue, or q <return> to quit---
FI at remote 0x7ffff4b4ecf8>, callback_d...(truncated)) at ../Python/ceval.c:754
#77 0x0000000000505f44 in _PyFunction_FastCall (co=<optimized out>, args=<optimized out>, nargs=3, globals=<optimized out>) at ../Python/ceval.c:4933
#78 0x0000000000509d4f in fast_function.lto_priv (func=<function at remote 0x7fffc2a409d8>, stack=<optimized out>, nargs=0, kwnames=<optimized out>) at ../Python/ceval.c:4975
#79 0x000000000050a2fd in call_function.lto_priv (pp_stack=0x7fffffffdc60, oparg=<optimized out>, kwnames=<optimized out>) at ../Python/ceval.c:4872
#80 0x000000000050beb4 in _PyEval_EvalFrameDefault (f=<optimized out>, throwflag=<optimized out>) at ../Python/ceval.c:3335
#81 0x00000000005095c8 in PyEval_EvalFrameEx (throwflag=0, f=Frame 0x7fffc27e7848, for file /home/fasano/git/pandata/crawl.py, line 471, in crawl (self=<Crawler(panda=<Panda(arch_name='arm', mem='1G', os=None, os_type='linux', qcow=None, plugins=<plugin_list(_panda=<...>) at remote 0x7fffa2a9dd58>, expect_prompt=None, lambda_cnt=0, arch=<ArmArch(panda=<...>, reg_sp=13, reg_pc=15, reg_retaddr=14, registers={'R0': 0, 'R1': 1, 'R2': 2, 'R3': 3, 'R4': 4, 'R5': 5, 'R6': 6, 'R7': 7, 'R8': 8, 'R9': 9, 'R10': 10, 'R11': 11, 'R12': 12, 'SP': 13, 'LR': 14, 'IP': 15}) at remote 0x7ffff4512ef0>, _Panda__sighandler=<_cffi_backend.__CDataOwnGC at remote 0x7fffc1fe3438>, bits=32, endianness='little', register_size=4, build_dir='/home/fasano/panda/build', libpanda_path='/home/fasano/panda/build/arm-softmmu/libpanda-arm.so', panda='/home/fasano/panda/build/arm-softmmu/libpanda-arm.so', ffi=<_cffi_backend.FFI at remote 0x7ffff4b4ecf8>, callback_dictionary={<built-in method callback_decorator of tuple object at remote 0x7ffff40d4ef8>: <pandacbtype at remote 0x7ffff4049fc0>, <built-in met...(truncated)) at ../Python/ceval.c:754
#82 0x00000000005095c8 in _PyFunction_FastCall (globals=<optimized out>, nargs=140736456456264, args=<optimized out>, co=<optimized out>) at ../Python/ceval.c:4933
#83 0x00000000005095c8 in fast_function.lto_priv (func=<function at remote 0x7fffc1d80a60>, stack=<optimized out>, nargs=1, kwnames=<optimized out>) at ../Python/ceval.c:4968
#84 0x000000000050a2fd in call_function.lto_priv (pp_stack=0x7fffffffde50, oparg=<optimized out>, kwnames=<optimized out>) at ../Python/ceval.c:4872
#85 0x000000000050beb4 in _PyEval_EvalFrameDefault (f=<optimized out>, throwflag=<optimized out>) at ../Python/ceval.c:3335
#86 0x0000000000507be4 in PyEval_EvalFrameEx (throwflag=0, f=Frame 0xb0d238, for file ./web.py, line 120, in <module> ()) at ../Python/ceval.c:754
#87 0x0000000000507be4 in _PyEval_EvalCodeWithName.lto_priv.1820 (_co=<optimized out>, globals=<optimized out>, locals=<optimized out>, args=<optimized out>, argcount=<optimized out>, kwnames=0x0, kwargs=0x0, kwcount=<optimized out>, kwstep=2, defs=0x0, defcount=0, kwdefs=0x0, closure=0x0, name=0x0, qualname=0x0) at ../Python/ceval.c:4166
#88 0x000000000050ad03 in PyEval_EvalCodeEx (closure=0x0, kwdefs=0x0, defcount=0, defs=0x0, kwcount=0, kws=0x0, argcount=0, args=0x0, locals=<optimized out>, globals=<optimized out>, _co=<optimized out>)
    at ../Python/ceval.c:4187
#89 0x000000000050ad03 in PyEval_EvalCode (co=<optimized out>, globals=<optimized out>, locals=<optimized out>) at ../Python/ceval.c:731
#90 0x0000000000634e72 in run_mod (mod=0xb44e58, filename='./web.py', globals={'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <SourceFileLoader(name='__main__', path='./web.py') at remote 0x7ffff7f03da0>, '__spec__': None, '__annotations__': {}, '__builtins__': <module at remote 0x7ffff7fcb638>, '__file__': './web.py', '__cached__': None, 'Panda': <type at remote 0xc6b2e8>, 'ffi': <FFI(_backend=<module at remote 0x7ffff5536458>, _lock=<_thread.lock at remote 0x7ffff50aada0>, _parser=<Parser(_declarations={'struct IoctlCmdBits': (<StructType(name='IoctlCmdBits', fldnames=('type_num', 'cmd_num', 'arg_size', 'direction'), fldtypes=(<PrimitiveType(name='uint8_t', c_name_with_marker='uint8_t&') at remote 0x7fffc0040d30>, <...>, <PrimitiveType(name='uint16_t', c_name_with_marker='uint16_t&') at remote 0x7fffc0040c50>, <...>), fldbitsize=(8, 8, 14, 2), fldquals=(0, 0, 0, 0), c_name_with_marker='struct IoctlCmdBits&', forcename=None, packed=1, completed=2) at remote 0x7fffc0040e48>, 0), 'union IoctlCmdUnion': (<UnionType(name='IoctlCmdUnion', fldnames=('bits', 'asU...(truncated), locals={'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <SourceFileLoader(name='__main__', path='./web.py') at remote 0x7ffff7f03da0>, '__spec__': None, '__annotations__': {}, '__builtins__': <module at remote 0x7ffff7fcb638>, '__file__': './web.py', '__cached__': None, 'Panda': <type at remote 0xc6b2e8>, 'ffi': <FFI(_backend=<module at remote 0x7ffff5536458>, _lock=<_thread.lock at remote 0x7ffff50aada0>, _parser=<Parser(_declarations={'struct IoctlCmdBits': (<StructType(name='IoctlCmdBits', fldnames=('type_num', 'cmd_num', 'arg_size', 'direction'), fldtypes=(<PrimitiveType(name='uint8_t', c_name_with_marker='uint8_t&') at remote 0x7fffc0040d30>, <...>, <PrimitiveType(name='uint16_t', c_name_with_marker='uint16_t&') at remote 0x7fffc0040c50>, <...>), fldbitsize=(8, 8, 14, 2), fldquals=(0, 0, 0, 0), c_name_with_marker='struct IoctlCmdBits&', forcename=None, packed=1, completed=2) at remote 0x7fffc0040e48>, 0), 'union IoctlCmdUnion': (<UnionType(name='IoctlCmdUnion', fldnames=('bits', 'asU...(truncated), flags=0x7fffffffe12c, arena=0x7ffff7f63390) at ../Python/pythonrun.c:1025
#91 0x0000000000634f27 in PyRun_FileExFlags (fp=0xab8420, filename_str=0x7ffff68eeb00 "./web.py", start=257, globals={'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <SourceFileLoader(name='__main__', path='./web.py') at remote 0x7ffff7f03da0>, '__spec__': None, '__annotations__': {}, '__builtins__': <module at remote 0x7ffff7fcb638>, '__file__': './web.py', '__cached__': None, 'Panda': <type at remote 0xc6b2e8>, 'ffi': <FFI(_backend=<module at remote 0x7ffff5536458>, _lock=<_thread.lock at remote 0x7ffff50aada0>, _parser=<Parser(_declarations={'struct IoctlCmdBits': (<StructType(name='IoctlCmdBits', fldnames=('type_num', 'cmd_num', 'arg_size', 'direction'), fldtypes=(<PrimitiveType(name='uint8_t', c_name_with_marker='uint8_t&') at remote 0x7fffc0040d30>, <...>, <PrimitiveType(name='uint16_t', c_name_with_marker='uint16_t&') at remote 0x7fffc0040c50>, <...>), fldbitsize=(8, 8, 14, 2), fldquals=(0, 0, 0, 0), c_name_with_marker='struct IoctlCmdBits&', forcename=None, packed=1, completed=2) at remote 0x7fffc0040e48>, 0), 'union IoctlCmdUnion': (<UnionType(name='IoctlCmdUnion', fldnames=('bits', 'asU...(truncated), locals={'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <SourceFileLoader(name='__main__', path='./web.py') at remote 0x7ffff7f03da0>, '__spec__': None, '__annotations__': {}, '__builtins__': <module at remote 0x7ffff7fcb638>, '__file__': './web.py', '__cached__': None, 'Panda': <type at remote 0xc6b2e8>, 'ffi': <FFI(_backend=<module at remote 0x7ffff5536458>, _lock=<_thread.lock at remote 0x7ffff50aada0>, _parser=<Parser(_declarations={'struct IoctlCmdBits': (<StructType(name='IoctlCmdBits', fldnames=('type_num', 'cmd_num', 'arg_size', 'direction'), fldtypes=(<PrimitiveType(name='uint8_t', c_name_with_marker='uint8_t&') at remote 0x7fffc0040d30>, <...>, <PrimitiveType(name='uint16_t', c_name_with_marker='uint16_t&') at remote 0x7fffc0040c50>, <...>), fldbitsize=(8, 8, 14, 2), fldquals=(0, 0, 0, 0), c_name_with_marker='struct IoctlCmdBits&', forcename=None, packed=1, completed=2) at remote 0x7fffc0040e48>, 0), 'union IoctlCmdUnion': (<UnionType(name='IoctlCmdUnion', fldnames=('bits', 'asU...(truncated), closeit=1, flags=0x7fffffffe12c) at ../Python/pythonrun.c:978
#92 0x00000000006386df in PyRun_SimpleFileExFlags (fp=0xab8420, filename=<optimized out>, closeit=1, flags=0x7fffffffe12c) at ../Python/pythonrun.c:419
#93 0x00000000006388b5 in PyRun_AnyFileExFlags (fp=fp@entry=0xab8420, filename=<optimized out>, closeit=<optimized out>, flags=flags@entry=0x7fffffffe12c) at ../Python/pythonrun.c:81
#94 0x0000000000639281 in run_file (p_cf=0x7fffffffe12c, filename=<optimized out>, fp=<optimized out>) at ../Modules/main.c:340
#95 0x0000000000639281 in Py_Main (argc=2, argv=0xa84260) at ../Modules/main.c:810
#96 0x00000000004b0dc0 in main (argc=2, argv=0x7fffffffe328) at ../Programs/python.c:69

I think this is related to the order in which libraries get loaded. If (core) PANDA loads readline, then Python will use the same library and something goes wrong. But if we load pdb before PANDA can, python will import readline and it works fine.

Worth investigating more. For now I just wanted to share the workaround.

Edit: Another workaround appears to import readline before pandare

mariusmue commented 3 years ago

I had similar experiences with IPython (which probably uses readline internally) - importing it very early on seems to work there as well.