-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
shc_v6ad.txt
                                                                     2000/08/31

                                                   (株)セガ・エンタープライゼス
                                                     テクニカルサポートセンター

■SHC Ver6.0AD R4のリリースについて

□はじめに　-------------------------------------------------------------------

　SHC Ver6.0ADをリリースします。SHC Ver6.0ADはSHC Ver5.1の後継コンパイラである
SHC Ver6.0に最適化を強化した特別仕様のコンパイラです。

　なお今回のリリースは評価用で、正式リリースは10月頃になる予定です。

マニュアルについて：
　添付するマニュアルは、SHC Ver6.0標準品のものです。今回のリリースとの差分は、
Manual_Release_J.docにありますのでご覧下さい。


□SHC Ver6.0ADの特徴　---------------------------------------------------------

　(1)フルC++サポート
　・テンプレートを含むANSI C++のフル規格に対応しています。

　(2)ELF/DWARF2対応
　・従来コンパイラの出力しているフォーマットは独自形式でコンバータでELF形式に
　コンバートしていましたが直接ELF形式のオブジェクトを出力します。したがって、
　途中のコンバート作業が不要になりました。

　・デバッグ情報の形式として従来のDWARF1からDWARF2に変更されました。このため、
　デバッガもDWARF2に対応したCodeScape Build197以降をご使用下さるようお願いします。

　(3)最適化強化
　・SHC Ver5.1よりさらに最適化を強化しています。



□SHC Ver6.0ADツールチェイン　-------------------------------------------------

　SHC Ver6.0AD関連のツールです。ファイルフォーマット変更の理由等により、ほぼ
　すべてのツールがバージョンアップしています。

　(1)コンパイラ(shc.exe)   
　　SH SERIES C/C++ Compiler Ver. 6.0 AD(Release04)

　(2)アセンブラ(asmsh.exe)
　　SH SERIES ASSEMBLER Ver. 5.0A

　(3)リンカ(optlnk.exe)
　　Hitachi Optimizing Linkage Editor Ver7.0(May 30 2000)
　　・リンカは最適化リンカに統一されました。

　(4)ライブラリアン(optlnk.exe) 
　　Hitachi Optimizing Linkage Editor Ver7.0(May 30 2000)
　　・リンカとライブラリアンは１つのコマンドに統合されました。

　(5)デバッガ　　　　　
　　CodeScape Build197 (CrossProducts)
    ・Dwalf2に対応したデバッガが必要です。

　(6)ファイルコンバータ
　　a.ELF,バイナリコンバータ(elf2bin.exe)　
　　　ELF2BIN: ELF -> binary converter Ver. 1.05
　　　・従来のコマンドと変更はありません。

　  b.ELF/DWARFファイルコンバータ(helfcnv.exe)
      Hitachi ELF/DWARF File Converter Ver. 0.9
　　　・SHC Ver5.1環境で作成したオブジェクトファイル，ライブラリファイルを
　　　　SHC Ver6.0AD用にコンバートします。
　　　・【注意】helfcnvでコンバートしたものは、CodeWarriorやGNU用の
　　　　オブジェクトとしては使用できません。


□アプリケーション開発環境について　--------------------------------------------

　Dreamcast SDK2.0の環境がベースとなります。

　(1)ディレクトリ構成
　・従来のSHC Ver5.1に上書きする形にはなっておりません。
　標準で提供される環境設定バッチファイル(set_dc2.bat)やmake関連ファイル(make*.*)
　は以下の構成を前提としています。

　・SHC Ver6.0ADコンパイラが使用するファイルはそれぞれ以下のフォルダに置かれています。
  　コマンド関連　      dc_sdk2\utl\dev\hitachi_ad
　　ライブラリ関連　　　dc_sdk2\lib\hitachi
  　ヘッダファイル関連　dc_sdk2\utl\dev\hitachi_ad\include,及びdc_sdk2\include

    dc_sdk2                      インストール先ディレクトリ
        ├─driver
        ├─include                共通ヘッダファイル(セガライブラリ用及び標準ライブラリ用)
        ├─lib　　　　　　　　　　SHC Ver5.1用セガライブラリ
        │  ├─makefile
        │  ├─gnu
        │  ├─hitachi　　　　　　SHC Ver6.0AD用セガライブラリ [**追加**]
        │  └─mwerks             CodeWarrior用ライブラリ
        └─utl
            └─dev
                ├─hitachi　　　　SHC Ver5.1コンパイラ・アセンブラ・リンカ他
                │  └─include　　SHC Ver5.1専用ヘッダファイル
                ├─hitachi_ad　　 SHC Ver6.0ADコンパイラ・アセンブラ・リンカ他 [**追加**]
                │  └─include    SHC Ver6.0AD専用ヘッダファイル               [**追加**]
                ├─CodeWarrior
                ├─elf2bin
                ├─make
                ├─sbver
                :



　(2)環境設定バッチファイル及びメイク関連ファイルについて

　・環境設定バッチファイル(set_dc2.bat)では2.11.00以降でSHC Ver6.0AD用の環境に
　対応しています。オプション'-6' または '--shc-v6ad'をつけることで Ver6.0AD用の
　設定となります。(オプションがない場合は従来どおりVer5.1用の設定)

　・SHC Ver6.0ADを使用する場合のヘッダファイルの検索は、
　　　①dc_sdk2\utl\dev\hitachi_ad\include
　　　②dc_sdk2\include
    の順で行うようにして下さい。
　　(Ver6.0ADでフル仕様のC++をサポートため、これに関連するヘッダの変更がなされており、
　　 dc_sdk2\inludeにあるVer5.1のヘッダではコンパイルできない場合があるからです。)

    従って、SHC_INCの値は①,②の順でパスを設定します。

　・nmake.exe用のメイク関連ファイル(make****.***)もSHC Ver6.0に対応しています。
　これは、set_dc2.batで設定される環境変数USE_COMPILERの値を参照して処理を切り
　変えています。



□SHC Ver5.1からVer6.0ADの移行時の注意　----------------------------------------
　(1)コンパイラ
　
  ・環境変数　ADRIA_CMD_CONFIGFILE_C

　　コンパイラが参照する環境変数に 'ADRIA_CMD_CONFIGFILE_C'(*) が追加されました。
　　ここには、コンパイラと同じフォルダにあるwe2_c_shcross.cfg.verというファイルの
　　フルパスを指定します。
　( * "Adria"は本コンパイラの開発コード名)

　・グローバルコンストラクタの初期化

　　グローバルコンストラクタの初期化関数が、_CALL_INIT()としてライブラリとして
　　提供されるようになりました。(グローバルデストラクタは同様に、_CALL_END()関数)
　　セガライブラリ用の初期化関数を含むサンプルソースファイルsbinit2.cのVer2.04
    ではこの変更に対応済みです。このファイルに差し換えてご利用ください。

　・_abort()関数のリンク

　　上記と関連して_CALL_END()関数が、_abort()関数を参照しています。従ってユーザ
　　側でこの_abort()関数を実装する必要があります。_abort()関数が呼び出される契機は、
　　SHC SHCV6manual.pdf p.156を参照してください。sbinit2.cのVer2.04以降では
　　_abort()関数を追加しています。

　・SHCVer5.1で作成したライブラリ，オブジェクトの使用
　
　　Ver5.1のC言語で作成したライブラリやオブジェクトファイルは、ELF/DWARFコンバータ
   (helfcnv.exe)でコンバートすることによりVer6.0でもそのまま使用可能です。
　　ただし、Ver5.1で作成したC++言語のライブラリ・オブジェクトは、Ver6.0で再
　　コンパイルする必要があります。これは、Ver5.1とVer6.0では、C++言語の関数名の
　　エンコード規則が異なっているため、コンバートしてもリンクできないためです。

　・コンパイルオプション
　　　
　　基本的にSHC Ver5.1で指定したものと変更はありません。C++言語で、テンプレートを
　使用する場合は、-templateオプションにより、テンプレートのインスタンス(実体)の
　生成する方法を選択することができます。

　【注意】
　　なお、マニュアルには-templateオプションに指定できるものに'Static'とありますが、
　今回のリリースでは、このかわりに'local'を指定していただくようお願いいたします。



　(2)リンカ

　 ・コマンドオプションが変更になっていますのでご注意下さい。
　 以下はサンプルで提供するリンカサブコマンドの内容です。
 
   ---
　　nopre                                :プレリンカの起動を抑止します。  (注１)
　　change_message i=1322,1323           :メッセージ出力の抑止を行います。(注２)
　　debug                                :デバッグ情報を出力する
    output  sample.elf                   :出力するELFファイルを指定
    input   ???.obj                      :リンクするオブジェクトファイルの指定
    ...     ...                          : ...
    library ???.lib                      :参照するライブラリファイルの指定
    ...     ...                          : ...
    list sample.map                      :リストファイルを指定します
    form a                               :出力フォーマットを指定します。
                                         : (アブソリュート形式)
    entry SG_SEC                         :実行開始アドレス(シンボル)を指定します。
    start IP/8C008000,DSGLH/8C010000     :セクションの開始アドレスを指定します。
    show symbol                          :リストファイルの内容を指定します
　　　　　　　　　　　　　　　　　　　　 : (シンボル情報)
　　exit                                 :サブコマンドの終了を示します。
    ---

  ・elf(ELF形式出力),udf_check(未定義シンボルのエラー出力)のオプションは廃止
　　されました。これらはデフォルトでサポートされます。

　・注１　プレリンカでは、C++テンプレートインスタンスの自動生成機能および
　　　　　実行時型検査機能をサポートします。C++テンプレート機能および実行時型
　　　　　検査機能を使用していない場合は、noprelinkにより、リンク速度を
　　　　　速くすることができます。

　・注２　以下の２つのワーニングは、セガライブラリ環境下では必ず出力されますが、
　　　　　無視してもかまわないのでワーニングとしないようにしています。
　　　　
　　　　** L1323 (W) Section attribute mismatch : "CSG"
　　　　[理由] read/write属性の違い(絶対セクションと相対セクションの違いの場合もあり)
　　　　　　　を警告。C(const)セクションにおいて、コンパイラ出力は、constデータである
　　　　　　　ことを認識してるので、writeフラグは立てていませんが、アセンブラ出力は
　　　　　　　判断できないため、データセクションは常にwrite属性をonする。
　　　　　　　最終的にはorをとって設定するので、このエラーメッセージは、無視して問題はない。
　　　　　　　セガライブラリで、アセンブラ、コンパイラソースの両者にCSGセクションデータ
　　　　　　　存在するため、常にこの警告が出力される。

　　　　** L1322 (W) Section alignment mismatch : "PSG"
　　　　[理由]　オブジェクトに、プログラムセクションでNobits(実体がない，サイズ=0)
　　　　　　　　のものがあれば出力される。セガライブラリでの、strt1.objが該当する。


　(3)ライブラリアン

　 ・コマンドオプションが変更になっていますのでご注意下さい。
　 以下はサンプルで提供するライブラリ作成時のサブコマンドの内容です。

    ---
    form library=u                :ファイルフォーマット（ユーザライブラリ）
    output sample.lib             :出力ライブラリファイルを指定します。
    input   ...                   :入力するオブジェクトファイルを指定します。
　　...                           :
    library ...                   :入力するライブラリを指定します。
　　...                           :
    list                          :リストファイルの出力を指定
    show symbol,section           :リストファイルの内容を指定します
                                  : (シンボル，セクション情報)
    exit                          : サブコマンドの終了を示します。
    ---

  (4)セガライブラリ

   ・今回提供しているSHC Ver6.0AD用のセガライブラリは、SHC Ver5.1用のものを
　　 helfcnv.exeでコンバートしたものです。(セクションの定義を行っているstrt1.obj,
     strt2.objの２つのモジュールはVer6.0AD専用のものです)
   　従って、ライブラリの品質・性能に関してはコンパイル環境に依存せず同一です。

 　・SHC Ver6.0ADでコンパイルしたライブラリの提供も検討中です。しばらくお待ち
     下さい。


□今後の予定

　・ELFファイルのサイズの縮小化。（10/E頃）
　・コンパイル時間の短縮化。（10/E頃）
　　特に最適化なしの設定の場合は、コンパイル速度優先の設定とする予定です。

□関連ドキュメント
　・SHC SHCV6manual.pdf (日立)　SHC Ver6.0及び周辺ツールのマニュアル
　・Manual_Release_J.doc(日立)　SHC Ver6.0ユーザズマニュアル補足


-以上-

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
