2017-01-24 10 views
4

У меня есть 16-разрядный MPU, который отличается от x86_16 размером size_t, ptrdiff_t и т. Д. Может ли кто-нибудь дать мне подробные и четкие инструкции о настройке машинной зависимости в Frama-C для моего MPU?Как настроить зависимость от машины в Frama-C?

+0

Не забудьте принять во внимание используемую инструментальную цепочку: некоторые константы machdep зависят от компилятора, что объясняет, почему существуют разные machdep для MSVC и GCC, как на машинах x86_64. Это особенно актуально при использовании стандартной библиотеки C Frama-C. – anol

ответ

6

В настоящее время нет способа сделать это непосредственно из командной строки: вам нужно написать небольшой сценарий OCaml, который по существу определит новый Cil_types.mach (запись, содержащую необходимую информацию о вашей архитектуре) и зарегистрируйте ее через File.new_machdep. Если у вас есть файл my_machdep.ml смотря как то:

let my_machdep = { 
    Cil_types.sizeof_short = 2; 
    sizeof_int = 2; 
    sizeof_long = 4; 
    (* ... See `cil_types.mli` for the complete list of fields to define *) 
} 

let() = File.new_machdep "my_machdep" my_machdep 

Вы тогда сможете запустить FRAMA-C таким образом, чтобы использовать новый machdep:

frama-c -load-script my_machdep.ml -machdep my_machdep [normal options] 

Если вы хотите, чтобы новый machdep постоянно доступен, вы можете сделать его плагином Frama-C. Для этого вам нужно Makefile следующего вида:

FRAMAC_SHARE: = $ (скорлупа Frama-с -print-шер-путь)

PLUGIN_NAME=Custom_machdep 
PLUGIN_CMO=my_machdep 

include $(FRAMAC_SHARE)/Makefile.dynamic 

my_machdep должно быть имя файла .ml. Обязательно выберите другое имя для PLUGIN_NAME. Затем создайте пустой файл Custom_machdep.mli (touch Custom_machdep.mli должен сделать трюк). Затем make && make install должен скомпилировать и установить плагин, чтобы он автоматически загружался Frama-C. Вы можете проверить это, запустив frama-c -machdep help, который должен выводить my_machdep среди списка известных машиппов.

UPDATE Если вы используете несколько заголовков из стандартной библиотеки FRAMA-C, вы также должны обновить $(frama-c -print-share-path)/libc/__fc_machdep.h для того, чтобы определить соответствующие макросы (связанные с limits.h и stdint.h в основном).

+0

Я изменил файл custom_machdep.ml и запустил Frama-C таким образом:
$ frama-c -load-script custom_machdep.ml -machdep custom [normal options]
Я получил следующее:
[kernel] Регистрация machdep 'mach' как 'custom'
[kernel] Parsing .opam/4.02.3 + mingw64c/share/frama-c/libc/__ fc_builtin_for_no rmalization.i (без предварительной обработки)
[kernel] warning: у machdep custom нет зарегистрированного макроса. Использование __FC_MACHDEP_CUSTOM для предварительной обработки.
Как я понял, все в порядке. –

+0

Да. Предупреждение о '__FC_MACHDEP_CUSTOM' связано с тем, что я сказал о заголовках в' libc': если вам когда-нибудь удастся их использовать, вам нужно будет добавить раздел '#else #ifdef __FC_MACHDEP_CUSTOM' в' __fc_machdep.h '. – Virgile

+0

Я хотел бы кое-что прояснить. В руководстве написано: «Frama-C предопределяет макрос __FC_MACHDEP_CUSTOM_NAME». Но вы предлагаете вручную изменить __fc_machdep.h. Это так? Кстати, у меня появилось сообщение об ошибке в файлах, которые включают . Ошибка была выбрана строкой 267 файла __fc_machdep.h. Поэтому мне кажется, что я должен это сделать. Но, возможно, есть ли другой способ решить эту проблему? –

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

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