”かふぇルネ“はルネサス製品に関してユーザ同士が自由に会話をするツールであり、回答者はルネサス社内外の方たちとなります。ルネサス製品やソリューションに関して正式な回答をご希望の場合は、ルネサス技術サポート問合せをご使用ください。

e2studio + CC-RL+コード生成ツールの組み合わせで出る E0562332 エラーについて

皆様お世話になります
タイトルの組み合わせで開発を進めていき、コンパイルすると以下のエラーが出ます。

E0562332:Relocation value is odd number : ".\generate\cstart.obj"-".text"-"0000005f"

このエラーはグローバル変数を作ったり作らなかったりすると消えたり消えなかったりします。
その他ソースの内容は影響していないように感じます。
これについて調べると下記URIに到達するのですが、いまいち具体的な解決に至っていません。

https://ja-support.renesas.com/knowledgeBase/18975356
https://renesasrulz.com/mcu-mpu/rl78/f/rl78-forum/19728/how-to-resolve-e0562332-relocation-value-is-odd-number-error/64932
https://www.renesas.com/us/en/document/tnn/note-using-c-compiler-package-rl78-family-1

cstart.asmの.textセクションが奇数エリアに指定されているとのことですが、これを解決する具体的な方法をご教示いただければ幸いです。

CC-RL Version 1.11.0
e2studio Version 2022-04 (22.4.0)
対象 RL78 G1C G13 etc...

以上、何卒よろしくお願いいたします。

  • 追記します

    いろいろと試した結果、ツールチェーンのバージョンを 1.10.0 にダウングレードすることでエラーが出なくなるようです。
    当面は 1.10.0 を使うことで対応したいと思うのですが、1.11.0 がリリースされてから時間も経過していて、この現象に対して放置されてる(バグ情報や改善策が出てない?)以上こちら側の何らかのミスだと思います。

    引き続きお心当たりのある方の情報をお待ちしております。

  • sun-tkさん、こんにちは。NoMaYと申します。

    しばらく前から私の頭の中で、ルネサスさんがCC-RX/RL(/RHも?)の(CC-RXの大昔のC++言語サポートではなく)モダンなC++言語対応を進めているのかなぁ、という考えが浮かび始めていたのですけれども、本件もそれに関係していそうです。恐らく、以下のような顛末ではないかと思うのです。また、対処方法は以下の通りです。なお、エラーが出る/出ないに関する条件として考えられることは、sun-tkさんのプロジェクトでサイズが奇数バイトのセクションが都合の悪い位置に配置されているのかも知れません。もしよろしければMAPファイルを見せて頂けないでしょうか?

    顛末(推測):

    ● ルネサスさん社内でCC-RLのC++言語対応が進行中である(完了していない?)が、なぜかe2 studioは先走ってC++対応のスタートアップルーチンを生成してしまった

    対処方法:

    ● スタートアップルーチン(cstart.asm)の以下の部分を$IF 0 ~ $ENDIFで括る

        ;--------------------------------------------------
        ; call global constructor
        ;--------------------------------------------------
    $IF 0 ; Maybe the following code for C++ is not supported yet. (by NoMaY)
        MOVW    BC,#LOWW(SIZEOF(.init))
        BR  $.L2_INIT
    .L1_INIT:
        DECW    BC
        DECW    BC
        MOVW    AX,BC
        MOV ES,#HIGHW(STARTOF(.init))
        ADDW    AX,ES:!LOWW(STARTOF(.init))
        MOV CS,#0x00
        PUSH    BC
        CALL    AX
        POP BC
    .L2_INIT:
        CLRW    AX
        CMPW    AX,BC
        BNZ $.L1_INIT
    $ENDIF

     
    以下、e2 studioの画面コピーとCS+のCC-RLのヘルプの画面コピーです。

    対処方法: スタートアップルーチン(cstart.asm)の以下の部分を$IF 0 ~ $ENDIFで括る


    そもそも.initセクションというのはヘルプに記載が無い


    PRNファイルとMAPファイルでエラーとなった箇所を確認(なお私が咄嗟に作成したものではエラーになりません)



    なおPRNファイルを生成させる場合は以下を設定します

     

  • sun-tkさん、こんにちは。NoMaYです。

    e2 studioのインストールフォルダを調べてみると、CC-RL V1.11対応として以下の画面コピーのようにスタートアップルーチンのテンプレートソースが変更されていました。




     

  •  様


    ご回答、並びに情報のご提示ありがとうございます。
    ご指摘いただいた通り、call global constructor の内容を IF で囲うことによって問題は回避できているようです。

    なお、エラー時のマップデータは以下の通りです。

    *** Error information ***

    E0562332:Relocation value is odd number : ".\generate\cstart.obj"-".text"-"0000005f"

    *** Mapping List ***

    SECTION START END SIZE ALIGN
    .vect
    00000000 0000007f 80 0
    .constf
    00000080 00000080 0 2
    .sdata
    00000080 00000080 0 2
    .data
    00000082 00000084 3 2
    .option_byte
    000000c0 000000c3 4 1
    .security_id
    000000c4 000000cd a 1
    .RLIB
    000000c4 000000c4 0 1
    .SLIB
    000000c4 000000c4 0 1
    .monitor1
    000000ce 000000d7 a 1
    .text
    000000d8 000001e3 10c 1
    .textf
    000001e4 00000478 295 1
    .const
    00002000 00002000 0 2
    .monitor2
    00007e00 00007fff 200 1
    .bss
    000fe900 000fe903 4 2
    .dataR
    000fe904 000fe906 3 2
    .init
    000fe907 000fe907 0 1
    .sbss
    000ffe20 000ffe20 0 2
    .sdataR
    000ffe20 000ffe20 0 2

    まだまだマイコンに対しての知識が足りてないなと痛感いたしました。
    また、お持ちの知識を惜しげなく展開していただき、重ね重ね感謝いたします。

  • sun-tkさん、こんにちは。NoMaYです。

    MAPファイルの情報をありがとうございました。こちらで同じような配置にしても再現しないので不思議に思ってゴソゴソやっていたのですが、やっと私の手元で再現しました。セクションの配置設定(リンカの-startオプション)を自分自身で手作業で指定していると、そうなるようです。プロジェクトのデフォルト設定の-auto_section_layoutを使っていると発生しませんでしたね。

    以下、画面コピーです。

    エラーが発生する時


    エラーが発生しない時

     

  • NoMaY 様

    ご検証感謝いたします。
    ご指摘の通り、「-auto_section_layout」のオプションが入るとエラーが出るようです。
    また、何故かこちらの環境では上記オプションがデフォルトでオンになっておりました。

    デフォルトでオンになった時の新規プロジェクト作成手順は以下の通りです。

    1.「ファイル」「新規」「Renesas C/C++ Project」「Renesas RL78」の順に選択
    2.「Renesas CC-RL C/C++ Executable Project」を選択し、次へ
    3.プロジェクト名を入力し、次へ
    4.添付スクリーンショットのように設定し、次へ
    5.次へ、終了と進み、プロジェクトのプロパティからLinkerのセクション項目を確認

    どこかにデフォルトのプロジェクトオプションを設定できる項目があるのかもしれません。
    以上、何らかの参考になれば幸いです。

  • 追記いたします

    勘違いしておりました、「-auto_section_layout」が「オフ」だとエラーが発生するというご指摘ですね。
    ですが、当方環境ですと「-auto_section_layout」を「オフ」にすることで問題を回避できました。

    いずれにしても、エラーが起きたときは上記オプションの変更で対応したいと思います。
    ありがとうございました。

  • sun-tkさん、こんにちは。NoMaYです。

    > 当方環境ですと「-auto_section_layout」を「オフ」にすることで問題を回避できました。 いずれにしても、エラーが起きたときは上記オプションの変更で対応したいと思います。

    そうでしたか、そちらでは状況が逆になりましたか、、、まだ何かあるのかな、、、それで、リプライしたのは、本件、私の考えとしては、対処方法は前の投稿に書いたように、くだんの部分を$IF 0 ~ $ENDIFで括る、というのが望ましい対処方法だと思うのです。何というか、そちらの方が問題の根源に近い方を対策したことになる、ような気がしました。

    すみません、ちょっとそれだけリプライしたかった、のです。

  • NoMaY 様

    承知いたしました、IFで囲うことで対応したいと思います。
    細かいところまでわかりやすく教えていただき大変助かりました。

    今回の件に対して情報として第三者の方のお役に立つかもしれないので、「-auto_section_layout」をオフにした時の「-start」の内容を下記に記載しておきます。

    .const,.text,.data,.sdata,.RLIB,.SLIB,.textf,.constf/02000,.dataR,.bss/FE900,.sdataR,.sbss/FFE20