x86アセンブリでIDTテーブルを手動で作成する作業をしています。.SファイルでCプリプロセッサを使用して次のマクロを定義しています。
// sets up an entry in the idt for a trap type
#define SETUP_IDT_ENTRY( name, num, istrap, segment, dpl ) \
lea name, %edx; \
movl $(KCODE << 16), %eax; \
movw $0x8e00, %dx; \
lea (idt + (8 * num)), %edi; \
movl %eax, (%edi); \
movl %edx, 4(%edi);
// sample set of args to a call to setup_dt_entry
#define M_DIVIDE _t_divide_ep, T_DIVIDE, 0, KCODE, 0
// the call
SETUP_IDT_ENTRY( M_DIVIDE )
ただし、gccは次のように文句を言います。error: macro "SETUP_IDT_ENTRY" requires 5 arguments, but only 1 given
関数呼び出しが評価される前に、#define'd関数への#define'd引数が拡張されたと思いました。その場合、M_DIVIDE
必要な5つの引数に拡張され、SETUP_IDT_ENTRY
満足します。括弧のさまざまな組み合わせを試しましたが、何も機能していないようです。これを機能させる方法はありますか?
注:x86アセンブリでIDTを構築するための代替アプローチがあることは知っていますが、それは私がここで答えようとしている質問ではありません。マクロをマクロ引数として展開できるかどうかを調べようとしています。