On Thu, 24 Oct 2019 at 16:50, drug via D.gnu <d.gnu@puremagic.com> wrote: > > On 10/24/19 5:41 PM, Iain Buclaw wrote: > > > > It looks like this is a top-level inline asslembler declaration? D > > doesn't support top-level inline assembler, however I think this would > > be a useful feature to allow. > > > > As for the syntax, it's `asm { ... }` > > > > This is in fact DTrace probe generated by using > ``` > DTRACE_PROBE2(myapp, func_call, a, b); > ``` > I would like to generate this code by myself without C macros by obvious > reason. I need ability to insert nop operation (that is trivial) and > then add a note to specific section with the description of this probe > (the address of this nop operation first of all and some other information) > > But as I understand it is impossible?
You can do the following: void somefunc() { asm { "990: nop" ~ ".pushsection .note.stapsdt,\"?\",\"note\"" ~ ".balign 4" ~ ".4byte 992f-991f, 994f-993f, 3" ~ "991: .asciz \"stapsdt\"" ~ "992: .balign 4" ~ "993: .8byte 990b" ~ ".8byte _.stapsdt.base" ~ ".8byte 0" ~ ".asciz \"myapp\"" ~ ".asciz \"func_call\"" ~ ".asciz \"%n[_SDT_S1]@%[_SDT_A1] %n[_SDT_S2]@%[_SDT_A2]\"" ~ "994: .balign 4" ~ ".popsection\n" :: [_SDT_S1] "n" (4), [_SDT_A1] "nor" ((a)), [_SDT_S2] "n" (4), [_SDT_A2] "nor" ((b)) } } The instruction string can be generated at CTFE. -- Iain