有谁知道以下代码的作用? 我不确定引用的是1,2,3,以及它们在这里是如何使用的。 : - (
95 asm volatile("2: wrmsr ; xor %[err],%[err]\n"
96 "1:\n\t"
97 ".section .fixup,\"ax\"\n\t"
98 "3: mov %[fault],%[err] ; jmp 1b\n\t"
99 ".previous\n\t"
100 _ASM_EXTABLE(2b, 3b)
101 : [err] "=a" (err)
102 : "c" (msr), "" (low), "d" (high),
103 [fault] "i" (-EIO)
104 : "memory");
105 return err;
代码来自Linux:http://lxr.free-electrons.com/source/arch/x86/include/asm/msr.h#L91
如果有人能给我一些关键词来谷歌,我真的很感激。
非常感谢你!
答案 0 :(得分:1)
那些是local labels(数字后跟冒号)。
如果稍后引用它们,则b
(如jmp 1b
)表示引用该数字的最近的本地标签向后。 f
稍后会在代码中查找匹配的本地标签(转发)。
该代码声明了一个异常表,当执行wrmsr
指令发生异常时,错误处理程序(通常在arch/<your_CPU_arch>/mm/fault.c
中)在异常表中搜索相应的条目,并跳转到那里。
正如您所看到的,该异常的条目会将EIO
移至err
,然后跳回xor
后的指令(如果err
清除-keepclassmembers class com.company.user.* {
public *;
}
没有错误。)