皆様お世話になりますタイトルの組み合わせで開発を進めていき、コンパイルすると以下のエラーが出ます。
E0562332:Relocation value is odd number : ".\generate\cstart.obj"-".text"-"0000005f"
このエラーはグローバル変数を作ったり作らなかったりすると消えたり消えなかったりします。その他ソースの内容は影響していないように感じます。これについて調べると下記URIに到達するのですが、いまいち具体的な解決に至っていません。
https://ja-support.renesas.com/knowledgeBase/18975356https://renesasrulz.com/mcu-mpu/rl78/f/rl78-forum/19728/how-to-resolve-e0562332-relocation-value-is-odd-number-error/64932https://www.renesas.com/us/en/document/tnn/note-using-c-compiler-package-rl78-family-1
cstart.asmの.textセクションが奇数エリアに指定されているとのことですが、これを解決する具体的な方法をご教示いただければ幸いです。CC-RL Version 1.11.0e2studio 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対応として以下の画面コピーのようにスタートアップルーチンのテンプレートソースが変更されていました。
NoMaY 様ご回答、並びに情報のご提示ありがとうございます。ご指摘いただいた通り、call global constructor の内容を IF で囲うことによって問題は回避できているようです。
なお、エラー時のマップデータは以下の通りです。
*** Error information ***
*** 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で括る、というのが望ましい対処方法だと思うのです。何というか、そちらの方が問題の根源に近い方を対策したことになる、ような気がしました。すみません、ちょっとそれだけリプライしたかった、のです。
承知いたしました、IFで囲うことで対応したいと思います。細かいところまでわかりやすく教えていただき大変助かりました。
今回の件に対して情報として第三者の方のお役に立つかもしれないので、「-auto_section_layout」をオフにした時の「-start」の内容を下記に記載しておきます。
.const,.text,.data,.sdata,.RLIB,.SLIB,.textf,.constf/02000,.dataR,.bss/FE900,.sdataR,.sbss/FFE20