一部の関数はプロトタイプとして宣言されていますが、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これには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_firstvma_interval_tree_iter_nextその他の機能の定義が生成されます。

おすすめ記事