いつもお世話になっております。 Tanamiと申します。
今回初めてe2Studio+llvm 17.0.1.202406を使って、RL78マイコンのファームウェアを作ろうとしています。e2Liteを使ってデバッグしようとすると、なぜかソースコードデバッグができません。(下記のような状況で、逆アセンブラ表示を行ってのデバッグはできます)
ビルドにllvmを使った場合、ビルドオプション、最適化オプションがどうなっているかの確認および変更はどうやって行えば良いのでしょうか?ご存じの方教えていただけたら助かります。
-- 実行時の状況:逆アセンブラでしかデバッグができない ---
単純に「ビルドオプションにデバッグオプションがついてないのだ」・・と思ってあちこち設定を確認しても、肝心の設定が見当たりません。
> 単純に「ビルドオプションにデバッグオプションがついてないのだ」・・と思ってあちこち設定を確認しても、肝心の設定が見当たりません。ビルダにmakefile を自動で吐かせる設定を切っていると、オプション設定画面は使えなくなります。(Managed Build projectではなくなるから)ビルドログが残っていたら確認できるかもしれません。FAQ - ビルド時のログの保存場所https://ja-support.renesas.com/knowledgeBase/18459729デバッグ情報を出力するオプションが有効になっていても、プロジェクトまでのファイルパスに空白文字や全角文字やデバッガで意味のある記号として解釈される文字コードが混じっていた場合はデバッグ情報の参照ができなくてそういう表示になることもあるようです。
デバッガでソースファイルが見えない現象は、プロジェクト名を作成後に変更した時にも起こります。(プロジェクト名で想定されたファイルパスと現実のファイルパスが一致しなくなるため。必ず発生する訳ではない。)この場合はプロジェクト名を戻してやるか、別名のプロジェクトとしてインポートし直せば解決するはずです。(追記)デバッガのコンソールを(右上のアイコンで)GDB traceに切り替えてみるとPowerON_Resetうんぬんの辺りに何かそれっぽいエラーが出ているかも?> "0xe2 の PowerON_Reset()" に対して使用できるソースがありませんソースファイル名が表示されていないのが少し気になります。コンパイル、アセンブル時にデバッグ情報を入れず、リンカのデバッグ情報だけが残った状態だと丁度そんな感じになるので、何かが抜けている可能性もあります。示して戴いたmakefileの記述はCソースについてのものですが、アセンブラはまた別にあるはず。
ほや様 ありがとうございます。早速確認したのですが、ビルドログの内容はビルドをかけたファイル名くらいしか情報がありませんでした。でも「Makefileを自動で生成する設定になっているから!」と思って設定を確認したら、自動的にMakefileを生成するにチェックは入ってませんでした。何がどうなっているのやら・・ですね
--- ビルドログ(抜粋) ---
Building file: ../src/smc_gen/r_bsp/mcu/all/start.S../src/smc_gen/r_bsp/mcu/rl78_g23/mcu_clocks.c../src/smc_gen/r_bsp/mcu/all/r_bsp_common.cBuilding file: ../src/smc_gen/r_bsp/board/generic_rl78_g23/hdwinit.c../src/smc_gen/r_bsp/mcu/all/start.SBuilding file: ../src/smc_gen/r_bsp/board/generic_rl78_g23/r_bsp_init.cBuilding file: ../src/smc_gen/general/r_cg_inthandler.c :../src/CcidBoot.cBuilding target: CcidBoot.elfllvm-objcopy "CcidBoot.elf" -O srec "CcidBoot.srec"llvm-size --format=berkeley "CcidBoot.elf" text data bss dec hex filename 7861 136 888 8885 22b5 CcidBoot.elf
16:45:33 Build Finished. 0 errors, 0 warnings. (took 875ms)
Makefileの内容を確認してみました。# Each subdirectory must supply rules for building sources it contributessrc/%.o: ../src/%.c @echo 'Building file: $<' $(file > [email protected],-O0 -ffunction-sections -fdata-sections -fdiagnostics-parseable-fixits -g -mcpu=s3 -std=gnu99 -I**** .... -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" "$<" -c -o "$@") @echo $< && clang --target=rl78 @"[email protected]"(-I*** は実際のファイル名で全角スペース等は入ってません)-O0 -g は入ってましたので、デバッグ設定にはなっているのかと。それではなぜソースレベルデバッグができないのか・・ますます謎です。 -----------------------------------------------------今やっていることは、RL78/G23 UART通信によるブートスワップを使用したセルフプログラミングをベースに、諸般の事情でコンパイラをllvmに置き換え、Start.sを llvm用に置き換えようとしています。マッピングあたりが間違っているからソースコードデバッグができないとか・・???
> まさかこんなことが原因だったとは同意。デフォルトだとDWARF 5になっていますね。気付かないのも無理はないと思います。
ほや様 いろいろとありがとうございます。新しくフォルダを作って、今までのものをインポートし、新しくプロジェクトを作ってみました。ファイルパス不一致などは発生してないと思います。GDB Trace内容も確認してみましたが、特にエラーらしきものもなく・・この一連の作業で「Makefileを自動生成する」チェックを外したら、以降そのチェックをつけてもビルド詳細設定画面が出ないことに気づき、改めてMakefileを自動生成するようにし、ビルドオプションの詳細を確認してみました。ここでデバッグ用設定になっていることを再確認し、ビルド~デバッグ実行・・・相変わらず逆アセンブラでのデバッグしかできずで、とほほの状態です。
とここまで書いた後、C/C++ビルド=> 設定 => ツール設定 => Debugで デバッグレベルをON、デバッグフォーマットをデフォルトではなく他のもの(今回はdwarf-3)にしたら、ソースコードデバッグができるようになりました!まさかこんなことが原因だったとは・・お騒がせしてしまい申し訳ありませんでした。ほや様、本当にありがとうございました。
今更ですが、
> 今回初めてe2Studio+llvm 17.0.1.202406を使って17.0.1.202403のrelease_notes.pdf には、
One notable change compared to the previous releases of the toolchain is the new default for the DWARF format: version 5. Older debuggers might not be compatible with this version, in which case users may change the version to DWARF 4 with the -gdwarf-4 compile option.
とあり、旧いデバッガで動かなかったらDWARF 4に変えてね、と書いてありました。(3でも良いと思いますが)画面の様子を見る限り、e² studioが最新ではなさそうなのでこれかな、と。