Что означает поле strmap в структуре load_info? - PullRequest
1 голос
/ 09 июня 2011

Я изучаю механизм загрузки модулей внутри ядра Linux и застрял в значении поля strmap внутри структуры load_info.

Структура определена в kernel/module.c, а поле заполнено в kernel/module.c. Я знаю, что это растровое изображение, но я не могу понять значение отдельных битов.

1 Ответ

1 голос
/ 09 июня 2011

(Я ничего не мог найти в LWN. Это частичный анализ кода. Обратите внимание, что strmap существовала как отдельная переменная до того, как struct load_info была введена.)

strtab содержит набор строк с нулевым символом в конце, соединенных вместе.Например, он может содержать это, где . обозначает нулевой символ:

foo.bar.quux.corge.
0123456789012345678

In layout_symtab, strmap используется для определения, какие куски strtab соответствуют основные символы .Цикл устанавливает j-й бит strtab всякий раз, когда j-й символ является частью имени основного символа.Например, с учетом приведенной выше таблицы, если bar и corge являются основными символами, то биты 4–7 и 13–18 устанавливаются в 1.

In add_kallsyms, второй цикл вычисляет общую длину имен основных символов, а третий цикл копирует основные символы в новую таблицу mod->symtab, копируя только байты strtab для которого установлен соответствующий бит в strmap.В приведенном выше примере новая таблица будет содержать bar.corge..

...