gcc 8.2: ошибка: неверный 'asm': неверный адресный режим - PullRequest
0 голосов
/ 26 августа 2018

Следующее утверждение взято из iPXE. Он прекрасно компилируется с gcc 7.3, но не работает с gcc 8.2 на архитектуре aarch64. Здесь я получаю ошибку

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?
...