今週やったこと

今週やったこと

  • LLVMのmerge
  • dalmoreにこっそりripgrepとfdをいれた
  • LLVMでのCbCParse.cppのソースコード読み
    • そんな出来てない
  • Rakuの同人誌書く作業
  • Desktopの整備
  • OS研究会どうしよう…

# LLVM

  • 70ちょいのファイルをひたすらコピペする作業をした
  • clang/lib/Parse/ParseCbC.cppCbCHelper.h以外は意外とすんなり言っている
    • ParseCbC.cppが結構たいへんそう

# ParseCbC.cpp

  • 大体の処理は環境付きgotoの手続き
  • CodeSegmentの引数処理も存在している
  • 当時の他のコードを参考にしつつ書いていたみたいだが、 バージョンアップの際にかなりAPIが変わっており変更点が多い

# 現状問題になってる箇所

# ヘッダファイルの変更

PrettyDeclStackTree.hが無い

1
2
3
/mnt/dalmore-home/one/src/CbC_llvm/clang/lib/Parse/ParseCbC.cpp:9:10: fatal error: clang/Sema/PrettyDeclStackTrace.h: No such file or directory
    9 | #include "clang/Sema/PrettyDeclStackTrace.h"
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

SemaからASTに変更されているらしい

1
2
$ fd PrettyDeclStackTrace.h
clang/include/clang/AST/PrettyDeclStackTrace.h

# setjmp関連

  • void Parser::CheckTheSjHeader()でまず死んでいる

  • setjmpをincludeしているか確認して、includeしていなかったらincludeする(トークンを発行する)

    • PP.IncludeHeaderが使用しているLLVMのAPIが存在していない(バージョンアップのタイミングで無くなった)
  • setjmp使わない方針で実装しなおすなら、この関数は治す必要がない

    • どっちの方針で行くかによって違いそう
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
/// CheckTheSjHeader - Check whether setjmp.h has been already included or not.
/// If not, include it.
void Parser::CheckTheSjHeader(){
  SourceLocation Loc = Tok.getLocation();
  LookupResult R(Actions, CreateIdentifierInfo("setjmp", Loc), Loc, Actions.LookupOrdinaryName, Actions.ForVisibleRedeclaration);
  if (!Actions.LookupName(R, getCurScope())){ // look up the setjmp
    if (PP.IncludeHeader(Tok, "setjmp.h"))
      ConsumeToken();
  }
}

# 他多数…

  • 地道になおしていくしかない…
  • 変更前の最後のchangesetが146なので、これを指定してupdateしたllvmと見比べつつ治す

# dalmore

ripgrep(rg)とfdをいれました

  • わりと趣味ですが…

# ripgrep

Rustで書かれている早いgrep

grepみたいに使えるが、コマンド自体が再帰的に検索する

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
$rg CbC -g '*.h' -g '*.cpp'
llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp
1269:#ifndef noCbC

llvm/lib/Target/Hexagon/HexagonTargetObjectFile.cpp
333:#ifndef noCbC

llvm/lib/Target/XCore/XCoreISelLowering.cpp
1887:#ifndef noCbC

llvm/lib/Transforms/IPO/PassManagerBuilder.cpp
288:#ifndef noCbC
299:#ifndef noCbC

# fd

Rustで書かれている早いfind

1
2
3
4
$fd CbC
crdocs/CbC on LLVM.mm
clang/lib/Parse/CbCHelper.h
clang/lib/Parse/ParseCbC.cpp

# OS研究会

  • XV6の話で出す? 
    • 去年の坂本くんはみつきさんのreadの話
    • 一応優さんのページングのやつも出てはいる
  • 今回の内容
    • Interface追加した
      • これは部分的に出来ている
    • モデル検査 or Agdaでの検証…? (間に合う?)
Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy