gcc 8.2:错误:无效的“ asm”:无效的地址模式

时间:2018-08-26 09:28:33

标签: gcc arm64

以下语句摘自iPXE。它在gcc 7.3上可以正常编译,但在aarch64体系结构上在gcc 8.2上无法编译。在这里我得到一个错误

error: invalid 'asm': invalid address mode

宏参数einfo是5个参数的列表。

#define __einfo_error( einfo ) ( {          
    __asm__ ( ".section \".einfo\", \"\", " PROGBITS_OPS "\n\t"     \
              ".align 8\n\t"                                        \
              "\n1:\n\t"                                            \
              ".long ( 4f - 1b )\n\t"                               \
              ".long %a0\n\t"                                       \
              ".long ( 2f - 1b )\n\t"                               \
              ".long ( 3f - 1b )\n\t"                               \
              ".long %a1\n\t"                                       \
              "\n2:\t.asciz \"" __einfo_desc ( einfo ) "\"\n\t"     \
              "\n3:\t.asciz \"" __FILE__ "\"\n\t"                   \
              ".align 8\n\t"                                        \
              "\n4:\n\t"                                            \
              ".previous\n\t" : :                                   \
              "i" ( __einfo_errno ( einfo ) ),                      \
              "i" ( __LINE__ ) );                                   \
  • 从哪里来

    .long %a0
    

    发挥价值吗?

  • “ i”语句在做什么?
  • 哪里有此语法的参考? -gcc 8.2更改了吗?

0 个答案:

没有答案