Встроенные ошибки сборки: мусор `-4(%ebp)'после регистрации
GCC сообщает нежелательную `-4(%ebp)'после ошибок реестра для моих следующих кодов:
static __inline__ int xchg_asm(int* lock, int val)
{
int ret;
__asm__ __volatile__(
LOCK "movl %1,%%eax; xchg (%1),%2 ; movl %%eax %0"
:"=m" (ret)
:"d"(lock), "c"(val));
return ret;
}
Я не вижу, как это изменить.
3 ответа
gas
(ассемблер GNU, используемый gcc) ожидает переводы строки как окончания строки, а не точки с запятой. Вы пытались использовать "\n"
вместо ";"
?
Попробуйте добавить '\n' после каждой проверки asm:
__asm__ __volatile__(
LOCK "movl %1,%%eax \n xchg (%1),%2 \n movl %%eax, %0 \n"
:"=m" (ret)
:"d"(lock), "c"(val));
return ret;
}
В случае таких ошибок, скомпилируйте исходный файл в ассемблер - используя -S
Опция GCC и проверка линии, о которой сообщалось по газу.
Эта строка отсутствует
LOCK "movl %1,%%eax; xchg (%1),%2; movl %%eax %0"
пропущена точка с запятой, потому что это последний аргумент.