У меня есть последняя версия Intel Pin версии 3.0 76887.Intel Pin 3.0 не распознает инструкции MPX?
У меня есть MPX с поддержкой игрушечного примера:
#include <stdio.h>
int g[10];
int main(int argc, char **argv) {
int x = g[11];
printf("%d\n", x);
return 0;
}
При компиляции с GCC + MPX, я вижу инструкцию MPX в разборках с помощью objdump
и пример правильно пишет мне ограничивающее нарушение:
Saw a #BR! status 0 at 0x401798
Теперь я хотел бы, чтобы подсчитать общее количество конкретных инструкций MPX с помощью Intel Pin, например, BNDLDX
и BNDMK
.
Моя первая попытка была использована погруженный инструмент source/tools/SimpleExamples/trace.cpp
. Этот инструмент показал мне NOPs
в местах инструкций MPX.
В моей второй попытки, я написал свой собственный инструмент со следующим фрагментом:
xed_iclass_enum_t iclass = (xed_iclass_enum_t)INS_Opcode(ins);
if (iclass == XED_ICLASS_BNDMK)
INS_InsertPredicatedCall(ins, IPOINT_BEFORE, (AFUNPTR)countBndmk, IARG_END);
Это не работает, countBndmk никогда не называется. Я дважды проверил свой код с другими инструкциями, и они работали. Настолько ясно, что проблема Pin (или XED?) Не распознается инструкциями MPX.
Сидя в документации, я заметил интересную ручку
KNOB<BOOL> knob_mpx_mode(KNOB_MODE_WRITEONCE,"supported:xed","xed_mpx_mode","0","Enable Intel(R) MPX instruction decoding")
Эта ручка, кажется, включить декодирование MPX и является 0
по умолчанию, и я не знаю, как включить его в командной строке или в моем инструменте. Я не нашел других ссылок на эту проблему в коде или в Интернете.
Я знаю, что могу использовать Intel SDE для удаления отладочной трассы, включая инструкции MPX. Интересно, есть ли способ включить MPX в Intel Pin. Или единственное решение - самостоятельно декодировать коды операций?
Спасибо за это исследование, к сожалению, добавление этих параметров в командную строку не помогает (Pin всегда жалуется на неизвестные параметры). –