JAJA975B September   2011  – August 2025

 

  1.   1
  2. はじめに
    1. 1.1  C6000 向けの ABI
    2. 1.2  範囲
    3. 1.3  ABI バリアント
    4. 1.4  ツールチェーンと相互運用性
    5. 1.5  ライブラリ
    6. 1.6  オブジェクト ファイルの形式
    7. 1.7  セグメント
    8. 1.8  C6000 アーキテクチャの概要
    9. 1.9  参考資料
    10. 1.10 コード フラグメント表記
  3. データ表現
    1. 2.1 基本型
    2. 2.2 レジスタ内のデータ
    3. 2.3 メモリ内のデータ
    4. 2.4 複素数型
    5. 2.5 構造と共用体
    6. 2.6 配列
    7. 2.7 ビット フィールド
      1. 2.7.1 volatile ビット フィールド
    8. 2.8 列挙型
  4. 呼び出し規約
    1. 3.1 呼び出しと復帰
      1. 3.1.1 復帰アドレスの算出
      2. 3.1.2 呼び出し命令
      3. 3.1.3 復帰命令
      4. 3.1.4 パイプライン規約
      5. 3.1.5 弱関数
    2. 3.2 レジスタ規約
    3. 3.3 引数の受け渡し
    4. 3.4 戻り値
    5. 3.5 参照によって渡される構造と共用体と、返される構造と共用体
    6. 3.6 コンパイラ ヘルパー関数の規則
    7. 3.7 セクション間呼び出しのスクラッチ レジスタ
    8. 3.8 DP の設定
  5. データのアロケーションとアドレッシング
    1. 4.1 データ セクションとセグメント
    2. 4.2 静的データの割り当てとアドレッシング
      1. 4.2.1 静的データのアドレッシング方法
        1. 4.2.1.1 ニア DP 相対アドレッシング
        2. 4.2.1.2 ファー DP 相対
        3. 4.2.1.3 絶対アドレッシング
        4. 4.2.1.4 GOT 間接アドレッシング
        5. 4.2.1.5 PC 相対アドレッシング
      2. 4.2.2 静的データの配置規則
        1. 4.2.2.1 配置に関するアブストラクト規定
        2. 4.2.2.2 アドレッシングに関するアブストラクト規定
        3. 4.2.2.3 リンカの要件
      3. 4.2.3 静的データの初期化
    3. 4.3 自動変数
    4. 4.4 フレーム レイアウト
      1. 4.4.1 スタックの整列
      2. 4.4.2 レジスタ保存順序
        1. 4.4.2.1 ビッグ エンディアンにおけるペアのスワップ
        2. 4.4.2.2
      3. 4.4.3 DATA_MEM_BANK
      4. 4.4.4 C64x+ 固有のスタック レイアウト
        1. 4.4.4.1 _ _C6000_push_rts レイアウト
        2. 4.4.4.2 コンパクト フレーム レイアウト
    5. 4.5 ヒープ割り当て済みオブジェクト
  6. コードのアロケーションとアドレッシング
    1. 5.1 コード ラベルのアドレスの計算
      1. 5.1.1 コードの絶対アドレッシング
      2. 5.1.2 PC 相対アドレッシング
      3. 5.1.3 同じセクション内での PC 相対アドレッシング
      4. 5.1.4 短いオフセットの PC 相対アドレッシング (C64x)
      5. 5.1.5 コードに対する GOT ベースのアドレッシング
    2. 5.2 分岐
    3. 5.3 呼び出し
      1. 5.3.1 直接 PC 相対呼び出し
      2. 5.3.2 ファー呼び出しトランポリン
      3. 5.3.3 間接呼び出し
    4. 5.4 コンパクト命令をアドレッシングする
  7. 動的リンクにおけるアドレッシング モデル
    1. 6.1 用語と概念
    2. 6.2 動的リンク機構の概要
    3. 6.3 DSO と DLL
    4. 6.4 プリエンプション
    5. 6.5 PLT エントリ
      1. 6.5.1 インポートされた関数への直接呼び出し
      2. 6.5.2 絶対アドレスによる PLT エントリ
      3. 6.5.3 GOT による PLT エントリ
    6. 6.6 グローバル オフセット テーブル
      1. 6.6.1 ニア DP 相対アドレッシングを用いた GOT ベースの参照
      2. 6.6.2 ファー DP 相対アドレッシングを用いた GOT ベースの参照
    7. 6.7 DSBT モデル
      1. 6.7.1 エクスポートされた関数のエントリ/終了シーケンス
      2. 6.7.2 内部関数の DP 負荷を回避する
      3. 6.7.3 関数ポインタ
      4. 6.7.4 割り込み
      5. 6.7.5 非 DSBT コードとの互換性
    8. 6.8 動的リンクによるパフォーマンスへの影響
  8. スレッドローカル ストレージの割り当てとアドレッシング
    1. 7.1 マルチスレッドおよびスレッドローカル ストレージについて
    2. 7.2 用語と概念
    3. 7.3 ユーザー インターフェイス
    4. 7.4 ELF オブジェクト ファイルの表現
    5. 7.5 TLS アクセス モデル
      1. 7.5.1 C6x Linux TLS モデル
        1. 7.5.1.1 一般動的 TLS アクセス モデル
        2. 7.5.1.2 ローカル動的 TLS アクセス モデル
        3. 7.5.1.3 初期 Exec TLS アクセス モデル
          1. 7.5.1.3.1 スレッド ポインタ
          2. 7.5.1.3.2 初期 Exec TLS アドレッシング
        4. 7.5.1.4 ローカル Exec TLS アクセス モデル
      2. 7.5.2 静的実行可能ファイル TLS モデル
        1. 7.5.2.1 静的実行可能ファイル アドレッシング
        2. 7.5.2.2 静的実行可能ファイルにおける TLS ランタイム アーキテクチャ
        3. 7.5.2.3 静的実行可能ファイルにおける TLS のアロケーション
          1. 7.5.2.3.1 TLS 初期化イメージの割り当て
          2. 7.5.2.3.2 メイン スレッドの TLS 割り当て
          3. 7.5.2.3.3 スレッド ライブラリの TLS 領域のアロケーション
        4. 7.5.2.4 静的実行可能ファイルにおける TLS の初期化
          1. 7.5.2.4.1 メイン スレッドの TLS 初期化
          2. 7.5.2.4.2 TLS のスレッド ライブラリによる初期化
        5. 7.5.2.5 スレッド ポインタ
      3. 7.5.3 ベアメタル動的リンク TLS モデル
        1. 7.5.3.1 ベアメタル動的リンクにおけるデフォルト TLS アドレッシング
        2. 7.5.3.2 TLS ブロックの作成
    6. 7.6 スレッドローカル シンボルの解決と弱参照
      1. 7.6.1 一般およびローカルの動的 TLS の弱参照アドレッシング
      2. 7.6.2 初期およびローカル実行可能 TLS の弱参照アドレッシング
      3. 7.6.3 静的実行およびベア メタル動的 TLS モデルにおける弱参照
  9. ヘルパー関数 API
    1. 8.1 浮動小数点の動作
    2. 8.2 C ヘルパー関数 API
    3. 8.3 ヘルパー関数における特別なレジスタ規則
    4. 8.4 複素数型のヘルパー関数
    5. 8.5 C99 用の浮動小数点ヘルパー関数
  10. 標準 C ライブラリ API
    1. 9.1  予約済みシンボル
    2. 9.2  <assert.h> の実装
    3. 9.3  <complex.h> の実装
    4. 9.4  <ctype.h> の実装
    5. 9.5  <errno.h> の実装
    6. 9.6  <float.h> の実装
    7. 9.7  <inttypes.h> の実装
    8. 9.8  <iso646.h> の実装
    9. 9.9  <limits.h> の実装
    10. 9.10 <locale.h> の実装
    11. 9.11 <math.h> の実装
    12. 9.12 <setjmp.h> の実装
    13. 9.13 <signal.h> の実装
    14. 9.14 <stdarg.h> の実装
    15. 9.15 <stdbool.h> の実装
    16. 9.16 <stddef.h> の実装
    17. 9.17 <stdint.h> の実装
    18. 9.18 <stdio.h> の実装
    19. 9.19 <stdlib.h> の実装
    20. 9.20 <string.h> の実装
    21. 9.21 <tgmath.h> の実装
    22. 9.22 <time.h> の実装
    23. 9.23 <wchar.h> の実装
    24. 9.24 <wctype.h> の実装
  11. 10C++ ABI
    1. 10.1  制限 (GC++ABI 1.2)
    2. 10.2  エクスポート テンプレート (GC++ABI 1.4.2)
    3. 10.3  データ レイアウト (GC++ABI 第 2 章)
    4. 10.4  初期化ガード変数 (GC++ABI 2.8)
    5. 10.5  コンストラクタ戻り値 (GC++ABI 3.1.5)
    6. 10.6  ワンタイム構築 API (GC++ABI 3.3.2)
    7. 10.7  オブジェクト構成順序を制御する (GC++ ABI 3.3.4)
    8. 10.8  デマングラ API (GC++ABI 3.4)
    9. 10.9  静的データ (GC++ ABI 5.2.2)
    10. 10.10 仮想テーブルと key function (GC++ABI 5.2.3)
    11. 10.11 アンワインド テーブルの位置 (GC++ABI 5.3)
  12. 11例外処理
    1. 11.1  概要
    2. 11.2  PREL31 エンコーディング
    3. 11.3  例外インデックス テーブル (EXIDX)
      1. 11.3.1 アウトオブライン EXTAB エントリへのポインタ
      2. 11.3.2 EXIDX_CANTUNWIND
      3. 11.3.3 インライン化された EXTAB エントリ
    4. 11.4  例外処理命令テーブル (EXTAB)
      1. 11.4.1 EXTAB 一般モデル
      2. 11.4.2 EXTAB コンパクト モデル
      3. 11.4.3 パーソナリティ ルーチン
    5. 11.5  アンワインド命令
      1. 11.5.1 共通シーケンス
      2. 11.5.2 バイト エンコードされたアンワインド命令
      3. 11.5.3 24 ビットのアンワインド エンコーダ
    6. 11.6  ディスクリプタ
      1. 11.6.1 型識別子のエンコード
      2. 11.6.2 範囲
      3. 11.6.3 クリーンアップ記述子
      4. 11.6.4 キャッチ ディスクリプタ
      5. 11.6.5 関数例外仕様 (FESPEC) ディスクリプタ
    7. 11.7  特別なセクション
    8. 11.8  C++ 以外のコードとの相互作用
      1. 11.8.1 EXIDX エントリの自動生成
      2. 11.8.2 ハンドコードで記述されたアセンブリ関数
    9. 11.9  システム機能との相互作用
      1. 11.9.1 共有ライブラリ
      2. 11.9.2 オーバーレイ
      3. 11.9.3 割り込み
    10. 11.10 TI ツールチェーンにおけるアセンブリ言語オペレータ
  13. 12DWARF
    1. 12.1 DWARF レジスタの名前
    2. 12.2 呼び出しフレーム情報
    3. 12.3 ベンダー名
    4. 12.4 ベンダー拡張
  14. 13ELF オブジェクト ファイル (プロセッサ補足)
    1. 13.1 登録済みベンダ名
    2. 13.2 ELF ヘッダー
    3. 13.3 セクション
      1. 13.3.1 セクション インデックス
      2. 13.3.2 セクション タイプ
      3. 13.3.3 拡張セクション ヘッダー属性
      4. 13.3.4 サブセクション
      5. 13.3.5 特別なセクション
      6. 13.3.6 セクションの整列
    4. 13.4 シンボル テーブル
      1. 13.4.1 シンボル タイプ
      2. 13.4.2 共通ブロック シンボル
      3. 13.4.3 シンボル名
      4. 13.4.4 予約済みシンボル名
      5. 13.4.5 マッピング シンボル
    5. 13.5 再配置
      1. 13.5.1 再配置タイプ
      2. 13.5.2 再配置操作
      3. 13.5.3 未解決の弱参照の再配置
  15. 14ELF プログラムのロードと 動的 リンク (プロセッサ補足)
    1. 14.1 プログラム ヘッダー
      1. 14.1.1 ベース アドレス
      2. 14.1.2 セグメントの内容
      3. 14.1.3 バインドされたセグメントと読み取り専用セグメント
      4. 14.1.4 スレッドローカル ストレージ
    2. 14.2 プログラムのロード
    3. 14.3 動的リンク
      1. 14.3.1 プログラム インタプリタ
      2. 14.3.2 動的セクション
      3. 14.3.3 共有オブジェクトの依存関係
      4. 14.3.4 グローバル オフセット テーブル
      5. 14.3.5 プロシージャ リンケージ テーブル
      6. 14.3.6 プリエンプション
      7. 14.3.7 初期化と終了
    4. 14.4 ベアメタル動的リンク モデル
      1. 14.4.1 ファイル形式
      2. 14.4.2 ELF 識別
      3. 14.4.3 可視性とバインディング
      4. 14.4.4 データ アドレッシング
      5. 14.4.5 コードのアドレッシング
      6. 14.4.6 動的情報
  16. 15Linux ABI
    1. 15.1  ファイル形式
    2. 15.2  ELF 識別
    3. 15.3  プログラム ヘッダーとセグメント
    4. 15.4  データ アドレッシング
      1. 15.4.1 データ セグメント ベース テーブル (DSBT)
      2. 15.4.2 グローバル オフセット テーブル (GOT)
    5. 15.5  コード アドレッシング
    6. 15.6  遅延バインディング
    7. 15.7  可視性
    8. 15.8  プリエンプション
    9. 15.9  Import-as-Own プリエンプション
    10. 15.10 プログラムのロード
    11. 15.11 動的情報
    12. 15.12 初期化関数と終了関数
    13. 15.13 Linux モデルの概要
  17. 16シンボルのバージョン管理
    1. 16.1 ELF シンボル バージョニングの概要
    2. 16.2 バージョン セクションの識別
  18. 17ビルド属性
    1. 17.1 C6000 ABI ビルド属性サブセクション
    2. 17.2 ビルド属性タグ
  19. 18コピー テーブルと変数の初期化
    1. 18.1 コピー テーブルのフォーマット
    2. 18.2 圧縮データ フォーマット
      1. 18.2.1 RLE
      2. 18.2.2 LZSS フォーマット
    3. 18.3 変数の初期化
  20. 19拡張プログラム ヘッダー属性
    1. 19.1 エンコード
    2. 19.2 属性タグの定義
    3. 19.3 拡張プログラム ヘッダ属性セクションのフォーマット
  21. 20改訂履歴
Application Note

C6000 組込みアプリケーション バイナリ インターフェイス

最新の英語版をダウンロード