# Dump fiber stack traces ### Implement debug info for compiled code LuaJIT can compile the particular Lua flows to the traces via JIT machinery. The generated trace contains no branches in terms of Lua code; all Lua calls are inlined. All source-related debug info is stored in Lua functions prototypes. The function prototype is linked to the function's prologue. IR generated by JIT is not fully linked with the bytecode that has been traced, hence we can say nothing about the relations between the traced sources and the compiled mcode. **Task**: the student has to get familiar with the relations between Lua sources, Lua bytecode, IR and mcode, provide the design for introducing source-related debug for traces, implement this feature and make the benchmarks. ### Implement guest stack processing within Google Breakpad There is an external tool for recording the compact "minidump" files -- [Google Breakpad](https://chromium.googlesource.com/breakpad/breakpad/). This tool can only produce C stack traces from the collected minidumps. However, it would be useful to also see the guest stack traces after processing these minidumps. **Task**: the student has to get familiar with the Google Breakpad and LuaJIT guest stack layout (frame types, Lua-Lua calls, TCO), provide the design for implementing LuaJIT stack traces in terms of Google Breakpad and implement this feature. ### Dump traceback on signal Tarantool can yield fiber backtraces via `fiber.info` (when Tarantool is compiled with `-DENABLE_BACKTRACES`), however, there can be fibers taking the resources forever and there is no way to call `fiber.info` at the moment. For such cases we need to dump the backtrace on the signal sent to the particular Tarantool instance. **Task**: the student has to get familiar with the existing backtrace machinery and LuaJIT debug API, adjust this API to be signal-safe and consistent and implement the signal handler dumping both host and guest stack traces for the currently running fiber. ## Bonus ### Why Tarantool decimals are not compiled? There is a Tarantool storage type implemented as a custom Lua type -- decimals. Unfortunately, there are some case when using decimals unpredictable drops the platform performance. **Task**: the student has to get familiar with the JIT engine basics and the related tools, investigate the case described in the issue and finally provide the resolution: fix the decimal implementation to make it more JIT-friendly, fix the JIT engine or provide an explanation why the issue can't be fixed in scope of the current JIT engine design. As a result the [issue](https://github.com/tarantool/tarantool/issues/4630) will be closed and can be considered as a contribution to Tarantool.