Игнорировать ассемблерный код в анализе значений и резервный код

Я попытаюсь использовать анализ стоимости проекта в C, но этот проект содержит некоторые .c файл, где мы можем найти код ассемблера. Когда я пытаюсь запустить frama-C для этих файлов, я получаю сообщение об ошибке в коде сборки.

Код ассемблера разработан для Motorola 68040, я видел в документации, что мне нужно использовать опцию -machdep изменить платформу анализа для модуля, но эта платформа не определена, поэтому мне нужно обратиться в службу поддержки или я могу настроить модуль так, чтобы он игнорировал код ассемблера?

И второй вопрос по модулю SpareCode. Можем ли мы настроить модуль так, чтобы он просто видел мертвый код и сохранял запасной код (в случае процедуры)?

Код файла otherfile.c (без комментариев):

#pragma asm

     XDEF _CONVERSION_INTEL

MESSAGE     SET 20
NB_CARAC    SET 26

     SECTION mc3_sys_code

_CONVERSION_INTEL
    movem.l d1-d3/a0,-(sp)
    move.l  MESSAGE(sp),a0
    moveq   #0,d1 
    move.w  NB_CARAC(sp),d1
    moveq   #0,d3

 PERMUTE:
    move.w  (a0),d2
    rol.w   #8,d2
    move.w  d2,(a0)
    addq.l  #2,a0
    addq.l  #2,d3
    cmp.l   d3,d1
    bgt PERMUTE test
    movem.l (sp)+,d1-d3/a0
    rts

#pragma endasm

1 ответ

Решение

Frama-C не обрабатывает ассемблерный код. Может разбирать некоторые встроенные сборки (gcc"s asm(...) инструкция), но не целый файл. Вы должны попытаться выяснить, что PERMUTE Процедура выполняет и обеспечивает замену, либо с простым определением C, либо в виде прототипа + спецификации ACSL (первое предпочтительнее, если вы собираетесь использовать Value Analysis).

-machdep не позволит Frama-C интерпретировать любой ассемблерный код. Этот параметр в основном фиксирует размер стандартных целочисленных типов (например, 32-битный для int) и их представление (big или little endian). Если вам нужна поддержка конкретной архитектуры, которая не включена в поддерживаемую в настоящее время (как показано на frama-c -machdep help), вам действительно следует обратиться в службу поддержки Frama-C, чтобы узнать, при каких условиях это можно добавить.

В графическом пользовательском интерфейсе Value Analysis покажет вам код, который недоступен с точки входа анализа, как выделенный и на красном фоне. Также возможно написать скрипт / плагин, который бы программно извлекал эту информацию, но в дистрибутиве нет ничего для этого.

Другие вопросы по тегам