(toppers-users 4581) Re: cfg/pass1.rbでの空行の扱い

Takeharu KATO takeharu1219 @ ybb.ne.jp
2016年 7月 22日 (金) 00:07:12 JST


高田先生
皆様

加藤です。

お世話になっております。

修正の御検討いただけるとのことありがとうございます。

> 値取得シンボルテーブルは,ポーティングする人が記述するファイルで,
そうですね。

実は, aarch64技術習得のため、aarch64向けにポーティングを行っていた中で
遭遇した問題でしたので, 不具合というのか仕様外の動作なのか少し悩みました。

QEmuのaarch64システムシミュレータ上で動作し始めましたので,
ソースと動作の様子を記録した動画を参考までに以下に置いています。

現状, コア/チップ/ターゲット依存部の分離, コメントなどソースの
整理、未使用コードの削除などの残件も残っている状況です。

既に公式にaarch64対応を開始しておられるかもしれませんが, 
ご興味をお持ちの方のお役に立てれば幸いです。>皆様

動作の様子:
https://www.youtube.com/watch?v=-VH_JOxVme8

ソースコード:
https://github.com/takeharukato/asp3-aarch64

現在、TOPPERSのコンテストが開催(募集)されているとお聞きしましたので, 
可能でしたら提出させていただきたいとも考えています。


以上

On 2016/07/21 8:08, Hiroaki TAKADA wrote:
> 加藤様
> Cc: 皆様
> 
> 不具合の報告,ありがとうございます。
> 
> 値取得シンボルテーブルは,ポーティングする人が記述するファイルで,
> 一般のユーザが記述するファイルではないものですから,エラー処理を
> まじめにやっていませんでした。
> 
> お送り下さった修正案を参考に修正を検討したいと思いますし(変数名
> の間違いは明らかな不具合ですね)。
> 
> 高田広章
> 名古屋大学
> 
> (16/07/20 23:59), Takeharu KATO wrote:
>> 加藤と申します。
>>
>> 初めてメールさせていただきます。
>>
>> TOPPERS/ASP3のコンフィグレータでの値取得シンボルテーブルに空行があった場合、
>> コンフィグレータが異常終了する問題(?)を検出しましたのでご報告いたします。
>>
>> つきましては、修正案を提出させていただきますので、空行を含むシンボルテーブル
>> ファイルを扱えるように修正をお願できませんでしょうか?
>>
>> 現象を確認したコンフィグレータのバージョンは, TOPPERS第3世代カーネル向け
>> Ruby版コンフィギュレータ(cfg)1.2.1になります。
>>
>> [現象]
>> コンフィグレータの値取得シンボルテーブル(arch/arm_gcc/common/core_sym.defなど)
>> に空行があった場合, カーネルのコンパイル時にコンフィグレータが以下の
>> エラーメッセージとともに異常終了します(ファイルパス中のユーザディレクトリ名
>> 部分は削除しています)。
>>
>> asp3/cfg/pass1.rb:174:in `block (2 levels) in ReadSymvalTable': undefined local variable or method `fileName' for main:Object (NameError)
>>          from /usr/share/ruby/csv.rb:1719:in `each'
>>          from cfg/pass1.rb:171:in `block in ReadSymvalTable'
>>          from cfg/pass1.rb:164:in `each'
>>          from cfg/pass1.rb:164:in `ReadSymvalTable'
>>          from cfg/pass1.rb:864:in `Pass1'
>>          from ../cfg/cfg.rb:686:in `<main>'
>> make[1]: *** [cfg1_out.timestamp] エラー 1
>>
>> [再現手順]
>> カーネルコンパイル時に以下の1), 2)の手順を実施する
>>
>> 1) arch/arm_gcc/common/core_sym.defなどの値取得シンボルテーブル中に空行を含める
>> 2) make clean; make を実行する
>>
>> [原因]
>> cfg/pass1.rb 174行目の ReadSymvalTable関数内のエラー終了処理(error_exit)呼出部分から
>> 参照する変数の名前が誤っていた。
>>
>> 誤: fileName
>> 正: symvalTableFileName
>>
>> [対処案]
>> 以下の修正により, 空行や一般的なCSVコメント行(#で開始される行)を含むシンボルテーブルを
>> 読み込んだ場合, 空行やコメント行を読み飛ばすようにする。
>>
>> 1) cfg/pass1.rb 174行目の ReadSymvalTable関数内のエラー終了処理から参照される変数名を
>>     修正
>>
>> かつ
>>
>> 2) シンボルテーブルファイルをオープンする際に, ブランク行の読み飛ばし指示とコメント行定義を
>>     付与してファイルを開くよう修正する
>>
>> [修正パッチ案]
>> 上記対処案にしたがった修正案を以下に示します。
>>
>> diff --git a/cfg/pass1.rb b/cfg/pass1.rb
>> index 141c7f5..9332b58 100644
>> --- a/cfg/pass1.rb
>> +++ b/cfg/pass1.rb
>> @@ -167,11 +167,11 @@ def ReadSymvalTable
>>         next
>>       end
>>
>> -    symvalCsv = CSV.open(symvalTableFileName)
>> +    symvalCsv = CSV.open(symvalTableFileName, {skip_blanks: true, skip_lines: /^#/})
>>       symvalCsv.each do |record|
>>         # 変数名
>>         if record[0].nil?
>> -        error_exit("invalid variable name in `#{fileName}'")
>> +        error_exit("invalid variable name in ``#{symvalTableFileName}' at line: #{$.}")
>>         end
>>
>>         symbol = {}
>>     
>>
>> 以上、ご検討いただきますようよろしくお願いいたします。
>>