-initcall

コンパイルするプログラムで、手続き型コードを実行する前に、指定したルーチンの呼び出しをフェッチして実行します。

実行時に手続き型コードが実行される前に、指定したルーチンが呼び出されます。

構文

-initcall routine

パラメーター

routine
手続きコードを実行する前にフェッチして実行するルーチンの名前。

次のコマンド ラインは、mfplx コマンド内での -initcall の使用方法を示しています。

mfplx -deb -defext -initcall DEBINIT foo.pli 

この例では、foo.pli プログラムの前に DEBINIT ルーチンを実行するようにコードがコンパイルされます。DEBINIT ルーチンは、次のコードに示すようにメモリ破損をチェックします。

注: (str) には、コンパイルするプログラムの名前が含まれます。この例の場合は foo.pli です。
DEBINIT: proc(str);

  dcl str char(*);

  /* Variables for PLICTF */  
  dcl  EVENT_ERROR     fixed bin(31) static init(1000);
  dcl  LEVEL_DEBUG               fixed bin(31) static init(0);
  dcl  LEVEL_INFO                fixed bin(31) static init(1);
  dcl  LEVEL_WARNING             fixed bin(31) static init(2);
  dcl  LEVEL_ERROR               fixed bin(31) static init(3);
  dcl  TRACE_FLAGS_ALL           fixed bin(31) static init(-1);
  dcl  error_msg                 char(300) varying;
  
  /* Variables for Memory Validation */
  DCL _MFP_MEMVALID    entry(fixed bin(31) value, *) 
         returns(fixed bin(31)) options(nodescriptor);
      
  dcl  01 mem_validate_param,       
          05  cblte_mv_version   fixed bin(31) init(0), 
          05  cblte_mv_flags     fixed bin(31) init(0), 
          05  cblte_mv_type      fixed bin(31) init(0), 
          05  cblte_mv_size      fixed bin(31) init(0), 
          05  cblte_mv_address   poinTer init(NULL);                                                                                                                                              
  dcl  ret           fixed bin(31);

  
  on error
     begin;
       on error system;
       error_msg = "DEBINIT Error: " || trim(str) || ' :' ||  oncode();
       call PLICTF(EVENT_ERROR, LEVEL_ERROR, TRACE_FLAGS_ALL, error_msg, length(error_msg));     
       /* Continue processing   */
       /* don't want to take down user code because of bad initcall code! */       
       goto end_debcall;  
     end;

      ret = _MFP_MEMVALID(3, mem_validate_param);
      if (ret = 1000) then
        do;
          error_msg = "Memory Corruption detected: " || trim(str) || ' :' ||  hex(cblte_mv_address);        
          call PLICTF(EVENT_ERROR, LEVEL_ERROR, TRACE_FLAGS_ALL, error_msg, length(error_msg));               
        end;
  
  end_debcall:
  
end;