有些函数用原型声明,但在 Linux 中找不到定义

有些函数用原型声明,但在 Linux 中找不到定义

我是Linux操作系统的新手,最近在挖掘uprobe的实现细节。我遇到了一个宏vma_interval_tree_foreach,我在其中搜索了它https://elixir.bootlin.com/。它给出了以下定义:

#define vma_interval_tree_foreach(vma, root, start, last)       \
    for (vma = vma_interval_tree_iter_first(root, start, last); \
         vma; vma = vma_interval_tree_iter_next(vma, start, last))

所以我试图弄清楚它vma_interval_tree_iter_first是什么,但不幸的是我找不到它的任何定义。快速浏览网络,我仍然没有找到答案。有谁知道如何找到它的定义或这种奇怪行为的一些解释?谢谢~

答案1

如果您向上滚动宣言vma_interval_tree_foreach,有一条评论给出了提示:

/* interval_tree.c */

有两个interval_tree.c文件;这里相关的是mm/interval_tree.c, 哪个定义vma_interval_tree

INTERVAL_TREE_DEFINE(struct vm_area_struct, shared.rb,
             unsigned long, shared.rb_subtree_last,
             vma_start_pgoff, vma_last_pgoff, /* empty */, vma_interval_tree)

这使用宏观INTERVAL_TREE_DEFINE它产生 和 的定义vma_interval_tree_iter_first以及vma_interval_tree_iter_next一些其他函数。

相关内容