Renesas Synergy™

FAQ 1011379 : Cソース上からセクションの先頭アドレスや終端アドレスを参照する方法はありますか?

Q: 質問

Cソース上からセクションの先頭アドレスや終端アドレスを参照する方法はありますか?


A: 回答

ユーザー自身でセクションのアドレスを取得するインラインアセンブラ関数を作成し、この関数を呼び出すことによりアドレスを参照することが可能です。
リンクの処理において以下の予約シンボルを自動で生成します。
- 各出力セクションの先頭アドレスを値として持つシンボル
- 各出力セクションの終端を越える最初のアドレスを値として持つシンボル

セクションの先頭アドレスは、その出力セクション名の頭に“__s”を付けることによって構成される名前のシンボルが用いられます。一方、セクションの終端を越える最初のアドレスは、その出力セクション名の頭に“__e”を付けることによって構成される名前のシンボルが用いられます。これらのシンボルはアセンブラからしかアクセスできません。
このため、これらのシンボルを関数の戻り値が格納されるr10レジスタに転送するインラインアセンブラ関数を作成し、Cソース上から呼び出してください。

例1: .dataセクションの先頭アドレスを取得するインラインアセンブラ関数の定義例

 
----------------------------
   static unsigned long start_addr(void) {
       mov #__s.data, r10
   }
   ----------------------------

例2: .dataセクションの先頭アドレスを変数"addr"に格納する場合

----------------------------
   unsigned long addr;
   …
   addr = start_addr();
   ----------------------------

 

 

適用製品

RH850ファミリ用Cコンパイラパッケージ
他にご質問がございましたら、リクエストを送信してください