我是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
一些其他函数。