How to port this GCC assembly to gdc?

Iain Buclaw ibuclaw at gdcproject.org
Thu Oct 24 14:41:35 UTC 2019


On Thu, 24 Oct 2019 at 12:05, drug via D.gnu <d.gnu at puremagic.com> wrote:
>
> Hello!
>
> I have the following assebly:
> ```C
> __asm__ __volatile__ (
>         "990: nop\n"                                                 \
>         ".pushsection .note.stapsdt,\"?\",\"note\"\n"                \
>         ".balign 4\n"                                                \
>         ".4byte 992f-991f, 994f-993f, 3\n"                           \
>         "991: .asciz \"stapsdt\"\n"                                  \
>         "992: .balign 4\n"                                           \
>         "993: .8byte 990b\n"                                         \
>         ".8byte _.stapsdt.base\n"                                    \
>         ".8byte 0\n"                                                 \
>         ".asciz \"myapp\"\n"                                         \
>         ".asciz \"func_call\"\n"                                     \
>         ".asciz \"%n[_SDT_S1]@%[_SDT_A1] %n[_SDT_S2]@%[_SDT_A2]\"\n" \
>         "994: .balign 4\n"                                           \
>         ".popsection\n"
>         :: [_SDT_S1] "n" (4),
>            [_SDT_A1] "nor" ((a)),
>            [_SDT_S2] "n" (4),
>            [_SDT_A2] "nor" ((b))
> );
> ```
> this code compiles by gcc but gdc ((Debian 6.3.0-18+deb9u1) 6.3.0
> 20170516) fails. It doesn't like __volatile__ keyword and :: syntax
>
> ```D
> __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))
> );
> ```

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 { ... }`

-- 
Iain


More information about the D.gnu mailing list