GCC インライン アセンブリ コードの %c は何を意味しますか?
-
16-09-2019 - |
質問
私はこのインラインアセンブリコードを理解しようとしています。 _hypercall0
ここ.
asm volatile ("call hypercall_page+%c[offset]" \
: "=r" (__res) \
: [offset] "i" (__HYPERVISOR_##name * sizeof(hypercall_page[0])) \
: "memory", "edi", "esi", "edx", "ecx", "ebx", "eax")
何についての情報が見つからなくて困っています %c
1行目の意味は。このセクションの最も明白なセクションには情報が見つかりませんでした。 GCCマニュアル, を説明します。 %[name]
, 、 だがしかし %c[name]
. 。他に見るべき場所はありますか?
解決
`%C 桁」置き換えるために使用することができます 一定値であるオペランド 通常の構文なし 即値オペランドを示します。
他のヒント
アセンブリ出力を確認します ( gcc -S
, 、またはオブジェクト ファイルを逆アセンブルすると、より明確になる可能性があります。
私の推測では、それは 絶え間ない. hypercall_page
それぞれがシステムコールを実行する命令の表のように見えます。おそらくこれにより、 call hypercall_page + {constant based on the expression given}
, 、基本的にコンパイル時にこのオフセットのアドレスを計算します。
余談ですが、これは __HYPERVISOR##name
本当に思い出させてくれるのは __NR_name_of_syscall
Linux の <asm/unistd.h> などの syscall で見られる型規則。
所属していません StackOverflow