以下のインライン アセンブリ コードに問題はありますか? 関数 spinlock_lock を実行すると、「不正な命令 (コア ダンプ)」が発生しました。
void spinlock_lock(struct spinlock * lock) {
int a;
__asm__ __volatile__("movl %0, %%eax;"
"test %%eax, %%eax;"
"jnz spinlock_lock;"
:"=r"(a)
:"r"(lock->cmos_lock)
:"eax");
__asm__ __volatile__ ("lock; cmpxchg %%edx, %0\n"
:"=r"(a)
:"r"(lock->cmos_lock)
:"edx", "memory");