Ignore:
Timestamp:
May 22, 2019, 10:03:37 PM (5 years ago)
Author:
coas-nagasima
Message:

ビルドが通るよう更新

File:
1 edited

Legend:

Unmodified
Added
Removed
  • azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPSVCPlugin.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby;charset=UTF-8
    r388 r389  
    66#   Copyright (C) 2008-2018 by TOPPERS Project
    77#--
    8 #   ä¸Šè¨˜è‘—作権è€
    9 ã¯ï¼Œä»¥ä¸‹ã®(1)~(4)の条件を満たす場合に限り,本ソフトウェ
    10 #   ã‚¢ï¼ˆæœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’改変したものを含む.以下同じ)を使用・複製・改
    11 #   å¤‰ãƒ»å†é
    12 å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
    13 #   (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    14 #       æ¨©è¡¨ç¤ºï¼Œã“の利用条件および下記の無保証規定が,そのままの形でソー
    15 #       ã‚¹ã‚³ãƒ¼ãƒ‰ä¸­ã«å«ã¾ã‚Œã¦ã„ること.
    16 #   (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    17 #       ç”¨ã§ãã‚‹å½¢ã§å†é
    18 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    19 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    20 #       è€
    21 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    22 #       ã®ç„¡ä¿è¨¼è¦å®šã‚’掲載すること.
    23 #   (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    24 #       ç”¨ã§ããªã„形で再é
    25 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
    26 #       ã¨ï¼Ž
    27 #     (a) 再é
    28 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    29 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    30 #         ä½œæ¨©è¡¨ç¤ºï¼Œã“の利用条件および下記の無保証規定を掲載すること.
    31 #     (b) 再é
    32 å¸ƒã®å½¢æ
    33 ‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
    34 #         å ±å‘Šã™ã‚‹ã“と.
    35 #   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    36 #       å®³ã‹ã‚‰ã‚‚,上記著作権è€
    37 ãŠã‚ˆã³TOPPERSプロジェクトをå
    38 è²¬ã™ã‚‹ã“と.
    39 #       ã¾ãŸï¼Œæœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã®ãƒ¦ãƒ¼ã‚¶ã¾ãŸã¯ã‚¨ãƒ³ãƒ‰ãƒ¦ãƒ¼ã‚¶ã‹ã‚‰ã®ã„かなる理
    40 #       ç”±ã«åŸºã¥ãè«‹æ±‚からも,上記著作権è€
    41 ãŠã‚ˆã³TOPPERSプロジェクトを
    42 #       å
    43 è²¬ã™ã‚‹ã“と.
     8#   上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
     9#   ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     10#   変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     11#   (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     12#       権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     13#       スコード中に含まれていること.
     14#   (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     15#       用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     16#       者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     17#       の無保証規定を掲載すること.
     18#   (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     19#       用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     20#       と.
     21#     (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22#         作権表示,この利用条件および下記の無保証規定を掲載すること.
     23#     (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     24#         報告すること.
     25#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     26#       害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     27#       また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     28#       由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     29#       免責すること.
    4430
    45 #   æœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã¯ï¼Œç„¡ä¿è¨¼ã§æä¾›ã•ã‚Œã¦ã„るものである.上記著作権è€
    46 ãŠ
    47 #   ã‚ˆã³TOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
    48 #   ã«å¯¾ã™ã‚‹é©åˆæ€§ã‚‚含めて,いかなる保証も行わない.また,本ソフトウェ
    49 #   ã‚¢ã®åˆ©ç”¨ã«ã‚ˆã‚Šç›´æŽ¥çš„または間接的に生じたいかなる損害に関しても,そ
    50 #   ã®è²¬ä»»ã‚’負わない.
     31#   本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     32#   よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     33#   に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     34#   アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     35#   の責任を負わない.
    5136
    5237#  $Id$
    5338#++
    5439
    55 # mikan through plugin: namespace が考æ
    56 ®ã•ã‚Œã¦ã„ない
    57 # これを利用する場合、以下のように toppers_jsp.cdl sChannel.cdl を指定するå¿
    58 è¦ãŒã‚ã‚‹
     40# mikan through plugin: namespace が考慮されていない
     41# これを利用する場合、以下のように toppers_jsp.cdl sChannel.cdl を指定する必要がある
    5942# tecsgen toppers_jsp.cdl sChannel.cdl your_description.cdl
    6043
    61 # 以下を仮定(制限事é 
    62 ï¼‰
    63 #  呼びå
    64 ƒã€å‘¼ã³å
    65 ˆã®ã‚¨ãƒ³ãƒ‡ã‚£ã‚¢ãƒ³ã€char, short, int_t, long_t, intptr_t のサイズが同じ
    66 #  有符号、無符号でサイズが同じ
     44# 以下を仮定(制限事項)
     45#  呼び元、呼び先のエンディアン、char, short, int_t, long_t, intptr_t のサイズが同じ
     46#  有符号、無符号でサイズが同じ
    6747
    6848class SVCManage
    6949    #
    70     #  @@id: TECSのプラグインで生成した拡張サービスコールに割り当てるid
    71     #        実際の拡張サービスコールIDは,TFN_TECSGEN_ORIGINで下駄を
    72     #        履かせた値となる
    73     #        TFN_TECSGEN_ORIGINは,hrp3/include/extsvc_fncode.h で定義
    74     #        される
    75     #  @@func_ids: 拡張サービスコールの関数名と拡張サービスコールIDを
    76     #     対応づけるハッシュ
     50    #  @@id: TECSのプラグインで生成した拡張サービスコールに割り当てるid
     51    #        実際の拡張サービスコールIDは,TFN_TECSGEN_ORIGINで下駄を
     52    #        履かせた値となる
     53    #        TFN_TECSGEN_ORIGINは,hrp3/include/extsvc_fncode.h で定義
     54    #        される
     55    #  @@func_ids: 拡張サービスコールの関数名と拡張サービスコールIDを
     56    #     対応づけるハッシュ
    7757    #
    7858    @@id = 0
     
    8060    def initialize()
    8161        #
    82       #  本クラスはインスタンスを持たない仮想的なクラスである
     62      #  本クラスはインスタンスを持たない仮想的なクラスである
    8363        #
    8464        raise "class #{self.class.name} shall not have instances"
     
    10585
    10686#
    107 #  拡張サービスコールを用いたドメイン間通信の
    108 #  throughプラグイン
    109 #  HRPドメインプラグインによって挿å
    110 ¥ã•ã‚Œã‚‹
    111 #  前提条件: 呼出しå
    112 ˆãŒã‚«ãƒ¼ãƒãƒ«ã‚ªãƒ–ジェクトかどうかの判定はHRPドメインプラグイン
    113 #       で実施されるため,ここでは判定しないこととした
     87#  拡張サービスコールを用いたドメイン間通信の
     88#  throughプラグイン
     89#  HRPドメインプラグインによって挿入される
     90#  前提条件: 呼出し先がカーネルオブジェクトかどうかの判定はHRPドメインプラグイン
     91#       で実施されるため,ここでは判定しないこととした
    11492#
    11593class HRPSVCPlugin < ThroughPlugin
    11694
    117   NUM_SVC_ARG_MAX = 5              # HRP3 の拡張サービスコールで扱うことのできる引数の最大個数
    118 
    119   @@generated_celltype ={}    # セルタイプの重複排除用
    120   @@generated_cell = {}       # セルの重複排除用
     95  NUM_SVC_ARG_MAX = 5              # HRP3 の拡張サービスコールで扱うことのできる引数の最大個数
     96
     97  @@generated_celltype ={}    # セルタイプの重複排除用
     98  @@generated_cell = {}       # セルの重複排除用
    12199
    122100  def initialize( cell_name, plugin_arg, next_cell, next_cell_port_name, next_cell_port_subscript, signature, celltype, caller_cell )
    123101    super
    124102
    125     # 受け口é
    126 åˆ—の場合、é
    127 åˆ—添数ごとに別のセルタイプとする
    128     # セルタイプをシングルトン化したいため。
    129     # さもないと、セルを識別する引数を渡すå¿
    130 è¦ãŒã‚り、NUM_SVC_ARG_MAX(5) つしか渡せない引数の一つを消費することになるため。
     103    # 受け口配列の場合、配列添数ごとに別のセルタイプとする
     104    # セルタイプをシングルトン化したいため。
     105    # さもないと、セルを識別する引数を渡す必要があり、NUM_SVC_ARG_MAX(5) つしか渡せない引数の一つを消費することになるため。
    131106    if @next_cell_port_subscript then
    132107      subscript = "__" + @next_cell_port_subscript.to_s
     
    145120  end
    146121
    147   #=== NamespacePath を得る
    148   # 生成するセルの namespace path を生成する
     122  #=== NamespacePath を得る
     123  # 生成するセルの namespace path を生成する
    149124  def get_cell_namespace_path
    150125#    nsp = @region.get_namespace.get_namespace_path
     
    155130  def gen_plugin_decl_code( file )
    156131
    157     # このセルタイプ(同じシグニチャ)は既に生成されているか?
     132    # このセルタイプ(同じシグニチャ)は既に生成されているか?
    158133    if @@generated_celltype[ @ct_name_body ] == nil then
    159134        @@generated_celltype[ @ct_name_body ] = [ self ]
     
    177152    file.print "import( \"#{$gen}/#{@ct_name_body}.cdl\" );\n"
    178153
    179     # このセルタイプ(同じシグニチャ)は既に生成されているか?
     154    # このセルタイプ(同じシグニチャ)は既に生成されているか?
    180155    if @@generated_celltype[ @ct_name ] == nil then
    181156        @@generated_celltype[ @ct_name ] = [ self ]
     
    197172
    198173=begin
    199     # TODO: send. receive 対応
     174    # TODO: send. receive 対応
    200175    send_receive = []
    201176    if @signature != nil then
     
    229204  end
    230205
    231   #===  through cell コードを生成
     206  #===  through cell コードを生成
    232207  #
    233208  #
     
    236211    # gen_plugin_decl_code( file )  this is called from super.
    237212
    238     # セルを探す
     213    # セルを探す
    239214    # path =["::",@next_cell.get_name]  # mikan namespace
    240215    # cell = Namespace.find( path )
    241216    # cell = Namespace.find( @next_cell.get_namespace_path )
    242217
    243     ##### クライアント側のセルの生成 #####
     218    ##### クライアント側のセルの生成 #####
    244219    # file.print "[domain(HRP, \"kernel\")]"
    245220    nest = @start_region.gen_region_str_pre file
    246221    nest_str = "  " * nest
    247222
    248     # クライアント側チャンネルの生成
    249     # 拡張サービスコール呼出し
     223    # クライアント側チャンネルの生成
     224    # 拡張サービスコール呼出し
    250225    file.print <<EOT
    251226/* HRPSVC0003 */
     
    259234    file.print "\n\n"
    260235
    261     ##### サーバー側のセルの生成 #####
     236    ##### サーバー側のセルの生成 #####
    262237    # print "######  #{@cell_name_body} ... #{@ct_name_body} #{@@generated_cell[ @ct_name_body ].class}  #####\n"
    263238
     
    274249      end
    275250
    276       # サーバー側チャンネルの生成
    277       # 拡張サービスコール本体
     251      # サーバー側チャンネルの生成
     252      # 拡張サービスコール本体
    278253      file.print <<EOT
    279254
     
    295270      file2.close
    296271
    297       # callee_cell のget_restricted_regions を呼び出しておく
    298       # restrict が参ç
    299 §ã•ã‚ŒãŸå°ã‚’つけるため
     272      # callee_cell のget_restricted_regions を呼び出しておく
     273      # restrict が参照された印をつけるため
    300274      @callee_cell.get_restricted_regions( :dummy_entry_name, :dummy_func_name )
    301275    end
    302276  end
    303277
    304   #===  受け口関数の本体(C言語)を生成する
    305   #     é€šå¸¸ã§ã‚れば、ジェネレータは受け口関数のテンプレートを生成する
    306   #     ãƒ—ラグインの場合、変更するå¿
    307 è¦ã®ãªã„セルタイプコードを生成する
    308   #file::           FILE        出力å
    309 ˆãƒ•ã‚¡ã‚¤ãƒ«
     278  #===  受け口関数の本体(C言語)を生成する
     279  #     通常であれば、ジェネレータは受け口関数のテンプレートを生成する
     280  #     プラグインの場合、変更する必要のないセルタイプコードを生成する
     281  #file::           FILE        出力先ファイル
    310282  #b_singleton::    bool        true if singleton
    311283  #ct_name::        Symbol
     
    320292
    321293        #
    322         #  拡張サービスコール呼出し側の関数生成
     294        #  拡張サービスコール呼出し側の関数生成
    323295        #
    324         #  完成形のイメージ
     296        #  完成形のイメージ
    325297        # 
    326298        # ER_UINT
     
    332304        #       p_cellcb = tHRPSVCPlugin_<Sig>SVCBody_<Cell>_<Entry>_GET_CELLCB(idx);
    333305        #   }else{
    334         #       /* エラー処理コードをここに記述 */
     306        #       /* エラー処理コードをここに記述 */
    335307        #   }
    336308        #
     
    389361
    390362        #
    391         #  拡張サービスコール本体側の関数生成
     363        #  拡張サービスコール本体側の関数生成
    392364        #
    393         #  完成形のイメージ
     365        #  完成形のイメージ
    394366        # 
    395367        # ER_UINT
     
    401373        #       p_cellcb = tHRPSVCPlugin_<Sig>SVCBody_<Cell>_<Entry>_GET_CELLCB(idx);
    402374        #   }else{
    403         #       /* エラー処理コードをここに記述 */
     375        #       /* エラー処理コードをここに記述 */
    404376        #   }
    405377        #
     
    436408
    437409            #
    438             #  エラーチェック処理の生成
     410            #  エラーチェック処理の生成
    439411            #
    440412
    441413            #
    442             #  呼出しå
    443 ƒãƒ‰ãƒ¡ã‚¤ãƒ³ã®ãƒã‚§ãƒƒã‚¯
    444             #   * private method: gen_caller_check_code参ç
    445 §
     414            #  呼出し元ドメインのチェック
     415            #   * private method: gen_caller_check_code参照
    446416            #
    447417            generated_check_code = gen_caller_check_code(func_name)
     
    450420
    451421            #
    452             #  パラメータにポインタが存在する場合,呼出しå
    453 ƒã‚¿ã‚¹ã‚¯ã«å¯¾ã™ã‚‹
    454             #  アクセス権のチェック処理を出力する
    455             #  ※ cdmidがカーネルドメイン(拡張サービスコール呼出し中のユーザ
    456             #    ドメインを含む)であればprb_memの処理をスキップし,初段の
    457             #    拡張サービスコールのみprb_memを呼出しå
    458 ƒã‚¿ã‚¹ã‚¯ã«ç™ºè¡Œã™ã‚‹
     422            #  パラメータにポインタが存在する場合,呼出し元タスクに対する
     423            #  アクセス権のチェック処理を出力する
     424            #  ※ cdmidがカーネルドメイン(拡張サービスコール呼出し中のユーザ
     425            #    ドメインを含む)であればprb_memの処理をスキップし,初段の
     426            #    拡張サービスコールのみprb_memを呼出し元タスクに発行する
    459427            #
    460428            num = 0
     
    465433                    if param.get_type.get_referto.kind_of?(IntType) then
    466434                        case param.get_type.get_referto.get_bit_size
    467                         when -11, -1, 8   # char, char_t, int8_t (無符号含む)
     435                        when -11, -1, 8   # char, char_t, int8_t (無符号含む)
    468436                        #
    469                         #  charデータの場合,ALIGN_TYPEはå¿
    470 ãšTRUE
    471                         #  となるので,エラーチェックを省略
    472                         #  char型の@bit_sizeは-11
    473                         #  tecsgen/tecslib/core/types.rbを参ç
    474 §
     437                        #  charデータの場合,ALIGN_TYPEは必ずTRUE
     438                        #  となるので,エラーチェックを省略
     439                        #  char型の@bit_sizeは-11
     440                        #  tecsgen/tecslib/core/types.rbを参照
    475441                        #
    476442                          align_check_str = ""
     
    479445                    if param.get_direction == :IN then
    480446                        #
    481                         #  å
    482 ¥åŠ›([in])のポインタパラメータは,呼出しå
    483 ƒã‚¿ã‚¹ã‚¯ã«
    484                         #  TPM_READ(読出し可能)のアクセス権がå¿
    485 è¦
     447                        #  入力([in])のポインタパラメータは,呼出し元タスクに
     448                        #  TPM_READ(読出し可能)のアクセス権が必要
    486449                        #
    487                         # 二重ポインタが不可のため、size_is と string が同時に設定されることはない
     450                        # 二重ポインタが不可のため、size_is と string が同時に設定されることはない
    488451                        prb_func = "prb_mem"
    489452                        if param.get_size then
     
    507470                    elsif param.get_direction == :OUT || param.get_direction == :INOUT then
    508471                        #
    509                         #  出力([out])のポインタパラメータは,呼出しå
    510 ƒã‚¿ã‚¹ã‚¯ã«
    511                         #  TPM_WRITE(書込み可能)のアクセス権がå¿
    512 è¦
     472                        #  出力([out])のポインタパラメータは,呼出し元タスクに
     473                        #  TPM_WRITE(書込み可能)のアクセス権が必要
    513474                        #
    514475                        prb_func = "prb_mem"
    515476                        if param.get_size then
    516477                          size_str = param.get_size.to_s
    517                         elsif param.get_string then          # 引数なしの string はない
     478                        elsif param.get_string then          # 引数なしの string はない
    518479                          size_str = param.get_string.to_s
    519                           # prb_func = "prb_str"             # out, inout の場合、å¿
    520 ãšé ˜åŸŸã‚’確保する. prb_mem を用いる
     480                          # prb_func = "prb_str"             # out, inout の場合、必ず領域を確保する. prb_mem を用いる
    521481                        else
    522482                          size_str = "1"
     
    535495
    536496            #
    537             #  呼出しå
    538 ƒãŒã‚«ãƒ¼ãƒãƒ«ãƒ‰ãƒ¡ã‚¤ãƒ³ã®ã¿è¨±å¯ã•ã‚Œã¦ã„る場合,
    539             #  すべてのユーザドメインからの呼出しに対し,E_OACVを返す
     497            #  呼出し元がカーネルドメインのみ許可されている場合,
     498            #  すべてのユーザドメインからの呼出しに対し,E_OACVを返す
    540499            #
    541500            if user_cannot_callable
     
    545504            if check_code != ""
    546505                #
    547                 #  呼出しå
    548 ƒãŒã‚«ãƒ¼ãƒãƒ«ãƒ‰ãƒ¡ã‚¤ãƒ³ã®å ´åˆï¼Œã‚¢ã‚¯ã‚»ã‚¹æ¨©ã®ãƒã‚§ãƒƒã‚¯
    549                 #  処理をスキップさせる
     506                #  呼出し元がカーネルドメインの場合,アクセス権のチェック
     507                #  処理をスキップさせる
    550508                #
    551509                file2.print <<eot
     
    557515
    558516            #
    559             #  拡張サービスコール本体(本来の受け口関数)を呼び出す
     517            #  拡張サービスコール本体(本来の受け口関数)を呼び出す
    560518            #
    561519            file2.print"    #{retval_assign}#{@call_port_name}_#{func_name}("
     
    580538
    581539            #
    582             #  拡張サービスコールの登録
     540            #  拡張サービスコールの登録
    583541            #
    584542            file2 = AppFile.open( "#{$gen}/tecsgen.cfg" )
     
    593551
    594552            #
    595             #  拡張サービスコール登録にå¿
    596 è¦ãªæƒ
    597 å ±ã‚’ヘッダに出力
    598             #   - 拡張サービスコール呼出し時のチェックで使用するスタックサイズを出力
    599             #   - 拡張サービスコールとして登録する関数名のextern宣言を出力
     553            #  拡張サービスコール登録に必要な情報をヘッダに出力
     554            #   - 拡張サービスコール呼出し時のチェックで使用するスタックサイズを出力
     555            #   - 拡張サービスコールとして登録する関数名のextern宣言を出力
    600556            #
    601557            file2 = AppFile.open( "#{$gen}/#{@ct_name_body}_factory.h" )
     
    627583  private
    628584  #
    629   #  拡張サービスコール本体における,呼出しå
    630 ƒãƒã‚§ãƒƒã‚¯ã®ã‚³ãƒ¼ãƒ‰ã‚’
    631   #  出力する
    632   #  gen_ep_func_body からのみ呼び出される
    633   #  引数: 対象の関数名
    634   #  返り値: 下記のハッシュ
    635   #    {"check_code"=>出力するエラーチェックコード,
    636   #     "user_cannot_callable"=>ユーザドメインが呼出し不可能かどうかのフラグ}
     585  #  拡張サービスコール本体における,呼出し元チェックのコードを
     586  #  出力する
     587  #  gen_ep_func_body からのみ呼び出される
     588  #  引数: 対象の関数名
     589  #  返り値: 下記のハッシュ
     590  #    {"check_code"=>出力するエラーチェックコード,
     591  #     "user_cannot_callable"=>ユーザドメインが呼出し不可能かどうかのフラグ}
    637592  #
    638593  def gen_caller_check_code(func_name) 
    639594    dbgPrint "gen_caller_check_code(func_name): #{@callee_cell.get_name}\n"
    640595      #
    641       #  エラーチェック処理
     596      #  エラーチェック処理
    642597      #
    643598      check_code = ""
     
    647602
    648603      #
    649       #  呼出しå
    650 ƒãƒ‰ãƒ¡ã‚¤ãƒ³ã®ãƒã‚§ãƒƒã‚¯å‡¦ç†
    651       #  callable_domains: 拡張サービスコールを呼出し可能なドメインのリスト
    652       #    - 無所属のセルから結合されている場合,すべてのセルに対して,
    653       #     callable?をチェックし,呼出し可能なすべてのドメインを返す
    654       #    - 無所属以外のセルから結合されている場合,そのセルに対して
    655       #      callable?をチェックし,呼出し可能であれば,そのドメインを返す
     604      #  呼出し元ドメインのチェック処理
     605      #  callable_domains: 拡張サービスコールを呼出し可能なドメインのリスト
     606      #    - 無所属のセルから結合されている場合,すべてのセルに対して,
     607      #     callable?をチェックし,呼出し可能なすべてのドメインを返す
     608      #    - 無所属以外のセルから結合されている場合,そのセルに対して
     609      #      callable?をチェックし,呼出し可能であれば,そのドメインを返す
    656610      #
    657611      callable_domains = []
    658612      @@generated_celltype[ @ct_name_body ].each { |svcplugin|
    659613          if svcplugin.get_caller_cell.get_region.get_domain_root.get_domain_type.get_option == "OutOfDomain"
    660               # 無所属かつ active な場合も、restrict に従う
     614              # 無所属かつ active な場合も、restrict に従う
    661615              # if svcplugin.get_caller_cell.get_celltype.is_active?
    662616              #    #
    663               #    #  無所属かつactiveなセルは、TECSから存在が認識されていないのを
    664               #    #  含む任意のドメインから呼び出される可能性も存在する
     617              #    #  無所属かつactiveなセルは、TECSから存在が認識されていないのを
     618              #    #  含む任意のドメインから呼び出される可能性も存在する
    665619              #    #
    666620              #    caller_unrestricted = true
    667621              # else
    668622              #     #
    669               #     #  無所属から接続されている場合は,すべてのセルの
    670               #     #  restrictをチェック
     623              #     #  無所属から接続されている場合は,すべてのセルの
     624              #     #  restrictをチェック
    671625              #     #
    672626              #     Cell.get_cell_list2.each { |cell|
     
    680634              # end
    681635
    682               # restrict 指定がある場合には、それに従う。さもなければ、チェックしない
     636              # restrict 指定がある場合には、それに従う。さもなければ、チェックしない
    683637              callable_domains = @callee_cell.get_restricted_regions( get_callee_ep_name, func_name )
    684638              if callable_domains == nil then
     
    695649          elsif svcplugin.get_caller_cell.callable?( svcplugin.get_callee_cell, svcplugin.get_callee_ep_name, func_name )
    696650              #
    697               #  特定のドメインから接続されている場合は,呼出しå
    698 ƒã‚»ãƒ«ã®
    699               #  restrictをチェック
     651              #  特定のドメインから接続されている場合は,呼出し元セルの
     652              #  restrictをチェック
    700653              #
    701654              callable_domains << svcplugin.get_caller_cell.get_region.get_domain_root
    702655          else
    703656              #
    704               #  無所属から結合されておらず,特定の呼出しå
    705 ƒãƒ‰ãƒ¡ã‚¤ãƒ³ã«ã‚¢ã‚¯ã‚»ã‚¹æ¨©
    706               #  がない場合,callable_domainsは空となる
     657              #  無所属から結合されておらず,特定の呼出し元ドメインにアクセス権
     658              #  がない場合,callable_domainsは空となる
    707659              #
    708660              # pp "#{svcplugin.get_caller_cell.get_name} cannot call #{svcplugin.get_callee_cell.get_name}_#{svcplugin.get_callee_ep_name}_#{func_name}"
     
    716668
    717669      #
    718       #  重複を削除
     670      #  重複を削除
    719671      #
    720672      callable_domains.uniq!
    721673      #
    722       #  無所属に対するドメインチェックは実施しない
    723       #  カーネルドメインに対するドメインチェックは実施しない
     674      #  無所属に対するドメインチェックは実施しない
     675      #  カーネルドメインに対するドメインチェックは実施しない
    724676      #
    725677      callable_domains = callable_domains.select { |domain|
     
    730682      # pp callable_domains.map{|domain| domain.get_name }
    731683      #
    732       #  すべてのユーザドメインから呼出し可能な場合,ドメインチェックは
    733       #  実施しない
     684      #  すべてのユーザドメインから呼出し可能な場合,ドメインチェックは
     685      #  実施しない
    734686      #
    735687      all_domain_regions = DomainType.get_domain_regions[:HRP].select { |reg|
     
    745697
    746698      #
    747       #  呼出しå
    748 ƒãƒ‰ãƒ¡ã‚¤ãƒ³ã®ãƒã‚§ãƒƒã‚¯å‡¦ç†æœ¬ä½“の生成
     699      #  呼出し元ドメインのチェック処理本体の生成
    749700      #
    750701      if callable_domains.length == 0
    751702        dbgPrint "callable_domain.length = 0\n"
    752703          #
    753           #  ユーザドメインから呼出し不可能な場合は
    754           #  個別のエラーチェックはせず,問答無用でE_OACVを返す
     704          #  ユーザドメインから呼出し不可能な場合は
     705          #  個別のエラーチェックはせず,問答無用でE_OACVを返す
    755706          #
    756707          user_cannot_callable = true
     
    758709        dbgPrint "callable_domain.length = 1\n"
    759710          #
    760           #  呼出し可能なユーザドメインが単一の場合は
    761           #  cdmid != <domain名> の形式でチェックする
     711          #  呼出し可能なユーザドメインが単一の場合は
     712          #  cdmid != <domain名> の形式でチェックする
    762713          #
    763714          check_code += "\t/* HRPSVC0012.1 */\n"
     
    766717        dbgPrint "callable_domain.length > 1 && not all_domains \n"
    767718          #
    768           #  呼出し可能なユーザドメインが複数の場合は
    769           #  TACP(cdmid) & (TACP(<domain名>) | ...) != 0U
    770           #  の形式でチェックする
     719          #  呼出し可能なユーザドメインが複数の場合は
     720          #  TACP(cdmid) & (TACP(<domain>) | ...) != 0U
     721          #  の形式でチェックする
    771722          #
    772723          check_code += "\t/* HRPSVC0012.2 */\n"
     
    779730      if check_code != ""
    780731          #
    781           #  呼出し可能なユーザドメインのチェックがある場合は
    782           #  エラーコードを返すためのコードを出力する
     732          #  呼出し可能なユーザドメインのチェックがある場合は
     733          #  エラーコードを返すためのコードを出力する
    783734          #
    784735          check_code += <<EOS
     
    793744
    794745  #---------------------------------------------------------#
    795   #=== シグニチャのチェック
     746  #=== シグニチャのチェック
    796747  def check_signature signature
    797748    signature.get_function_head_array.each{ |fh|
     
    806757    }
    807758  end
    808   #=== 戻り値の型のチェック
    809   # ER, ER_UINT は推奨される型
    810   # 整数、ブール、void は可能、他は不可
     759  #=== 戻り値の型のチェック
     760  # ER, ER_UINT は推奨される型
     761  # 整数、ブール、void は可能、他は不可
    811762  def check_return_type signature, fh, type
    812763    ot = type.get_original_type
     
    820771    end
    821772  end
    822   #=== 引数の型のチェック
     773  #=== 引数の型のチェック
    823774  def check_param signature, fh, param
    824775    type = param.get_type
Note: See TracChangeset for help on using the changeset viewer.