webrick/httpproxyのだいたいの流れ
日を改めるごとに忘れて1から読み始めてるので、メモ。
- webrick/server GenericServer
- #start -> #start_thread -> #run(abstract*1 )
- webrick/httpserver HTTPServer < GenericServer
- #run -> #service(overrided)
- webrick/httpproxy HTTPProxyServer < HTTPServer
- #service -> #proxy_service -> #do_(GET|POST..) -> #perform_proxy_request->
- (#setup_proxy_header ; Net::HTTP.start -> yield*2 -> Net::HTTP#request)
終わり。
オリジナルファイルと別名でtar archive作るとき
./dir/hogeというファイルがあって、これをtarで固める。
% find dir dir dir/hoge % tar zcf out.tgz dir % tar tf out.tgz dir/ dir/hoge
(あまりないかもしれないけど)このhogeを、そのままの名前でなくて別名でアーカイブしたいとき。
一時的に、直接hogeをリネームしてもいいんだけど、いろんな理由でリネームをしたくない時がある。
そんなとき
% mkdir sym % cd sym && ln -s ../dir/* . % mv hoge fuga % cd .. % tar zchf out.tgz sym % rm -r sym % tar zxf out.tgz % cd sym && ls -l | cut -d' ' -f1 合計 -rw-r--r--
という感じ。
要は別ディレクトリから元ファイルにシンボリックリンク張って、そのリンクのファイル名を変えよう、ということ。
だけど、そのままアーカイブするとリンク情報がそのままアーカイブされてしまうので、tarのオプションに'-h'(--dereference)を付けてシンボリックリンクを辿らせる。
もちろん元々別にシンボリックリンクをアーカイブしたかったのだったらできない。ハードリンクでも張って--hard-dereference付けてもよいけれど。
gccでinline assemblyしたとき
インラインアセンブラ - falcon071011.log
http://falcon071011.com/2013/10/20/inline-assembler/
にて提起されたことについて。
エラーに出ているような行はインラインアセンブラ中に見当たらないし、書いたとこ以外でエラーしてると見える。
一応試してみたが、
__asm__ (".intel_syntax noprefix");
で全く同じエラーが出た。(movlっておいしいの?)
エラーメッセージから/tmp以下にランダムな名前でアセンブラファイルを作り、アセンブルしていることが読み取れる。
実際に読んでみると、
$ cat /tmp/cc2jgZsM.s .file "a.c" .text .globl main .type main, @function main: .LFB0: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 #APP # 2 "a.c" 1 .intel_syntax noprefix # 0 "" 2 #NO_APP movl $0, %eax popq %rbp .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE0: .size main, .-main .ident "GCC: (GNU) 4.8.1 20130725 (prerelease)" .section .note.GNU-stack,"",@progbits
そんな気はしていたが、インラインアセンブラは型にはめているだけ。
で、オプションで.intel_syntaxとかつけちゃっているから、はまっている型の部分でエラーが出るよね、ということ。
ちなみに -masm=intelをつけると
.file "a.c" .intel_syntax noprefix .text .globl main .type main, @function main: .LFB0: .cfi_startproc push rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 mov rbp, rsp .cfi_def_cfa_register 6 #APP # 2 "a.c" 1 .intel_syntax noprefix # 0 "" 2 #NO_APP mov eax, 0 pop rbp .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE0: .size main, .-main .ident "GCC: (GNU) 4.8.1 20130725 (prerelease)" .section .note.GNU-stack,"",@progbits
型にちゃんと.intel_syntaxがついているので、わざわざ書く必要はないのかなという感じ。
明示的に示す必要性があるのかないのかはしらないけど。
素直に-masm=intelをつけよう。
追記
とおもったけどよく考えたら、エラーが出ているのは.intel_syntaxの直後で、それ以前のAT&Tのとこではエラーが出ていない。
ということは、syntaxのディレクティブは途中で変更可能ということ。
すなわち、
__asm__ ( ".intel_syntax noprefix;" "mov eax, 0;" ".att_syntax;" )
で-masmなしでいけた。