_nosay 发表于 2016-07-15 19:20

SYMBOL_NAME(init_task_union)+8192 疑问?

arch/i386/kernel/process.c, line 22~24:union task_union init_task_union
        __attribute__((__section__(".data.init_task"))) =
                { INIT_TASK(init_task_union.task) };include/linux/linkage.h, line 21:#define SYMBOL_NAME(X) Xarch/i386/kernel/head.S, line 330~332:ENTRY(stack_start)
        .long SYMBOL_NAME(init_task_union)+8192
        .long __KERNEL_DS对于C编译器来讲,直接将union变量与8192相加,是不允许的。这里这样写,是因为当前在.S文件里吧?C里,要得到地址就得加&;汇编里,变量本身就是表示一块内存开始位置的标记。是不?

nswcfd 发表于 2016-07-18 13:22

是的,汇编没有左右值之分,符号即地址。

至少对at&t语法是这样的,不知道其它家的要求是啥样的。

_nosay 发表于 2016-07-18 17:01

回复 2# nswcfd

噢,我又要辍学了{:yct68:} 。 干活。。 加班。。
页: [1]
查看完整版本: SYMBOL_NAME(init_task_union)+8192 疑问?