2005年11月9日 (水曜日)

08:42:02 # Life x86_64でのアッセンブリ出力を見てみる. hello worldと出力して終了するだけのCのプログラムに対して gccが出力するアッセンブリコードを見てみた. rspについてsubq/addqをしているのは,main()の暗黙のintパラメータのためのスタックを 確保しているようにも思えるし,ABIの要求であるようにも思える. movlでポインタをedi(32-bitレジスタ)に代入しているのは32-bit命令で実行している. eax=0と設定するのも,32-bitのxorlで実行している. 上位32-bitはどうなるのだろうか,という疑問については, CPUのマニュアルを見ることが必要になるのだろう. 32-bit xor は上位をZEROにするらしい

.LC0:
        .string "Hello world"
        .text
        .p2align 4,,15
main:
.LFB12:
        subq    $8, %rsp
.LCFI0:
        movl    $.LC0, %edi
        call    puts
        xorl    %eax, %eax
        addq    $8, %rsp
        ret
	

20:24:00 # Life amd64の今日のgcjを動かそうとして,失敗した. 4.0.3.jarしかないのに,4.0.2.jarを探しにいっているから. amd64だけ同期がとれていないのだろうか.libgcj-commonは4.0.2-3だが, gcj-4.0は4.0.2-2. とりあえず,回避方法としては, CLASSPATH=/usr/share/java/libgcj-4.0.jar make checkのようにして環境変数で指定してあげること.

$ gcc -v -o /tmp/a.o tests/javatest.java
Using built-in specs.
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --enable-languages=c,c++,java,f95,objc,ada,treelang --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --program-suffix=-4.0 --enable-__cxa_atexit --enable-libstdcxx-allocator=mt --enable-clocale=gnu --enable-libstdcxx-debug --enable-java-gc=boehm --enable-java-awt=gtk-default --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-4.0-1.4.2.0/jre --enable-mpfr --disable-werror --enable-checking=release x86_64-linux-gnu
Thread model: posix
gcc version 4.0.2 (Debian 4.0.2-2)
 /usr/lib/gcc/x86_64-linux-gnu/4.0.2/jc1 tests/javatest.java -quiet -dumpbase javatest.java -mtune=k8 -auxbase javatest -version -o /tmp/ccmkYtQL.s
GNU Java version 4.0.2 (Debian 4.0.2-2) (x86_64-linux-gnu)
        compiled by GNU C version 4.0.2 (Debian 4.0.2-2).
GGC heuristics: --param ggc-min-expand=94 --param ggc-min-heapsize=120304
Class path starts here:
    ./
    /usr/share/java/libgcj-4.0.2.jar/ (system) (zip)
tests/javatest.java:0: error: Can't find default package 'java.lang'. Check the CLASSPATH environment variable and the access to the archives
	

22:39:20 # Life binfmtcを拡張して,evalを追加しようと思っていたのだが, 全く同じような実装をやられてしまった. satoruさんのblog. 個人的にはこっち方面が楽しくてたまらん. CSPは見てびっくり. やっちゃいけなさそうな雰囲気をかもしだしているところに踏み出しているところが, binfmtcを越えている感じがしてたまらないですな. 役にたつかたたないかといわれると役にたたないぎりぎりの線を保っているのが素晴らしい.

Junichi Uekawa

$Id: dancer-diary.el,v 1.89 2005/05/12 11:19:14 dancer Exp $