(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 = {}
>>
>>
>> 以上、ご検討いただきますようよろしくお願いいたします。
>>