e2studioでの変数表示の異常について

お世話になります

e2studioでgcc for RXの環境設定とテストを行っていたところ

実際の変数のアドレスと変数のビューウィンドウやホバー表示が示すアドレスとが食い違っていて、

変数の値もそのアドレスの内容を表示してしまう症状が発生してしまっています。

実際のコードは以下の通りで

volatile int i = 0;

while{ i++; }

上記コードの逆アセンブルの内容は以下の通りでr0には最初0x69cが格納されていました

main:
fffe8880: sub #4, r0
LM11:
fffe8882: mov.l [r0], r5
fffe8884: add #1, r5
fffe8886: mov.l r5, [r0]
fffe8888: bra.b 0xfffe8882 <LM11>

mapファイルのustackは以下の通り

ustack         0x0000000000000700        0x0

メモリやレジスタを確認すると変数iは0x69cから4引いたアドレス0x698の中身がインクリメントされているのですが

変数のビューやホバーは画像の通りアドレス0x700の値を表示してしまいます。

また、変数を増やしていくと実際のアドレスとは逆方向にアドレスが伸びて行ってしまいます。

この症状はRX simulatorを使用しているときは発生せず、E2liteでターゲットに接続しているときのみ発生します

どなたか解決方法をご教授願えますでしょうか?

Parents
  • ななしき さん、こんにちは。NoMaYと申します。

    とっさに気になったのは以下の2点です。そして、今現在のテスト段階であれば、プロジェクトのファイル一式に企業秘密に関わる部分も無いと思われますので、プロジェクトのファイル一式をzipファイルに固めてリプライに添付して頂けると、私としては、どうしてそうなるのか調べ易いです。お願い出来ませんでしょうか?

    ・ IスタックとUスタックの使い分け(自動的にGDBに認識されると思っていたのですけれども)
    ・ E2Lite向けとSimulator向けとでビルドしたelfファイルが同等か(ビルド日時等の差異はあると思います)

    あと、e2 studioのバージョンは幾つでしょうか?(他の情報はプロジェクトのファイル一式の中を見れば分かるのですけれども、これは見ても分からないですので。)

  • ななしき さん、こんにちは。NoMaYです。

    volatile int i = 0;というようにvolatileを付けておられるのですね。もうひとつ気になる点に気付きました。

    ・最適化無し(-O0)でビルドしているかどうか

Reply
  • ななしき さん、こんにちは。NoMaYです。

    volatile int i = 0;というようにvolatileを付けておられるのですね。もうひとつ気になる点に気付きました。

    ・最適化無し(-O0)でビルドしているかどうか

Children
  • NoMaY様リプライありがとうございます

    プロジェクトの設定内容と変更した要素は以下の通りです

    ターゲットデバイスはR5F5114ADFL、エミュレータはE2liteを使用
    スマートコンフィグレータでクロック源をHOCOに設定

    complier CPPをGNU C++17に変更
    -std=gnu++17

    コンパイラオプションの追加
    -fpermissive
    -fno-rtti
    -fno-exceptions
    -fno-non-call-exceptions
    -fno-use-cxa-atexit
    -fno-threadsafe-statics
    -fstack-usage

    リンカスクリプト
    セクション.r_bsp_istackと.r_bsp_ustackの set VMA explicitly のチェックを外す
    ※外さないとBLOCKがundefined的なエラーが出てビルドが通らないため

    シミュレータ時のみmcu_clocks.c内のHOCO安定待ちのループ(0 == SYSTEM.OSCOVFSR.BIT.HCOVF)をdefineマクロで飛ばす
    ※なのでelfファイルの内容は同じにならないと思われます

    最適化レベルはOptimize for debug (-Og)

    e2studioのバージョン
    Version: 2022-10 (22.10.0)
    Build Id: R20221013-1357
    e² studio IDE is based on Eclipse Platform 4.24 (2022-06)
    and CDT version 10.7.0.

    プロジェクト一式を添付いたします

    0576.test.zip

  • ななしき さん、こんにちは。NoMaYです。

    添付して頂いたプロジェクトをビルドしてみたのですが、HardwareDebugビルド(E2Lite向け)では出ないけれども、Debugビルド(RX Simulator向け)では以下のワーニングが出る、という差異が見られました。これは、そちらでも同じでしょうか?同じということならば、こちらでDebugビルドの設定を修正してみますけれども、そうでは無い、そちらでは以下のワーニングが出ていない、ということであれば、すみませんけれども、もう一度プロジェクトのファイル一式を念の為に添付して頂きたいのです。

    cc1.exe: warning: command line option '-fno-rtti' is valid for C++/ObjC++ but not for C
    cc1.exe: warning: command line option '-fno-use-cxa-atexit' is valid for C++/ObjC++ but not for C
    cc1.exe: warning: command line option '-fno-threadsafe-statics' is valid for C++/ObjC++ but not for C
    cc1.exe: warning: command line option '-fpermissive' is valid for C++/ObjC++ but not for C

     

  • NoMaY様

    今確認したところDebugビルドとReleaseビルドのC Compilerの項目にC++用のオプションが混入していました。

    繰り返し設定をいじってたのでどこかで間違えたのかもしれません…

    ただ、削除しても状況は変わりませんでした