Systemtapはプローブリストに表示されますが、プローブポイントを確認できません。

Systemtapはプローブリストに表示されますが、プローブポイントを確認できません。

systemtapを使用してnetfilter synproxyモジュールをデバッグしようとしています。

これが私が追加したいプローブポイントです。

# stap -l 'module("ipt_SYNPROXY").statement("*")' | grep send_client_synack
module("ipt_SYNPROXY").statement("synproxy_send_client_synack@net/ipv4/netfilter/ipt_SYNPROXY.c:72")

これがstapスクリプトの様子です

probe module("ipt_SYNPROXY").statement("synproxy_send_client_synack@net/ipv4/netfilter/ipt_SYNPROXY.c:72"){

//some code

}

実行しようとすると、次のエラーが発生します。

semantic error: no line records for net/ipv4/netfilter/ipt_SYNPROXY.c:72 [man error::dwarf]

semantic error: resolution failed in DWARF builder

semantic error: while resolving probe point: identifier 'module' at netfilter.stp:915:7
        source: probe module("ipt_SYNPROXY").statement("synproxy_send_client_synack@net/ipv4/netfilter/ipt_SYNPROXY.c:72"){
                      ^

semantic error: no match

他のプローブポイントをいくつか試しましたが、すべてのプローブポイントがこのエラーを引き起こすわけではないことに気づきました。たとえば、次のプローブは正常に動作します。

probe module("ipt_SYNPROXY").statement("ipv4_synproxy_hook@net/ipv4/netfilter/ipt_SYNPROXY.c:314"){
    //some code
}

私が直接コンパイルしたカーネルバージョンは4.14.128です。コンパイル時に何か抜けたものがあるようです。

答え1

カーネルをコンパイルするとき、これがgccの問題であることに気づきました。以下のパッチを適用したところ解決しました。

https://lkml.org/lkml/2015/4/23/605

関連情報