Project

General

Profile

Actions

Bug #8030

closed

dismember: отсутствие спецификация для библиотечной функции get_cred

Added by Denis Efremov about 7 years ago. Updated almost 7 years ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Start date:
03/15/2017
Due date:
% Done:

0%

Estimated time:
Detected in build:
svn
Platform:
Published in build:

Description

В выводимом файле присутствует функция get_cred без спецификации. Спецификация на неё содержится в файле spec_lib.h и должна попадать в выводимый файл.
Коммит 3cb9c3d для репозитория astraver-spec.

dismember --config ../astraver-statistics/dismember/dismember.conf --cache 0 -k ../astraver-spec -m ../astraver-spec/parsec -f parsec_task_lbl_get -o parsec_task_lbl_get2.c 

Actions #1

Updated by Denis Efremov almost 7 years ago

Ошибка возникает потому, что зависимость на get_cred возникает в ядровом коде. Соответственно, декларация get_cred берётся из кода ядра. Если бы зависимость на get_cred возникала в коде модуля, тогда тогда бы спецификация взялась из него. Так как get_cred в коде модуля вообще не вызывается, то в граф модуля она не попадает.

Основная причина в том, что граф строится постепенно. На первой стадии строется граф только по зависимотям ядерной части и сохраняется в кэш первого уровня. Затем строится граф достраивается по зависимостям модуля и сохраняется в кэш второго уровня. Можно перемешать эти два процесса. Это решит проблему. В таком случае не будет разделения кешей на уровни. Оно было нужно для убыстрения работы программы, если изменения не вносятся в заголовочные файлы ядра. Впринципе, программа и так работает довольно быстро и разделение кешей на уровни не имеет особого смысла.

Actions #2

Updated by Denis Efremov almost 7 years ago

Проблему можно решить иначе. У Dismember есть плагин SmartLib:
Plugin::SmartLib - плагин для избирательного включения спецификаций на декларации функций из файла библиотеки в выводимые данные
Плагин считывает файл file. Парсит декларации функций в нём и спецификации к ним. Если в выводимых данных присутствуют вызовы одной из декларируемых в файле file функций, то эта декларация включается в выводимые данные вместе со своей спецификацией.

В конфигурацию можно добавить строки:
plugin=smartlib
plugin-smartlib-file=/home/work/workspace/work/astraver-spec/parsec/spec_lib.h

Тогда спецификация будет включаться.

У SmartLib есть один недостаток: в своей работе он не может учитывать зависимости по спецификациям.

Actions #3

Updated by Denis Efremov almost 7 years ago

Поправлено за счёт разрешения таких вхождений.

+ module_declaration -> kernel_macro;
+ module_declaration -> kernel_global;
+ module_declaration -> kernel_function;

Упрощает кэш первого уровня. Теперь в нем лежит только индекс объектов из ядерного кода. Это каим-то образом ломает опцию --cache=1, так как некоторые объекты пропадают. Сам баг поправлен, опция --cache=1 пока не работает.

Actions #4

Updated by Denis Efremov almost 7 years ago

  • Status changed from New to Closed

Ошибка с кешем исправлена.

Actions

Also available in: Atom PDF