2016-10-14 6 views
1

У меня есть последняя версия 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. Или единственное решение - самостоятельно декодировать коды операций?

ответ

0

Возможно, вам немного поздно ответить, но похоже, что вам нужно только передать PIN-код.

Немного фона:

В руководстве Intel есть эта строка (ничего общего с MPX, но это дает ключ):

Add the knob support_jit_api to the Pin command line as Pin tool option: 
    <Pin executable> <pin options> -t <Pin tool> -support_jit_api <Other Pin tool options> -- <Test application> <Test application options> 

Это происходит there's an existing KNOB для этого варианта:

KNOB<BOOL> LEVEL_PINCLIENT::KnobJitApi ( KNOB_MODE_WRITEONCE  , 
"pintool:sym" , 
"support_jit_api" , 
"0"  , 
"Enables the Jitted Functions Support" 
) 

в качестве регулятора MPX определяется как:

KNOB<BOOL> knob_mpx_mode(KNOB_MODE_WRITEONCE,"supported:xed","xed_mpx_mode","0","Enable Intel(R) MPX instruction decoding") 

Я думаю, вы просто должны пройти возможность PIN:

<Pin executable> <pin options> -t <Pin tool> -xed_mpx_mode <Other Pin tool options> -- <Test application> <Test application options> 

кажется, что эти Бугры жестко закодированы на PIN/PinTools.

+0

Спасибо за это исследование, к сожалению, добавление этих параметров в командную строку не помогает (Pin всегда жалуется на неизвестные параметры). –

 Смежные вопросы

  • Нет связанных вопросов^_^