1

インライン アセンブリを大量に使用するカーネル モジュールを作成したくありません。私は Intel Syntax に慣れているので、AT&T Syntax を完全に避けたいと思っています。これを行う 1 つの方法を、次の最小限の例に示します。

samplemodule.c

#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>

MODULE_LICENSE("GPL");

unsigned long foo(void) {
    unsigned long ret = 0;

    asm (
        ".intel_syntax noprefix\n"
        "mov rbx, 1337\n"
        "mov %0, rbx\n"
        ".att_syntax noprefix\n"
        :"=r"(ret)
        :
        :"rbx"
    );

    return ret;
}

static int init_routine(void) {
    printk(KERN_INFO "Sample Module init\n");
    printk(KERN_INFO "Test: %lu\n", foo());

    return 0;
}

static void exit_routine(void) {
    printk(KERN_INFO "Sample Module exit\n");
}

module_init(init_routine);
module_exit(exit_routine);

メイクファイル

obj-m += samplemodule.o

all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

したがって、アセンブリをインライン化したいときはいつでも、2 つの write があり.intel_syntax noprefix\n...\n.att_syntax noprefix\nます。これを達成する他の方法はありますか?gcc でコンパイルするときは、gcc に-masm=intel引数を渡すだけで、インテルの構文を自由に使用できました。この場合、同様のことが可能ですか?

4

1 に答える 1