readelfの問題が解決した
Raspi上の動作確認で、関数リストを作成できないという不具合が発覚しました。
実は、WindowsとRaspiでreadelfの出力に違いがあることは分かっていて、解析内容は同じなのですが、Raspiの方はコメントが日本語になっています。
<Windows上のxc32-readelfの出力>
ーーーーーーーーーーーーーーーーーーーーーーーーーー
2017-08-22T14:31:25.412
Contents of the .debug_abbrev section:
Number TAG (0x0)
1 DW_TAG_compile_unit [has children]
DW_AT_stmt_list DW_FORM_data4
DW_AT_producer DW_FORM_string
<Raspi上のreadelfの出力>
ーーーーーーーーーーーーーーーーーーーーーーーーーー
2017-08-22T05:43:36.536
.debug_abbrev セクションの内容:
Number TAG (0x0)
1 DW_TAG_compile_unit [子あり]
DW_AT_stmt_list DW_FORM_data4
DW_AT_producer DW_FORM_string
ロケールをUKにするとコメントが英語になり、関数リストも期待通りに作成されました。メカニズムは分かっていませんが日本語のコメントが関数名の解析を妨げているようです。
対策として、Raspiの場合は”env LANG=en_us.UTF-8 ”を頭につけてreadelfを呼び出すことにしました。
こんな感じです
ーーーーーーーーーーーーーーーーーーーー
if( !isLinux() ){
analyze_elf = readelf;
}
else{
analyze_elf = "env LANG=en_US.UTF-8 "+readelf;
}
OSの種類をこんな風に取得し、
String OS_NAME = System.getProperty("os.name").toLowerCase();
判定はこんな感じです
boolean isLinux() {
return OS_NAME.startsWith("linux");
}
この修正によりRaspiでも関数を指定できるようになりました。
(パチパチパチ~)