我们最近将代码从gcc4.2.4
升级到gcc4.3.3
。汇编编译错误(gcc4.2.4 = win,gcc4.3.3 = fail)
void testAndSet( volatile int* s, int* val)
{
__asm__ __volatile__ ("btsl $0, %0\n "
"jc bitSet\n "
"movl $0, %1\n "
"jmp returnVector\n"
"bitSet:\n "
"movl $1, %1\n"
"returnVector: " : "=m"(*s), "=m"(*val));
}
我们的代码现在失败,出现以下错误,
lock.cxx: Assembler messages:
lock.cxx:59: Error: symbol `bitSet' is already defined
lock.cxx:61: Error: symbol `returnVector' is already defined
lock.cxx:59: Error: symbol `bitSet' is already defined
lock.cxx:61: Error: symbol `returnVector' is already defined
这些符号,未发现其他地方。 (重命名它们会导致与新名称相同的错误)。
这是怎么回事?为什么我会错误两次?
很好。就是这样。有趣的是,使用gcc选项-02失败,但使用-O – user48956 2009-05-18 17:40:12