В ядре Linux, как выбрать исходный код для чтения, когда вы сталкиваетесь с функцией, определенной в нескольких файлах, когда пытаетесь ее исследовать?
Меня интересует, какcopy-on-write реализован в ядре Linux x86_64, поэтому я читаю исходный код системного вызова fork (clone) (kernel / fork.c), потому что я думаю, что настройки защиты от записи для копирования при записи выполняются всистемный вызов.
Когда я нырнул в часть памяти исходного кода (mm / memory.c), я столкнулся с функциями, которые определены в нескольких исходных файлах.Например, «p4d_offset» в copy_p4d_range определяется в нескольких заголовках, как показано ниже, когда я искал его в vim с помощью ctags.
# pri kind tag file
1 F f p4d_offset arch/s390/include/asm/pgtable.h
static inline p4d_t *p4d_offset(pgd_t *pgd, unsigned long address)
2 F f p4d_offset arch/x86/include/asm/pgtable.h
static inline p4d_t *p4d_offset(pgd_t *pgd, unsigned long address)
3 F d p4d_offset include/asm-generic/5level-fixup.h
21
4 F f p4d_offset include/asm-generic/pgtable-nop4d.h
static inline p4d_t *p4d_offset(pgd_t *pgd, unsigned long address)
Конечно, я знаю, что могу удалить файл заголовка s390 (# 1 ниже), потому что яя работаю над x86_64, но я не знаю, какой еще заголовок прочитать.
Я пытался их прочитать, но не понял, какой из них действительно используется.