私は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
これには2つの関連ファイルがあります。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
その他の機能の定義が生成されます。