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の問題であることに気づきました。以下のパッチを適用したところ解決しました。