Ignore:
Timestamp:
Jul 23, 2017, 2:29:40 PM (7 years ago)
Author:
coas-nagasima
Message:

SVNプロパティを設定

File:
1 edited

Legend:

Unmodified
Added
Removed
  • rubycfg_asp/trunk/asp_dcre/arch/rx630_gcc/makeoffset.c

    • Property svn:mime-type changed from text/x-csrc to text/x-csrc; charset=UTF-8
    r313 r315  
    88 *  Copyright (C) 2008-2010 by Witz Corporation, JAPAN
    99 *
    10  *  上記著作権è€
    11 ã¯ï¼Œä»¥ä¸‹ã®(1)~(4)の条件を満たす場合に限り,本ソフトウェ
    12  *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
    13  *  変・再é
    14 å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
    15  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    16  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
    17  *      スコード中に含まれていること.
    18  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    19  *      用できる形で再é
    20 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    21 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    22  *      è€
    23 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    24  *      の無保証規定を掲載すること.
    25  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    26  *      用できない形で再é
    27 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
    28  *      と.
    29  *    (a) 再é
    30 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    31 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    32  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
    33  *    (b) 再é
    34 å¸ƒã®å½¢æ
    35 ‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
    36  *        報告すること.
    37  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    38  *      害からも,上記著作権è€
    39 ãŠã‚ˆã³TOPPERSプロジェクトをå
    40 è²¬ã™ã‚‹ã“と.
    41  *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
    42  *      由に基づく請求からも,上記著作権è€
    43 ãŠã‚ˆã³TOPPERSプロジェクトを
    44  *      å
    45 è²¬ã™ã‚‹ã“と.
    46  *
    47  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    48 ãŠ
    49  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
    50  *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
    51  *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
    52  *  の責任を負わない.
     10 *  上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
     11 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     12 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     13 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     14 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     15 *      スコード中に含まれていること.
     16 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     17 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     18 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     19 *      の無保証規定を掲載すること.
     20 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     21 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     22 *      と.
     23 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     24 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     25 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     26 *        報告すること.
     27 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     28 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     29 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     30 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     31 *      免責すること.
     32 *
     33 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     34 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     35 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     36 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     37 *  の責任を負わない.
    5338 *
    5439 *  @(#) $Id$
     
    5742
    5843/*
    59  *      offset.inc (もしくは offset.h) について
    60  *
    61  *        offset.inc は構造体の特定の要素が構造体のå
    62 ˆé ­ã‹ã‚‰ä½•ãƒã‚¤ãƒˆç›®ã«
    63  *      存在するかということや, 特定のビットフィールドがå
    64 ˆé ­ã‹ã‚‰
    65  *      何バイトå
    66 ˆã®ä½•ãƒ“ット目に存在するか, というæƒ
    67 å ±ã‚’
    68  *      アセンブリ言語ファイルに与えるために存在している.
    69  *
    70  *        offset.inc ファイルの中身は, 単なるシンボル定義ファイルである.
    71  *      シンボルといっても定義するシンボルの名称にはパターンがあり,
    72  *      大きく分けて次の3種類に分類できる.
    73  *
    74  *      <構造体名>_<要素名>      (例) TCB_sp, TCB_pc, TCB_enatex など
    75  *      <構造体名>_<要素名>_bit  (例) TCB_enatex_bit など
    76  *      <構造体名>_<要素名>_mask (例) TCB_enatex_mask など
    77  *
    78  *      (例)
     44 *      offset.inc (もしくは offset.h) について
     45 *
     46 *        offset.inc は構造体の特定の要素が構造体の先頭から何バイト目に
     47 *      存在するかということや, 特定のビットフィールドが先頭から
     48 *      何バイト先の何ビット目に存在するか, という情報を
     49 *      アセンブリ言語ファイルに与えるために存在している.
     50 *
     51 *        offset.inc ファイルの中身は, 単なるシンボル定義ファイルである.
     52 *      シンボルといっても定義するシンボルの名称にはパターンがあり,
     53 *      大きく分けて次の3種類に分類できる.
     54 *
     55 *      <構造体名>_<要素名>    (例) TCB_sp, TCB_pc, TCB_enatex など
     56 *      <構造体名>_<要素名>_bit        (例) TCB_enatex_bit など
     57 *      <構造体名>_<要素名>_mask (例) TCB_enatex_mask など
     58 *
     59 *      (例)
    7960 *              TCB_texptn              .equ    14
    8061 *              TCB_sp                  .equ    20
     
    8465 *              TCB_enatex_mask         .equ    0040H
    8566 *
    86  *        一番はじめは特定の要素が構造体のå
    87 ˆé ­ã‹ã‚‰ä½•ãƒã‚¤ãƒˆå
    88 ˆã«ã‚るか
    89  *      ということを示す数値につけるラベルの名称.
    90  *        二番目は特定のビットフィールド中のビットが, 下位から数えて
    91  *      何ビット目にあるかということを示す数値につけるラベルの名称.
    92  *      0から始まる数値で表現する. 最も下位のビットは第0ビットである.
    93  *        三番目はå
    94 ˆã»ã©ã® <構造体名>_<要素名>_bit とも関連するが,
    95  *      特定のビットフィールド中のビットのマスク値の名称.
    96  *      _bit と *_mask の値の間には次の関係がある.
     67 *        一番はじめは特定の要素が構造体の先頭から何バイト先にあるか
     68 *      ということを示す数値につけるラベルの名称.
     69 *        二番目は特定のビットフィールド中のビットが, 下位から数えて
     70 *      何ビット目にあるかということを示す数値につけるラベルの名称.
     71 *      0から始まる数値で表現する. 最も下位のビットは第0ビットである.
     72 *        三番目は先ほどの <構造体名>_<要素名>_bit とも関連するが,
     73 *      特定のビットフィールド中のビットのマスク値の名称.
     74 *      _bit と *_mask の値の間には次の関係がある.
    9775 *              (*_mask) == (1 << *_bit)
    98  * *    (例) TCB_enatex_bit が 6 の時, TCB_enatex_mask は 40H
    99  *
    100  *        ちなみにM32C依存部の実è£
    101 ã§ã¯, 特定ビットのチェックなどに
    102  *      ビット命令アドレッシングを使用しているので *_mask というラベルは
    103  *      使用していない.
     76 * *    (例) TCB_enatex_bit が 6 の時, TCB_enatex_mask は 40H
     77 *
     78 *        ちなみにM32C依存部の実装では, 特定ビットのチェックなどに
     79 *      ビット命令アドレッシングを使用しているので *_mask というラベルは
     80 *      使用していない.
    10481 */
    10582
    10683/*
    107  *      offset.inc の作り方(M32Cターゲット依存部向け)
    108  *
    109  *        GNU Cコンパイラを用いているターゲット依存部については,
    110  *      カーネルのトップディレクトリの下にある util というディレクトリの
    111  *      下に genoffset という perl スクリプトが用意されているので,
    112  *      特に手動で offset.h を作成するå¿
    113 è¦ã¯ãªã„.
    114  *        genoffset は GNU 開発環境を想定して作成されているので,
    115  *      生成されるアセンブリ言語疑似命令や生成規則の異なる他の
    116  *      Cコンパイラにはそのまま適用できない可能性がある.
    117  *        そこで, ここではWindows環境 向けの genoffset を用意せず,
    118  *      作り方をここに記し, 手作業で offset.inc を作成してもらうことと
    119  *      する. 以下にその方法を示す. なお, この方法はM32Cの開発環境や
    120  *      命令セットに依存しているため, 他のターゲットを使用している場合は
    121  *      そのまま適用できない.
    122  *
    123  *  1.  makeoffset.c というファイルからCコンパイラを使用して
    124  *      アセンブリ言語ファイル makeoffset.a30 を生成する.
    125  *      コンパイルオプションはカーネルコードに与えるものと同じ
    126  *      ものを与える.
    127  *      ルネサス製ツール TM を使用している場合は, プロジェクトエディタの
    128  *      生成手順ビューから makeoffset.a30 を選び, 右クリックメニューの
    129  *      「部分ビルド」を選択することで生成できる.
    130  *      もしくはコマンドプロンプトでメイクファイルと同じディレクトリに
    131  *      移動し, "make -f メイクファイル名 makeoffset.a30" を
    132  *      実行しても同様の結果が得られる. (メイクファイルはTMが使用して
    133  *      いるものと同じファイルを指定可能)
    134  *
    135  *  2.  å
    136 ˆã»ã©ã® 1. の作業で得られた, makeoffset.a30 ファイルから
    137  *      "! BEGIN XXXX"  ではじまり "! END" で終わっている部分を探す.
    138  *
    139  *      4箇所あり, それぞれ少しずつ異なるので順に説明する.
    140  *      (以下, 説明中ではアセンブリ言語ファイルのコメント行は省く)
    141  *
    142  * (1)  構造体のå
    143 ˆé ­ã‹ã‚‰ãƒ¡ãƒ³ãƒã¸ã®ã‚ªãƒ•ã‚»ãƒƒãƒˆ
     84 *      offset.inc の作り方(M32Cターゲット依存部向け)
     85 *
     86 *        GNU Cコンパイラを用いているターゲット依存部については,
     87 *      カーネルのトップディレクトリの下にある util というディレクトリの
     88 *      下に genoffset という perl スクリプトが用意されているので,
     89 *      特に手動で offset.h を作成する必要はない.
     90 *        genoffset は GNU 開発環境を想定して作成されているので,
     91 *      生成されるアセンブリ言語疑似命令や生成規則の異なる他の
     92 *      Cコンパイラにはそのまま適用できない可能性がある.
     93 *        そこで, ここではWindows環境 向けの genoffset を用意せず,
     94 *      作り方をここに記し, 手作業で offset.inc を作成してもらうことと
     95 *      する. 以下にその方法を示す. なお, この方法はM32Cの開発環境や
     96 *      命令セットに依存しているため, 他のターゲットを使用している場合は
     97 *      そのまま適用できない.
     98 *
     99 *  1.  makeoffset.c というファイルからCコンパイラを使用して
     100 *      アセンブリ言語ファイル makeoffset.a30 を生成する.
     101 *      コンパイルオプションはカーネルコードに与えるものと同じ
     102 *      ものを与える.
     103 *      ルネサス製ツール TM を使用している場合は, プロジェクトエディタの
     104 *      生成手順ビューから makeoffset.a30 を選び, 右クリックメニューの
     105 *      「部分ビルド」を選択することで生成できる.
     106 *      もしくはコマンドプロンプトでメイクファイルと同じディレクトリに
     107 *      移動し, "make -f メイクファイル名 makeoffset.a30" を
     108 *      実行しても同様の結果が得られる. (メイクファイルはTMが使用して
     109 *      いるものと同じファイルを指定可能)
     110 *
     111 *  2.  先ほどの 1. の作業で得られた, makeoffset.a30 ファイルから
     112 *      "! BEGIN XXXX"  ではじまり "! END" で終わっている部分を探す.
     113 *
     114 *      4箇所あり, それぞれ少しずつ異なるので順に説明する.
     115 *      (以下, 説明中ではアセンブリ言語ファイルのコメント行は省く)
     116 *
     117 * (1)  構造体の先頭からメンバへのオフセット
    144118 *
    145119 *      ! BEGIN TCB_texptn
     
    147121 *      ! END
    148122 *
    149  *      上記"! BEGIN"の後ろの文字列がoffset.incで定義するシンボル名となる.
    150  *      そのシンボルの値は, 次行のbset命令の第2オペランドの値である
    151  *      0000000eHがそれに相当する. これが構造体のå
    152 ˆé ­ã‹ã‚‰texptnまでの
    153  *      オフセット値となる. したがってこの場合, offset.inc には
     123 *      上記"! BEGIN"の後ろの文字列がoffset.incで定義するシンボル名となる.
     124 *      そのシンボルの値は, 次行のbset命令の第2オペランドの値である
     125 *      0000000eHがそれに相当する. これが構造体の先頭からtexptnまでの
     126 *      オフセット値となる. したがってこの場合, offset.inc には
    154127 *      TCB_texptn      .equ    14
    155  *      という行を記述する.
    156  *
    157  * (2)  構造体のメンバが構造体で, その中のメンバに対するオフセット
    158  *
    159  *      TCB_sp についてもほぼ同様だが, sp はTCB構造体の直接の
    160  *      メンバでなくTCB構造体のメンバであるTSKCTXB構造体のメンバで
    161  *      ある点が異なる. それでも定義するシンボル名としては
    162  *      TCB_sp のように表現する. アセンブリ言語ファイルでは
     128 *      という行を記述する.
     129 *
     130 * (2)  構造体のメンバが構造体で, その中のメンバに対するオフセット
     131 *
     132 *      TCB_sp についてもほぼ同様だが, sp はTCB構造体の直接の
     133 *      メンバでなくTCB構造体のメンバであるTSKCTXB構造体のメンバで
     134 *      ある点が異なる. それでも定義するシンボル名としては
     135 *      TCB_sp のように表現する. アセンブリ言語ファイルでは
    163136 *
    164137 *      ! BEGIN TCB_sp
     
    170143 *      ! END *
    171144 *
    172  *      のようになり,14H(=20) が求める値なのでoffset.inc には次のように
    173  *      記述する.
     145 *      のようになり,14H(=20) が求める値なのでoffset.inc には次のように
     146 *      記述する.
    174147 *
    175148 *      TCB_sp  .equ    20
    176149 *
    177  * (3)  メンバが関数へのポインタであった場合
    178  *
    179  *      次は TCB_pc の場合.
     150 * (3)  メンバが関数へのポインタであった場合
     151 *
     152 *      次は TCB_pc の場合.
    180153 *
    181154 *      ! BEGIN TCB_pc
     
    184157 *      ! END
    185158 *
    186  *      pc も sp と同じく, TCB構造体の直接のメンバではないが
    187  *      TCB_pc と表現している. これは関数のアドレスを格納する変数なので,
     159 *      pc も sp と同じく, TCB構造体の直接のメンバではないが
     160 *      TCB_pc と表現している. これは関数のアドレスを格納する変数なので,
    188161 *      (((TCB *)0)->tskctxb.pc)();
    189  *      として関数呼び出しのように記述すると上記のようなアセンブリ言語
    190  *      コードを出力する. シンボル定義する際のシンボル名は今までと
    191  *      同じく, TCB_pc とする.
    192  *      求める値は構造体から関数ポインタまでのオフセットであり, 上のmov.l
    193  *      命令の結果から   00000018H(=24) となる.
    194  *      したがって, offset.inc には次のように記述する.
     162 *      として関数呼び出しのように記述すると上記のようなアセンブリ言語
     163 *      コードを出力する. シンボル定義する際のシンボル名は今までと
     164 *      同じく, TCB_pc とする.
     165 *      求める値は構造体から関数ポインタまでのオフセットであり, 上のmov.l
     166 *      命令の結果から         00000018H(=24) となる.
     167 *      したがって, offset.inc には次のように記述する.
    195168 *
    196169 *      TCB_pc  .equ    24
    197170 *
    198  * (4)  構造体のメンバがビットフィールドでそのビット位置も知りたい場合
     171 * (4)  構造体のメンバがビットフィールドでそのビット位置も知りたい場合
    199172 *
    200173 *      ! BEGIN TCB_enatex
     
    202175 *      ! END
    203176 *
    204  *      今までと同様, BEGIN の後の文字列をシンボル名とする.
    205  *      ここでのTCB_enatexの値は構造体のå
    206 ˆé ­ã‹ã‚‰ãƒ“ットフィールドを含むバ
    207  *      イトまでのオフセットで, M32Cのビット命令アドレッシングは指定でき
    208  *      るビット位置が0から7の間に収まるようにアクセスするアドレスに適当
    209  *      数が加えられるので cH+1(=13) となっている. また, ビットフィールド
    210  *      中の最下位ビットからのビット位置は 6となる.
    211  *      以上より次のように書くことができる.
     177 *      今までと同様, BEGIN の後の文字列をシンボル名とする.
     178 *      ここでのTCB_enatexの値は構造体の先頭からビットフィールドを含むバ
     179 *      イトまでのオフセットで, M32Cのビット命令アドレッシングは指定でき
     180 *      るビット位置が0から7の間に収まるようにアクセスするアドレスに適当
     181 *      数が加えられるので cH+1(=13) となっている. また, ビットフィールド
     182 *      中の最下位ビットからのビット位置は 6となる.
     183 *      以上より次のように書くことができる.
    212184 *
    213185 *              TCB_enatex      .equ    13
Note: See TracChangeset for help on using the changeset viewer.