On Fri, 2024-05-10 at 15:46 +0200, Gerd Möllmann wrote: > Hi, > > I'm developing Emacs using its native compilation on macOS, which is > based on libgccjit. > > In this context, I'm currently failing to get .eln files (= .so, > .dylib, > .dll depending on the platform) with debug info. This has probably > its > roots in the special handling of DWARF under macOS, a long-winded > story > leading to dSYM bundles... > > My question is: can I somehow configure libgccjit in a way that keeps > the .o file that was used to produce the resulting .dylib, like it > keeps/writes the various intermediate files that one can get? > > If that's possible, my hope would be to extract the debug info from > the > .o using dsymutil and use that with the .dylib.
[CCing Andrea Corallo for his Emacs expertise] I confess I've not done any compilation on macOS and am not familiar with the tools, formats and "special handling of DWARF under macOS" you mention. As I understand it, Emacs is using libgccjit to do ahead-of-time compilation, presumably compiling the optimized ELisp code to machine code as a shared library. Is Emacs using gcc_jit_context_compile_to_file with GCC_JIT_OUTPUT_KIND_DYNAMIC_LIBRARY, or is it doing something more complicated? If that's what it's doing, you might want to take a look at playback::context::compile in gcc/jit-playback.cc (and try stepping through it in the debugger). In particular, the playback::compile_to_file::postprocess implementation of the playback::context::postprocess vfunc is responsible for taking a .s in a tempdir and turning it into the desired output. Perhaps there's some macOS-specific special-casing needed there? You might also find it useful to look at the overview of how libgccjit's internals here: https://gcc.gnu.org/onlinedocs/jit/internals/index.html#overview-of-code-structure Hope this is helpful Dave