일부 함수는 프로토타입으로 선언되지만 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_firstvma_interval_tree_iter_next기타 기능에 대한 정의를 생성합니다.

관련 정보