Linux カーネルのソース コードを読みたくて、LXR を見つけました。それは素晴らしいことですが、「kfree」などの機能をクリックすると、次のようになることがあります。
ld を使用して「リンク」する場合、競合があってはなりません。質問は次のとおりです。どちらが THE ONE かを判断する方法??? (gcc+makefile が解決策だと思いますが、やり方がわかりません...)
ありがとう!
1. カーネルに関する暗黙の知識があれば、kfree がスラブ、スラブ、またはスロブの一部であることに気付くでしょう。カーネル構成を確認すると、(dfefault による) スラブ アロケーターを使用していることに気付くでしょう。結論として、正解は mm/slub.c:3334 です。
2.
nm -a ./vmlinux | grep kfree
ffffffff81151bd0 T kfree
addr2line -e ./vmlinux 0xffffffff81151bd0
/home/alexhoppus/Desktop/linux/mm/slub.c:3335
これは別のLinux相互参照検索で、おそらくより詳細な情報があります
ご覧のとおり、一部はプリプロセッサ定義で、一部は関数です。どちらが正しいかを知るには、通常はカーネルの .config ファイルにある構成オプションをチェックアウトします。