Changeset 107 for uKadecot/trunk/ssp/arch/rx630_ccrx/makeoffset.c
- Timestamp:
- Jun 10, 2015, 8:40:31 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uKadecot/trunk/ssp/arch/rx630_ccrx/makeoffset.c
-
Property svn:mime-type
changed from
text/plain
totext/plain; charset=SHIFT_JIS
r101 r107 7 7 * Copyright (C) 2008-2010 by Witz Corporation, JAPAN 8 8 * 9 * ãLì ÒÍCÈºÌ (1)`(4) Ìð©CFree Software Foundation 10 * ÉæÁÄö\³êÄ¢é GNU General Public License Ì Version 2 ÉL 11 * q³êÄ¢éðð½·êÉÀèC{\tgEFAi{\tgEFA 12 * ðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»EüÏEÄzziȺC 13 * pÆÄÔj·é±Æð³Åø·éD 14 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 15 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 16 * XR[hÉÜÜêÄ¢é±ÆD 17 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 18 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 19 gip 20 * Ò}j 21 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 22 * ̳ÛØKèðfÚ·é±ÆD 23 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 24 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 25 * ÆD 26 * (a) Äzzɺ¤hL 27 gipÒ}j 28 AÈÇjÉCãLÌ 29 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 30 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 31 * ñ·é±ÆD 32 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 33 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 34 * 35 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨ 36 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄC»ÌKpÂ\«à 37 * ÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEFAÌpÉæè¼ 38 * ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»ÌÓCðíÈ¢D 9 * 上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation 10 * によって公表されている GNU General Public License の Version 2 に記 11 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア 12 * を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下, 13 * 利用と呼ぶ)することを無償で許諾する. 14 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 15 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 16 * スコード中に含まれていること. 17 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 18 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 19 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 20 * の無保証規定を掲載すること. 21 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 22 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 23 * と. 24 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 25 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 26 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 27 * 報告すること. 28 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 29 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 30 * 31 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 32 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 33 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 34 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 39 35 * 40 36 */ … … 42 38 43 39 /* 44 * offset.inc ( àµÍ offset.h) É¢Ä45 * 46 * offset.inc Í\¢ÌÌÁèÌvfª\¢ÌÌ檩ç½oCgÚÉ47 * ¶Ý·é©Æ¢¤±Æâ, ÁèÌrbgtB[hªæª©ç48 * ½oCgæ̽rbgÚɶݷé©, Æ¢¤îñð49 * AZu¾êt@CÉ^¦é½ßɶݵĢé.50 * 51 * offset.inc t@CÌgÍ, PÈéV{è`t@CÅ é.52 * V{Æ¢ÁÄàè`·éV{̼ÌÉÍp^[ª è,53 * 嫪¯ÄÌ3íÞɪÞÅ«é.54 * 55 * < \¢Ì¼>_<vf¼> (á) TCB_sp, TCB_pc, TCB_enatex ÈÇ56 * < \¢Ì¼>_<vf¼>_bit (á) TCB_enatex_bit ÈÇ57 * < \¢Ì¼>_<vf¼>_mask (á) TCB_enatex_mask ÈÇ58 * 59 * ( á)40 * offset.inc (もしくは offset.h) について 41 * 42 * offset.inc は構造体の特定の要素が構造体の先頭から何バイト目に 43 * 存在するかということや, 特定のビットフィールドが先頭から 44 * 何バイト先の何ビット目に存在するか, という情報を 45 * アセンブリ言語ファイルに与えるために存在している. 46 * 47 * offset.inc ファイルの中身は, 単なるシンボル定義ファイルである. 48 * シンボルといっても定義するシンボルの名称にはパターンがあり, 49 * 大きく分けて次の3種類に分類できる. 50 * 51 * <構造体名>_<要素名> (例) TCB_sp, TCB_pc, TCB_enatex など 52 * <構造体名>_<要素名>_bit (例) TCB_enatex_bit など 53 * <構造体名>_<要素名>_mask (例) TCB_enatex_mask など 54 * 55 * (例) 60 56 * TCB_texptn .equ 14 61 57 * TCB_sp .equ 20 … … 65 61 * TCB_enatex_mask .equ 0040H 66 62 * 67 * êÔͶßÍÁèÌvfª\¢ÌÌ檩ç½oCgæÉ é©68 * Æ¢¤±Æð¦·lɯéx̼Ì.69 * ñÔÚÍÁèÌrbgtB[hÌrbgª, ºÊ©ç¦Ä70 * ½rbgÚÉ é©Æ¢¤±Æð¦·lɯéx̼Ì.71 * 0 ©çnÜélÅ\»·é. ÅàºÊÌrbgÍæ0rbgÅ é.72 * OÔÚÍæÙÇÌ <\¢Ì¼>_<vf¼>_bit ÆàÖA·éª,73 * ÁèÌrbgtB[hÌrbgÌ}XNl̼Ì.74 * _bit Æ *_mask ÌlÌÔÉÍÌÖWª é.63 * 一番はじめは特定の要素が構造体の先頭から何バイト先にあるか 64 * ということを示す数値につけるラベルの名称. 65 * 二番目は特定のビットフィールド中のビットが, 下位から数えて 66 * 何ビット目にあるかということを示す数値につけるラベルの名称. 67 * 0から始まる数値で表現する. 最も下位のビットは第0ビットである. 68 * 三番目は先ほどの <構造体名>_<要素名>_bit とも関連するが, 69 * 特定のビットフィールド中のビットのマスク値の名称. 70 * _bit と *_mask の値の間には次の関係がある. 75 71 * (*_mask) == (1 << *_bit) 76 * * ( á) TCB_enatex_bit ª 6 Ì, TCB_enatex_mask Í40H77 * 78 * ¿ÈÝÉM32C˶ÌÀÅÍ, ÁèrbgÌ`FbNÈÇÉ79 * rbg½ßAhbVOðgpµÄ¢éÌÅ *_mask Æ¢¤xÍ80 * gpµÄ¢È¢.72 * * (例) TCB_enatex_bit が 6 の時, TCB_enatex_mask は 40H 73 * 74 * ちなみにM32C依存部の実装では, 特定ビットのチェックなどに 75 * ビット命令アドレッシングを使用しているので *_mask というラベルは 76 * 使用していない. 81 77 */ 82 78 83 79 /* 84 * offset.inc Ììèû(M32C^[Qbg˶ü¯) 85 * 86 * GNU CRpCðp¢Ä¢é^[Qbg˶É¢ÄÍ, 87 * J[lÌgbvfBNgÌºÉ é util Æ¢¤fBNgÌ 88 * ºÉ genoffset Æ¢¤ perl XNvgªpÓ³êÄ¢éÌÅ, 89 * ÁÉè®Å offset.h ð쬷éKvÍÈ¢. 90 * genoffset Í GNU J«ðzèµÄ쬳êÄ¢éÌÅ, 91 * ¶¬³êéAZu¾ê^½ßⶬK¥ÌÙÈé¼Ì 92 * CRpCÉÍ»ÌÜÜKpÅ«È¢Â\«ª é. 93 * »±Å, ±±ÅÍWindows« ü¯Ì genoffset ðpÓ¹¸, 94 * ìèûð±±ÉLµ, èìÆÅ offset.inc ð쬵Äà礱ÆÆ 95 * ·é. ȺɻÌû@ð¦·. Ȩ, ±Ìû@ÍM32CÌJ«â 96 * ½ßZbgÉ˶µÄ¢é½ß, ¼Ì^[QbgðgpµÄ¢éêÍ 97 * »ÌÜÜKpÅ«È¢. 98 * 99 * 1. makeoffset.c Æ¢¤t@C©çCRpCðgpµÄ 100 * AZu¾êt@C makeoffset.a30 𶬷é. 101 * RpCIvVÍJ[lR[hÉ^¦éàÌƯ¶ 102 * àÌð^¦é. 103 * lTX»c[ TM ðgpµÄ¢éêÍ, vWFNgGfB^Ì 104 * ¶¬èr 105 [©ç makeoffset.a30 ðIÑ, ENbNj 106 [Ì 107 * ¢ªrh£ðIð·é±ÆŶ¬Å«é. 108 * àµÍR}hvvgÅCNt@CƯ¶fBNgÉ 109 * Ú®µ, "make -f CNt@C¼ makeoffset.a30" ð 110 * ÀsµÄà¯lÌʪ¾çêé. (CNt@CÍTMªgpµÄ 111 * ¢éàÌƯ¶t@CðwèÂ\) 112 * 113 * 2. æÙÇÌ 1. ÌìÆžçê½, makeoffset.a30 t@C©ç 114 * "! BEGIN XXXX" ÅͶÜè "! END" ÅIíÁÄ¢éªðT·. 115 * 116 * 4Ó è, »ê¼êµ¸ÂÙÈéÌÅÉྷé. 117 * (Ⱥ, à¾ÅÍAZu¾êt@CÌRgsÍÈ) 118 * 119 * (1) \¢ÌÌ檩çoÖÌItZbg 80 * offset.inc の作り方(M32Cターゲット依存部向け) 81 * 82 * GNU Cコンパイラを用いているターゲット依存部については, 83 * カーネルのトップディレクトリの下にある util というディレクトリの 84 * 下に genoffset という perl スクリプトが用意されているので, 85 * 特に手動で offset.h を作成する必要はない. 86 * genoffset は GNU 開発環境を想定して作成されているので, 87 * 生成されるアセンブリ言語疑似命令や生成規則の異なる他の 88 * Cコンパイラにはそのまま適用できない可能性がある. 89 * そこで, ここではWindows環境 向けの genoffset を用意せず, 90 * 作り方をここに記し, 手作業で offset.inc を作成してもらうことと 91 * する. 以下にその方法を示す. なお, この方法はM32Cの開発環境や 92 * 命令セットに依存しているため, 他のターゲットを使用している場合は 93 * そのまま適用できない. 94 * 95 * 1. makeoffset.c というファイルからCコンパイラを使用して 96 * アセンブリ言語ファイル makeoffset.a30 を生成する. 97 * コンパイルオプションはカーネルコードに与えるものと同じ 98 * ものを与える. 99 * ルネサス製ツール TM を使用している場合は, プロジェクトエディタの 100 * 生成手順ビューから makeoffset.a30 を選び, 右クリックメニューの 101 * 「部分ビルド」を選択することで生成できる. 102 * もしくはコマンドプロンプトでメイクファイルと同じディレクトリに 103 * 移動し, "make -f メイクファイル名 makeoffset.a30" を 104 * 実行しても同様の結果が得られる. (メイクファイルはTMが使用して 105 * いるものと同じファイルを指定可能) 106 * 107 * 2. 先ほどの 1. の作業で得られた, makeoffset.a30 ファイルから 108 * "! BEGIN XXXX" ではじまり "! END" で終わっている部分を探す. 109 * 110 * 4箇所あり, それぞれ少しずつ異なるので順に説明する. 111 * (以下, 説明中ではアセンブリ言語ファイルのコメント行は省く) 112 * 113 * (1) 構造体の先頭からメンバへのオフセット 120 114 * 121 115 * ! BEGIN TCB_texptn … … 123 117 * ! END 124 118 * 125 * ãL"! BEGIN"Ìãë̶ñªoffset.incÅè`·éV{¼ÆÈé.126 * »ÌV{ÌlÍ, sÌbset½ßÌæ2IyhÌlÅ é127 * 0000000eH ª»êÉ·é. ±êª\¢ÌÌ檩çtexptnÜÅÌ128 * ItZbglÆÈé. µ½ªÁıÌê, offset.inc ÉÍ119 * 上記"! BEGIN"の後ろの文字列がoffset.incで定義するシンボル名となる. 120 * そのシンボルの値は, 次行のbset命令の第2オペランドの値である 121 * 0000000eHがそれに相当する. これが構造体の先頭からtexptnまでの 122 * オフセット値となる. したがってこの場合, offset.inc には 129 123 * TCB_texptn .equ 14 130 * Æ¢¤sðLq·é.131 * 132 * (2) \¢ÌÌoª\¢ÌÅ, »ÌÌoÉηéItZbg133 * 134 * TCB_sp É¢ÄàÙÚ¯l¾ª, sp ÍTCB\¢Ì̼ÚÌ135 * oÅÈTCB\¢ÌÌoÅ éTSKCTXB\¢ÌÌoÅ136 * é_ªÙÈé. »êÅàè`·éV{¼ÆµÄÍ137 * TCB_sp Ìæ¤É\»·é. AZu¾êt@CÅÍ124 * という行を記述する. 125 * 126 * (2) 構造体のメンバが構造体で, その中のメンバに対するオフセット 127 * 128 * TCB_sp についてもほぼ同様だが, sp はTCB構造体の直接の 129 * メンバでなくTCB構造体のメンバであるTSKCTXB構造体のメンバで 130 * ある点が異なる. それでも定義するシンボル名としては 131 * TCB_sp のように表現する. アセンブリ言語ファイルでは 138 132 * 139 133 * ! BEGIN TCB_sp … … 145 139 * ! END * 146 140 * 147 * Ìæ¤ÉÈè,14H(=20) ªßélÈÌÅoffset.inc ÉÍÌæ¤É148 * Lq·é.141 * のようになり,14H(=20) が求める値なのでoffset.inc には次のように 142 * 記述する. 149 143 * 150 144 * TCB_sp .equ 20 151 145 * 152 * (3) oªÖÖÌ|C^Å Á½ê153 * 154 * Í TCB_pc Ìê.146 * (3) メンバが関数へのポインタであった場合 147 * 148 * 次は TCB_pc の場合. 155 149 * 156 150 * ! BEGIN TCB_pc … … 159 153 * ! END 160 154 * 161 * pc à sp Ư¶, TCB\¢Ì̼ÚÌoÅÍÈ¢ª162 * TCB_pc Æ\»µÄ¢é. ±êÍÖÌAhXði[·éÏÈÌÅ,155 * pc も sp と同じく, TCB構造体の直接のメンバではないが 156 * TCB_pc と表現している. これは関数のアドレスを格納する変数なので, 163 157 * (((TCB *)0)->tskctxb.pc)(); 164 * ƵÄÖÄÑoµÌæ¤ÉLq·éÆãLÌæ¤ÈAZu¾ê165 * R[hðoÍ·é. V{è`·éÛÌV{¼Í¡ÜÅÆ166 * ¯¶, TCB_pc Æ·é.167 * ßélÍ\¢Ì©çÖ|C^ÜÅÌItZbgÅ è, ãÌmov.l168 * ½ßÌÊ©ç 00000018H(=24) ÆÈé.169 * µ½ªÁÄ, offset.inc ÉÍÌæ¤ÉLq·é.158 * として関数呼び出しのように記述すると上記のようなアセンブリ言語 159 * コードを出力する. シンボル定義する際のシンボル名は今までと 160 * 同じく, TCB_pc とする. 161 * 求める値は構造体から関数ポインタまでのオフセットであり, 上のmov.l 162 * 命令の結果から 00000018H(=24) となる. 163 * したがって, offset.inc には次のように記述する. 170 164 * 171 165 * TCB_pc .equ 24 172 166 * 173 * (4) \¢ÌÌoªrbgtB[hÅ»ÌrbgÊuàmè½¢ê167 * (4) 構造体のメンバがビットフィールドでそのビット位置も知りたい場合 174 168 * 175 169 * ! BEGIN TCB_enatex … … 177 171 * ! END 178 172 * 179 * ¡ÜÅƯl, BEGIN Ìã̶ñðV{¼Æ·é.180 * ±±ÅÌTCB_enatexÌlÍ\¢ÌÌ檩çrbgtB[hðÜÞo181 * CgÜÅÌItZbgÅ, M32CÌrbg½ßAhbVOÍwèÅ«182 * érbgÊuª0©ç7ÌÔÉûÜéæ¤ÉANZX·éAhXÉK183 * ªÁ¦çêéÌÅ cH+1(=13) ÆÈÁÄ¢é. ܽ, rbgtB[h184 * ÌźÊrbg©çÌrbgÊuÍ 6ÆÈé.185 * ÈãæèÌæ¤É±ÆªÅ«é.173 * 今までと同様, BEGIN の後の文字列をシンボル名とする. 174 * ここでのTCB_enatexの値は構造体の先頭からビットフィールドを含むバ 175 * イトまでのオフセットで, M32Cのビット命令アドレッシングは指定でき 176 * るビット位置が0から7の間に収まるようにアクセスするアドレスに適当 177 * 数が加えられるので cH+1(=13) となっている. また, ビットフィールド 178 * 中の最下位ビットからのビット位置は 6となる. 179 * 以上より次のように書くことができる. 186 180 * 187 181 * TCB_enatex .equ 13 -
Property svn:mime-type
changed from
Note:
See TracChangeset
for help on using the changeset viewer.