OCaml language support for gdb
Mark Shinwell <[email protected]>
| Newsgroups | gmane.comp.gdb.devel |
|---|---|
| Message-ID | <CAM3Ki75MmVm0eN3jUbaknUE3kwGrM2_g8814961rS=XxGtNG_A@mail.gmail.com> |
Hello everyone, I would like to contribute support for debugging OCaml code to the gdb project. OCaml is a hybrid functional/imperative language, suitable for developing complex and reliable systems, that is rapidly gaining traction in a variety of applications from academia to industry. Native platform debugging support for such languages has traditionally been poor. I would welcome feedback from this list at a high level before moving forward to propose patches. The infrastructure I have been developing for OCaml debugging falls into three parts: 1. Modifications to the OCaml compiler [1] to reduce loss of information during optimisation and to emit DWARF-4 sections. 2. A debugger support library called libmonda [2]. 3. Modifications to gdb [3] which mostly consist of a new language implementation, ocaml-lang.c, currently only about 500 lines. It is expected that the compiler modifications will be available in a released version of OCaml around Spring 2017. The ocaml-lang.c file in gdb defers basically all functionality to libmonda, which is a shared library dynamically loaded into gdb as required. The library is written almost entirely in OCaml with a small portion in C. It is statically linked against both the OCaml runtime code and the OCaml compiler library. The majority of the library is parameterised over the particular debugger being used---currently there is only a gdb implementation, but others are likely to follow (in particular for lldb; and also perhaps a "debugger" which is actually implemented by a program introspecting itself, for testing purposes). In the case of libmonda for gdb, the library calls back into gdb itself to perform tasks such as reading target memory, etc. libmonda takes care of the difficult problems of printing OCaml values and types at runtime. To do this it needs not only the DWARF information fed through from the debugger, but also sidecar files written by the compiler during the compilation process. (We aim in due course to provide submissions to the DWARF standards committee with a view to improving DWARF support for this sort of language.) I would hope that the maintenance burden of adding this additional language to gdb is likely to be low. I can certainly commit to maintaining it for the foreseeable future. It is the case at present that various user interface-related operations do not function as well as might be liked, and this might cause some small refactorings to existing gdb code to be proposed. It is also the case that there are likely to be rather a lot of rough edges in the early versions of this, although these would only affect the debugging of OCaml code. I think that is to be expected, and have confidence that users will be able to accept these when balanced against the very significant step forward of being able to debug such code in a reasonable manner. The combination of licences involved in a gdb executable using this new functionality, that is to say: gdb (GPLv3), libmonda (MIT) and the OCaml core system (LGPLv2.1 + linking exception) deserves some attention. To the best of my knowledge the combination of GPLv3, MIT and LGPLv2.1 "used as a library" is compatible (cf. https://www.gnu.org/licenses/gpl-faq.html#AllCompatibility). However the OCaml core system has an exception [4] which makes its license slightly more permissive than the LGPLv2.1. I presume that the FSF would have to attest that this would be compatible with the GPLv3. (If one of the gdb maintainers has a contact with whom I could enquire about this, I would be grateful.) I would be pleased if a maintainer could provide information on the current requirements/forms regarding copyright assignment. My CodeSourcery one will be out of date now. Much of this work has been conducted on work time at my current employer, Jane Street, who would need to be involved in such assignment. I suspect there will be a lot of questions, so I'll leave it at that for now. Mark Shinwell [1] https://github.com/ocaml/ocaml/pull/574 [2] http://mshinwell.github.io/libmonda/ [3] https://github.com/mshinwell/gdb/tree/gdb-7.11 [4] https://github.com/ocaml/ocaml/blob/trunk/LICENSE