2014/10/28(火)glibcのビルド

逆アセンブルしてもソースコード中の関数をみても一致しない。
なぜだろうか・・・、ということで少し探ってみた時のメモ。
解決に至っていないので、そのものズバリが欲しい人は回れ右でお願いいたします・・・。
情報提供、誤り指摘はありがたく頂戴させていただきます。

ビルドされたログを見る

ct-ngにビルドしてもらった時のログから、1ファイルのコマンドラインを引っ張ってみる。
[ALL  ] 
( echo '#define SYSCALL_NAME close';
	echo '#define SYSCALL_NARGS 1';
	echo '#define SYSCALL_SYMBOL __libc_close';
	echo '#define SYSCALL_CANCELLABLE 1';
	echo '#include <syscall-template.S>';
	echo 'weak_alias (__libc_close, __close)';
	echo 'libc_hidden_weak (__close)';
	echo 'weak_alias (__libc_close, close)';
	echo 'libc_hidden_weak (close)';
	) \
 | arm-linaro-linux-gnueabi-gcc -c 
 -I../include 
-I/PATH/TO/MYDIR/_build/arm-linaro-linux-gnueabi/build/build-libc-final/io 
-I/PATH/TO/MYDIR/_build/arm-linaro-linux-gnueabi/build/build-libc-final 
-I../ports/sysdeps/arm/elf 
-I../ports/sysdeps/unix/sysv/linux/arm/eabi/nptl 
-I../ports/sysdeps/unix/sysv/linux/arm/eabi 
-I../ports/sysdeps/unix/sysv/linux/arm/nptl 
-I../ports/sysdeps/unix/sysv/linux/arm 
-I../nptl/sysdeps/unix/sysv/linux 
-I../nptl/sysdeps/pthread 
-I../sysdeps/pthread 
-I../ports/sysdeps/unix/sysv/linux 
-I../sysdeps/unix/sysv/linux 
-I../sysdeps/gnu 
-I../sysdeps/unix/common 
-I../sysdeps/unix/mman 
-I../sysdeps/unix/inet 
-I../nptl/sysdeps/unix/sysv 
-I../ports/sysdeps/unix/sysv 
-I../sysdeps/unix/sysv 
-I../ports/sysdeps/unix/arm 
-I../nptl/sysdeps/unix 
-I../ports/sysdeps/unix 
-I../sysdeps/unix 
-I../sysdeps/posix 
-I../ports/sysdeps/arm/eabi 
-I../ports/sysdeps/arm/nptl 
-I../ports/sysdeps/arm 
-I../sysdeps/wordsize-32 
-I../sysdeps/ieee754/flt-32 
-I../sysdeps/ieee754/dbl-64 
-I../sysdeps/ieee754 
-I../sysdeps/generic/elf 
-I../sysdeps/generic 
-I../nptl 
-I../ports  
-I.. 
-I../libio 
-I. -nostdinc
 -isystem /PATH/TO/MYDIR/_build/arm-linaro-linux-gnueabi/buildtools/lib/gcc/arm-linaro-linux-gnueabi/4.7.4/include
 -isystem /PATH/TO/MYDIR/_build/arm-linaro-linux-gnueabi/buildtools/lib/gcc/arm-linaro-linux-gnueabi/4.7.4/include-fixed
 -isystem /opt/export/V980_cam/repo/_master_m8m/hosttool/arm-linaro-linux-gnueabi/arm-linaro-linux-gnueabi/sysroot/usr/include
 -D_LIBC_REENTRANT
 -include ../include/libc-symbols.h
 -DASSEMBLER
   -Wa,--noexecstack  
 -o /PATH/TO/MYDIR/_build/arm-linaro-linux-gnueabi/build/build-libc-final/io/close.o
 -x assembler-with-cpp -
 -MD
 -MP
 -MF /PATH/TO/MYDIR/_build/arm-linaro-linux-gnueabi/build/build-libc-final/io/close.o.dt
 -MT
 /PATH/TO/MYDIR/_build/arm-linaro-linux-gnueabi/build/build-libc-final/io/close.o
ソースコードだけ見ててもアカンやつや...
というかむしろソースコードないぞおい.
echoコマンドで現存するシステムコールはソースコードを生成してコンパイルしちゃうのかなぁ.
えぐいなぁ...

glibcじゃなくなるけど, eglibcの場合は 以下のソースをincludeして コードが生成されちゃう模様.
src/eglibc-2_13/sysdeps/unix/syscall-template.S
src/eglibc-2_13/ports/sysdeps/unix/sysv/linux/arm/nptl/sysdep-cancel.h
※nptl/cancel可能を前提として.
OK キャンセル 確認 その他