cookies.txt      .scr

ただのテキストファイルのようだ

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なしでいけた。

qtbindingsのemitが動かない話

ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux]
ruby 1.9.3p448 (2013-06-27 revision 41675) [x86_64-linux]
gem 2.1.9
gem-1.9 1.8.23 にて。

http://stackoverflow.com/questions/15583114/qtruby-emit-does-not-work
これ。

ruby2.0では動かないらしいので、ruby1.9で動かしましょうという話。
しかし実際にruby-1.9で動かしてみたら、Segmentaition Fault起こした。ふぇぇ。
rubyが(というかqtbindingsのnativeが)せぐふぉったのを見たのは初めてですね。
qtbindingsの最新版だとダメかな、とか思ってqtbindings 4.6.3.4も試したけどおんなじ。せぐふぉ。
でもemitに関係なくせぐふぉってるので、これはこれでまた別のおかしい状況です。
ちなみにせぐふぉっているのはlibqtruby4shared.soのrb_type()とかいう関数らしい。

ふぇぇ。