Почему моя программа с маркерами IACA компилируется, а не при первой компиляции в сборку?
Я пытаюсь выполнить профилирование кода с помощью Intel IACA. Я использовал этот вопрос переполнения стека, чтобы настроить производителей. У меня проблема в том, что если я использую gcc и компилирую прямо из исходного кода в бинарный файл, я в порядке. Программа компилируется и IACA работает нормально. Но если я сначала использую -S для компиляции в asm, а затем использую gcc, я получаю следующую ошибку.
main.c: Assembler messages:
main.c:10: Error: no such instruction: `movl $111,%ebx'
main.c:13: Error: no such instruction: `movl $222,%ebx'
Я признаю, что это инструкции, введенные IACA. Но я не знаю, почему они являются только проблемой, когда я сначала компилирую в asm.
Причина, по которой я хочу это сделать, заключается в том, что я хочу использовать IACA для кода на языке FORTRAN, поэтому я не могу использовать файл заголовка c. Я должен иметь возможность размещать маркеры в asm вручную, но потом не могу скомпилировать код.
Просто для ясности, для кода, который я разместил здесь, я использовал только заголовочный файл и получил эту ошибку. Я ничего не добавил в ассм. Просто скомпилирован в asm, а затем в двоичный файл.
main.c:
#include "iacaMarks.h"
int main()
{
int i = 0;
float count = 0.0;
for(i = 0; i < 123; i++){
IACA_START
count+=count;
}
IACA_END
}
Makefile:
asm:
gcc -S main.c -I/home/lavin2/iaca-lin64/include/ -masm=intel
final:
gcc main.s
all:
gcc main.c -I/home/lavin2/iaca-lin64/include/
make all
работает нормально, а затем IACA принимает двоичный файл и запускает профилирование. make asm
с последующим make final
выдаст вышеуказанную ошибку.
Я использую 64-битную Ubuntu 14.10 на Intel Xeon-2699 и gcc 4.9.1.