(Я ничего не мог найти в 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.
.