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

Takeharu KATO takeharu1219 @ ybb.ne.jp
2016年 8月 1日 (月) 22:09:39 JST


高田先生

加藤です。

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

素早いご対応ありがとうございました。

次期カーネルリリースを楽しみにしております。

以上
> 先日ご指摘いただいた件,ほぼご提案通り(エラーメッセージの出し方を
> 少し修正しましたが),取り込ませていただきました。
> 
> カーネルの次のリリース時に同梱する形でリリースさせていただく予定で
> す。
> 
> # TOPPERSプロジェクト会員は,svnから取りだしてもらうことも可能です。
> 
> あらためてご指摘にお礼申し上げます。
> 
> 高田広章
> 名古屋大学
> 
> On 2016/07/22 0:07, Takeharu KATO wrote:
>> 高田先生
>> 皆様
>>
>> 加藤です。
>>
>> お世話になっております。
>>
>> 修正の御検討いただけるとのことありがとうございます。
>>
>>> 値取得シンボルテーブルは,ポーティングする人が記述するファイルで,
>> そうですね。
>>
>> 実は, 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 = {}
>>>>
>>>>
>>>> 以上、ご検討いただきますようよろしくお願いいたします。
>>>>
>>