CC-RL

ルネサス統合開発環境「CubeSuite+」は、2014年10月1日リリースのV3.00.00より、製品名を「CS+」に変更いたしました。

V1.06.00 → V1.07.00 への変更点 (2018/7/20)

1. C99標準ライブラリ関数
    C99用標準ライブラリ関数について新規対応、またはC99規格の機能を追加しました。

2. ヘキサ・ファイル、バイナリ・ファイル出力機能の拡充
    ヘキサ・ファイル、バイナリ・ファイルに対する以下の機能を拡充しました。
    - -form=binaryオプション指定時に-crcオプションを使用可能にしました。
    - ヘキサ・ファイルの出力データのアドレスが内部ROMまたはデータフラッシュの範囲外にあるかチェックするオプション
      -CHECK_OUTPUT_ROM_AREAを追加しました。
    - インテル拡張ヘキサ・ファイルまたはモトローラ・Sタイプ・ファイルを出力する際、
      出力ファイル上の先頭ロード・アドレスを変更可能にしました。

3. ベクタテーブル・セクションをベクタテーブル・アドレス別に生成する機能の追加
    ベクタテーブル・セクションをベクタテーブル・アドレス別に分割して生成する-SPLIT_VECTオプションを追加しました。

4. #pragma addressの拡充
    __saddr宣言した変数に対して#pragma addressでの指定を可能にしました。

5. #pragma sectionの拡充
    CC-RL V1.06.00以前では、文字列リテラル、switch文の分岐テーブル、集成体型自動変数の初期値のセクション名を
    デフォルトセクション名から変更することが出来ませんでしたが、CC-RL V1.07.00では#pragma sectionでセクション名を
    変更できるようにしました。

6. 不正な間接関数呼び出し検出機能の拡充【professional】
    CC-RL V1.06.00でサポートした不正なアドレスへの間接関数呼び出しを検出する機能を拡充し、
    -cfi_ignore_moduleオプションにライブラリファイル(*.lib)を指定できるようにしました。

7. 最適化強化
    long型のゼロ等価比較コードに対して生成コードの改善等、最適化を強化しました。

8. 注意事項の改修
    以下の注意事項を改修しました。
    - 初期化子の指定がある配列型、構造体型または共用体型のstatic変数宣言に関する注意事項(CCRL#019)

9. その他改善
    ビルド時に内部エラーが発生する場合がありましたが、これを改善しました。

V1.05.00 → V1.06.00 への変更点 (2018/1/22)

1. C99規格
    言語仕様としてC99規格をサポートしました。

2. MISRA-C:2012ルールによるソース・チェック機能の拡充 【professional】
    ソース・チェック可能なMISRA-C:2012ルール数を111から119に拡充しました。

3. 不正な間接関数呼び出し検出機能 【professional】
    不正なアドレスへの間接関数呼び出しを検出する機能をサポートしました。

4. ハードウェア割り込みハンドラのベクタテーブルのアドレス複数指定への対応
    #pragma interruptで同一関数に対し、複数のベクタテーブルのアドレスを指定できるようにしました。

5. ポインタ間接参照を1バイト単位でアクセスする機能
    CA78K0Rからのコンパイラ移行支援として、
    volatile指定がない型へのポインタ間接参照を1バイト単位でアクセスする -unaligned_pointer_for_ca78k0rオプションを追加しました。

6. 最適化強化
    生成コードの性能を改善しました。

7. メモリ使用量の上限拡張
    CC-RLが使用できるホストPC上のメモリ量を拡張しました。
    - 32bit/64bit OS とも2G byte 【V1.05.00 以前】
    - 32bit OS の場合は3G byte、64bit OS の場合は4G byte 【V1.06.00 以降】

8. メッセージ制御機能
    警告メッセージをエラーメッセージに変更するためのコンパイル・オプション-change_messageを追加しました。

9. ヘキサ・ファイルのレコード長固定機能
    インテル拡張ヘキサ・ファイル(.hex)とモトローラ・S タイプ・ファイル(.mot)の出力アドレスを、指定したアライメントで整合し、
    固定レコード長で出力するリンク・オプション-fix_record_length_and_alignを追加しました。

10. リンク時のメッセージ追加
    V1.05.00以前では、整列条件の異なる同名セクションをリンクした場合に、警告メッセージW0561322を出力していましたが、
    V1.06.00では、整列条件の異なる同名セクションであり、かつその整列条件の一方が他方の倍数ではないセクションをリンクした場合には、
    警告メッセージW0561331を代わりに出力するようにしました。

11. 注意事項の改修
    以下の注意事項を改修しました。
    - switch文中のラベルへのgoto文を使用している場合の注意事項 (CCRL#016)
    - 関数が複数の引数を持ち、仮引数同士の代入または比較がある場合の注意事項 (CCRL#017)
    - ループ制御変数の終了条件が定数のループ文に関する注意事項 (CCRL#018)

12. その他改善
    (1) 内部エラーの改善
         ビルド時に内部エラーが発生する問題を改善しました。

V1.04.00 → V1.05.00 への変更点 (2017/7/20)

1. 最適化強化
    生成コードの性能を改善しました。

2. MISRA-C:2012ルールによるソース・チェック機能の拡充 【professional】
    ソース・チェック可能なMISRA-C:2012ルール数を103から111に拡充しました。

3. ライセンスの認証方式の改善
    ライセンスの認証方式を改善し、ビルド時間を短縮しました。

4. 配列初期値データの出力方法変更
    配列型の初期値データをアセンブリ・ソース上で出力する際、1行にまとめて出力するように変更しました。
    この変更によりビルド時の解析処理が削減され、ビルド時間を短縮することができます。

5. モトローラ・Sタイプ・ファイルのエンドレコード指定
    モトローラ・Sタイプ・ファイルのエンドレコードを指定するリンカ・オプション -end_recordを追加しました。
    V1.05.00未満ではエントリ・ポイント・アドレスに合わせてエンドレコードを出力していましたが、
    指定したエンドレコードでモトローラ・Sタイプ・ファイルを生成できます。

6. リンク・マップ・ファイルの仕様変更
    リンク・マップ・ファイルの “Mapping List” に再配置属性のATTRIBUTE欄を追加しました。
    -show=relocation_attributeを指定した場合に、セクションに対応している再配置属性を表示します。

7. リンク・エラーのメッセージ変更
    リンク・エラー “F0563102” のメッセージに、ファイル名を出力するようにしました。

8. ローカル・ラベルおよびnop命令挿入オプションの追加
    CS+、e2 studioの消費電流測定ソリューション機能を使用するオプション-insert_nop_with_labelを追加しました。
    本オプションは、CS+、e2 studio上で使用します。

9. -vfinfoオプションの機能拡張
    -vfinfoオプションに出力属性attributeを追加しました。
    callt関数だけでなくnear関数も指定できるようになったほか、ROMオプションやfar領域に指定したセクションを
    関数情報出力対象から外せるようになりました。

10. -binaryオプションの機能拡張
    -binaryオプションのセクション属性attributeに指定可能な項目を拡張しました。

11. #pragma near/farの追加
    関数のnear/far属性を#pragma指令で指定できるようになりました。
    複数の関数に対して同時にnear/far属性を指定できます。

12. #pragma pack/unpackの追加
    構造体のパッキングの有無を#pragma指令で指定できるようになりました。
    Cソースの一部に対してパッキングの有無を指定できます。

13. #pragma addressの機能拡張
    const変数に対して、#pragma addressで配置アドレスを指定できるようになりました。

14. 移行支援機能指定時の#pragma重複記述の許可
    移行支援機能指定時に、#pragma nopなど一部の#pragma指令の重複記述に対してエラーとしないようにしました。

15. 無償評価版使用時メッセージの番号追加
    無償評価版を使用してビルドする際に出力していたメッセージに対し、
    無償評価版の残日数のメッセージに対しては番号W0561016を、期限切れのメッセージに対しては番号W0561017を付与しました。
    これにより、無償評価版使用時にエラーとして処理する等、-change_messageによる制御ができるようになりました。

16. 注意事項の改修
    以下の注意事項を改修しました。
    - 仕様外のアセンブリ記述時の注意事項 (CCRL#001)
    - 制御式に比較演算があるswitch文の注意事項 (CCRL#015)

17. その他改善
    (1) float四則演算ランタイムライブラリの改善
         floatの加算・減算・乗算・除算について、ランタイムライブラリ関数の性能を改善しました。
    (2) コンパイル・エラーの改善
         -merge_filesオプション指定時にコンパイル・エラー ”F0530800” が発生する問題を改善しました。
    (3) 内部エラーの改善
         ビルド時に内部エラーが発生する問題を改善しました。

V1.03.00 → V1.04.00 への変更点 (2017/1/20)

1. 最適化強化
    生成コードの性能を改善しました。

2. MISRA-C:2012ルールによるソース・チェック機能の拡充 【professional】
    ソース・チェック可能なMISRA-C:2012ルール数を82から103に拡充しました。

3. .VECTOR 疑似命令の機能拡張
    割り込みベクタテーブルと割り込みハンドラを別ファイルに記述できるようにしました。

4. #pragma inline_asm 指令の拡張
    #pragma inline_asm 指令で指定した関数内に.public 疑似命令を記述できるようにしました。

5. リンク・オプション-subcommand の仕様変更
    サブコマンド・ファイル内で-subcommand オプションを指定できるようにしました。

6. リンク・オプション-vfinfo/-list の仕様変更
    -vfinfo オプションは変数/関数情報を生成します。
    従来は、-vfinfo オプション指定時の1 回目のビルドにおいて、セクションのアドレスが使用可能なアドレス範囲を超えた場合は
    エラーとしてビルドを終了し、変数/関数情報ファイルも生成していませんでした。
    本バージョンより同様の場合でも可能な限りエラーとせずビルド処理を継続させ、変数/関数情報ファイルを出力するようにしました。
    それにより変数や関数のアクセスを最適化できるようになります。
    また、-vfinfo オプションと同時に-list オプションを指定した場合には、リンク・マップ・ファイルにシンボル情報を
    出力するようにしました。

7. ライセンスの認証方式
    ライセンスの認証方式を変更しました。
    V1.04.00 以降を使用する場合は、ライセンス・マネージャV2.00.00 以降をインストールしてください。

8. 注意事項の改修
    以下3件の注意事項を改修しました。
    - 2 回以上のループを含むプログラムに関する注意事項 (CCRL#012)
    - 配列要素、構造体メンバまたは共用体メンバへの値の更新が反映されない注意事項 (CCRL#013)
    - 値が1 ずつ減少する演算式を含むループの注意事項 (CCRL#014)

9. その他改善
    (1) ビット操作命令の出力の制限
         V1.04.00未満では、最適化レベルやソース・プログラムの記述内容によってコンパイラが自動的に判別してビット操作命令を
         出力していましたが、V1.04.00ではユーザーが制御できるようにしました。
    (2) 内部エラーの改善
         ビルド時に内部エラーが発生する問題を改善しました。

V1.02.00 → V1.03.00 への変更点 (2016/7/21)

1. 最適化強化
    主に以下のような最適化を実装することにより、生成コードの性能を改善しました。
    (1) 異なるローカルスコープ内 auto 配列の領域を統合する最適化(スタックサイズの削減)
         生存期間が重ならないブロック({})に属するauto 配列のスタック領域を統合するようにしました。
    (2) 定数伝播最適化の強化
         ループ内で定数だとわかる計算を省略しました。
    (3) 帰納変数最適化の改善
         冗長なループ帰納変数の更新コードを生成しないようにしました。
    (4) 不要コード削除最適化の改善
         使われることのないコードの削除処理を強化しました。

2. MISRA-C:2012ルールによるソース・チェック機能の拡充【professional版のみ】
    MISRA-C:2012 ルールによりソース・チェックを行う-misra2012 オプションの引数に、以下の番号を指定できるようにしました。
      2.6 2.7
      9.2 9.3
      12.1 12.3 12.4
      14.4
      15.1 15.2 15.3 15.4 15.5 15.6 15.7
      16.1 16.2 16.3 16.4 16.5 16.6 16.7
      17.1 17.7
      18.4 18.5
      19.2
      20.1 20.2 20.3 20.4 20.5 20.6 20.7 20.8 20.9 20.10 20.11 20.12 20.13 20.14

3. 動的メモリ管理関数のセキュリティ強化【professional版のみ】
    ヒープ・メモリ領域の解放時に、不正操作を検出する機能を追加しました。
    本機能は専用の標準ライブラリをリンクすることにより使用可能です。
    professional 版のライセンスが登録されていない場合はE0562310 エラーになります。
    専用の標準ライブラリは以下のように動作します。
    (1) calloc, malloc, realloc 関数内で、ヒープ・メモリ領域内にユーザー用に割り当てる領域の他に、
         不正操作を検出するための領域としてその外側の前後各2 バイトを余分に割り当てます。
    (2) free, realloc 関数内で、(a)~(c)のいずれかに該当していないかを判定します。
        (a) 引数が(1)で割り当てたポインタでない
        (b) 引数が既に開放済みのポインタである
        (c) (1)で余分に割り当てた不正操作を検出するための領域が書き換わっている
    (3) (2)の判定に該当した場合は不正な操作があったものとして__heap_chk_fail 関数を呼び出します。
         __heap_chk_fail 関数はユーザーが定義する必要があります。
         ヒープ・メモリ領域の不正操作検出時に実行する処理を記述してください。
         本機能を使用することにより、容易にセキュリティ対策(メモリ二重解放の問題やバッファ・オーバーフローの防止等)が可能となります。

4. オプション-Opipelineの追加
    パイプライン最適化オプション-Opipeline を追加しました。

5 .ビット操作組み込み関数の追加
    ビットを操作する組み込み関数__set1, __clr1, __not1 を追加しました。

6. 注意事項の改修
    以下の 5 件の注意事項を解除しました。
    - 条件アセンブル制御命令後に外部ラベルを定義した場合の注意事項 (CCRL#006)
    - パッキングした構造体、共用体のメンバを初期化子に指定した場合の注意事項 (CCRL#007)
    - 命令オペレーション一覧にない命令オペランドを記述した場合の注意事項 (CCRL#008)
    - 割り込みハンドラ内でレジスタを上書きするコードを出力する注意事項 (CCRL#009)
    - 最適化の適用範囲に関する注意事項 (CCRL#010)

7. その他変更・改善
    主に以下のような変更・改善を行いました。
    (a) デバッグ情報の改善
        デバッグ時に C ソース、アセンブリソースが正しく表示できない場合がありましたが、これを改善しました。
    (b) 内部エラーの改善
        ビルド時に内部エラーが発生する場合がありましたが、これを改善しました。
    

V1.01.00 → V1.02.00 への変更点 (2015/10/20)

1. 最適化強化
    生成コードの性能を改善しました。

2. オプションの追加【コンパイラ】
    以下のオプションを追加しました。
    (1) -g_line
        最適化時にソース・デバッグ用の情報を強化します。
    (2) -stack_protector【Professional版のみ】
        8バイトを超える構造体、共用体または配列をローカル変数に持つ関数に対してスタック破壊を検出するコードを生成します。
    (3) -stack_protector_all【Professional版のみ】
        すべての関数に対してスタック破壊を検出するコードを生成します。
    (4) -misra2012【Professional版のみ】
        MISRA-C:2012ルールによるソース・チェックを行います。
    (5) -Osame_code
        コンパイル単位の同一セクション内に存在する複数の同一命令列を統合し、関数化します。

3. #pragma指令の追加【コンパイラ】
    以下の#pragma指令を追加しました。
    (1) #pragma stack_protector【Professional版のみ】
        指定した関数に対して、スタック破壊を検出するコードを生成します。
    (2) #pragma no_stack_protector【Professional版のみ】
        指定した関数に対して、スタック破壊を検出するコードを生成しません。

4. オプションの追加【リンカ】
    以下のオプションを追加しました。
    (1) -SYmbol_forbid
        未参照シンボル削除の抑止シンボルを指定します。

5. -Optimizeオプションの拡張【リンカ】
    -Optimizeオプションのパラメータにsymbol_delete、speed、safeを追加しました。
    (1) symbol_delete
        一度も参照のない変数/関数を削除します。コンパイル時に必ずentryオプションを指定してください。
    (2) speed
        オブジェクトスピード低下を招く危険性のある最適化以外を実行します。
    (3) safe
        変数や関数の属性によって制限される可能性のある最適化以外を実行します。

6. -Binaryオプションの制限【リンカ】
    -Binaryオプションに、制限を追加しました。
    [制限]
      本オプションで指定したバイナリ・ファイルは、0 ~ 0x0FFFF番地にしか配置できません。
      0x10000 番地以降にバイナリ・ファイルを配置する場合は、下記のようなアセンブラソースを作成してください。
        .SECTION BIN_SEC, TEXTF
        $BINCLUDE(tp.bin)

7. CRC演算機能の拡張【リンカ】
    -CRcオプションの演算方法に、従来の16-CCITT-MSB-LITTLE-4、16-CCITT-LSB、SENT-MSBに加え、
    CCITT、16-CCITT-MSB、16-CCITT-MSB-LITTLE-2、16、32-ETHERNETを指定できるようになりました。
    (1) CCITT
        CRC-16-CCITTでMSB First、初期値0xFFFF、XOR反転による演算結果を得ることができます。
    (2) 16-CCITT-MSB
        CRC-16-CCITTでMSB Firstによる演算結果を得ることができます。
    (3) 16-CCITT-MSB-LITTLE-2
        入力をLITTLEエンディアン2バイト単位としCRC-16-CCITTでMSB Firstによる演算結果を得ることができます。
    (4) 16
        CRC-16でLSB Firstによる演算結果を得ることができます。
    (5) 32-ETHERNET
        CRC-32-ETHERNETによる演算結果を得ることができます。
        演算結果は初期値0xFFFFFFFFで、XOR反転およびビットリバースされています。

8. 関数の追加【ライブラリ】
    以下の標準ライブラリ関数を追加しました。
    (1) calloc
        ゼロ初期化したメモリを割り当てます。
    (2) free
        メモリを解放します。
    (3) malloc
        メモリを割り当てます。
    (4) realloc
        メモリを再割り当てします

9. スタートアップの変更【スタートアップ】
    ミラー空間がないデバイス用のスタートアップから、const属性の記述を削除しました。

10. 注意事項の解除
    以下の6件の注意事項を解除しました。
    (1) K&R形式の関数定義(浮動小数点型の仮引数)
    (2) K&R形式の関数定義(nearポインタの仮引数)
    (3) スタックに退避した引数の値を上書きするコードを出力する注意事項
    (4) memcmp関数、_COM_memcmp_ff関数、strcmp関数、_COM_strcmp_ff関数の戻り値が不正となる注意事項
    (5) strtoul関数、_COM_strtoul_ff関数の戻り値が不正となる注意事項
    (6) 予約語__sectop、__secend、演算子startof、sizeofでデフォルトではないセクション名を使用した場合の注意事項

11. 注意事項の追加
    以下の1件の注意事項を追加しました。
    (1) bsearch、qsortのK&R形式の比較関数定義
    [参照]
        CC-RLコンパイラ ユーザーズマニュアル(ドキュメント番号:R20UT3123JJ0102)
            11.2.6 bsearch、qsort のK&R 形式の比較関数定義

12. 注意事項の変更
    以下の1件の注意事項を変更しました。
    (1) 分離演算子
    [参照]
        CC-RLコンパイラ ユーザーズマニュアル(ドキュメント番号:R20UT3123JJ0102)
            11.3.5 分離演算子