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...

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

Parents
  • 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ファイルを生成させる場合は以下を設定します

     

Reply
  • 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ファイルを生成させる場合は以下を設定します

     

Children
No Data