Встроенные ошибки сборки: мусор `-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"

пропущена точка с запятой, потому что это последний аргумент.

Другие вопросы по тегам