I just had the most terrible idea. I want to run Rust on the AM234x Launchpad, on the R cores, but their debug interface can’t access RAM whilst the core is running so RTT is impossible. But they have an M core which should work (needs testing). It’s all running from RAM anyway but how do you pack an R program into an M program? Well you can objcopy it into a flat binary and have that stored as an array at the right address using linker magic. But defmt will only work on the M core. Or would it. The addresses of defmt interned strings are allocated by the linker. The defmt.x file tells the linker that addresses start at 1. Thanks to 9names for reminding me of this with the eld testing. But what if the R binary had a different defmt.x that didn’t start at 1? What if it started at 50? And then what if I wrote a program that copied all the defmt symbols from symbol table in the R core’s ELF file and put them in the symbol table in the M core’s ELF file? Then when defmt-decoder ran it would be able to look up defmt interned strings from either core. And all the data encoding is totally CPU independent and completely described by the interned format strings.