iwamatsu@$ cpp -v Using built-in specs. Target: sh4-linux-gnu Configured with: ../src/configure -v --with-pkgversion='Debian 4.4.2-6+sh4' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.4 --program-suffix=-4.4 --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --with-multilib-list=m4,m4-nofpu --with-cpu=sh4 --enable-checking=release --build=sh4-linux-gnu --host=sh4-linux-gnu --target=sh4-linux-gnu Thread model: posix gcc version 4.4.2 (Debian 4.4.2-6+sh4) COLLECT_GCC_OPTIONS='-E' '-v' /usr/lib/gcc/sh4-linux-gnu/4.4.2/cc1 -E -quiet -v - ignoring nonexistent directory "/usr/lib/gcc/sh4-linux-gnu/4.4.2/../../../../sh4-linux-gnu/include" #include "..." search starts here: #include <...> search starts here: /usr/local/include /usr/lib/gcc/sh4-linux-gnu/4.4.2/include /usr/lib/gcc/sh4-linux-gnu/4.4.2/include-fixed /usr/include End of search list.multi-arch対応後:
iwamatsu@$ cpp -v Using built-in specs. Target: sh4-linux-gnu Configured with: ../src/configure -v --with-pkgversion='Debian 4.4.2-8+sh4.1' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.4 --program-suffix=-4.4 --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --with-multilib-list=m4,m4-nofpu --with-cpu=sh4 --enable-checking=release --build=sh4-linux-gnu --host=sh4-linux-gnu --target=sh4-linux-gnu Thread model: posix gcc version 4.4.2 (Debian 4.4.2-8+sh4.1) COLLECT_GCC_OPTIONS='-E' '-v' /usr/lib/gcc/sh4-linux-gnu/4.4.2/cc1 -E -quiet -v - ignoring nonexistent directory "/usr/local/include/sh4-linux-gnu" ignoring nonexistent directory "/usr/lib/gcc/sh4-linux-gnu/4.4.2/../../../../sh4-linux-gnu/include" #include "..." search starts here: #include <...> search starts here: /usr/local/include /usr/lib/gcc/sh4-linux-gnu/4.4.2/include /usr/lib/gcc/sh4-linux-gnu/4.4.2/include-fixed /usr/include/sh4-linux-gnu /usr/include End of search list./usr/include/sh4-linux-gnu がサーチパスに入っていることがわかります。 ちなみに -m4-nofpu をつけると
iwamatsu@$ cpp -v -m4-nofpu Using built-in specs. Target: sh4-linux-gnu Configured with: ../src/configure -v --with-pkgversion='Debian 4.4.2-8+sh4.1' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.4 --program-suffix=-4.4 --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --with-multilib-list=m4,m4-nofpu --with-cpu=sh4 --enable-checking=release --build=sh4-linux-gnu --host=sh4-linux-gnu --target=sh4-linux-gnu Thread model: posix gcc version 4.4.2 (Debian 4.4.2-8+sh4.1) COLLECT_GCC_OPTIONS='-E' '-v' '-m4-nofpu' /usr/lib/gcc/sh4-linux-gnu/4.4.2/cc1 -E -quiet -v -imultilib m4-nofpu - -m4-nofpu ignoring nonexistent directory "/usr/local/include/sh4_nofpu-linux-gnu" ignoring nonexistent directory "/usr/lib/gcc/sh4-linux-gnu/4.4.2/../../../../sh4-linux-gnu/include" ignoring nonexistent directory "/usr/include/sh4_nofpu-linux-gnu" #include "..." search starts here: #include <...> search starts here: /usr/local/include /usr/lib/gcc/sh4-linux-gnu/4.4.2/include /usr/lib/gcc/sh4-linux-gnu/4.4.2/include-fixed /usr/include End of search list.となります。m4-nofpu はカーネルコンパイルのためだけに入れているので、 /usr/include/sh4_nofpu-linux-gnu はいらないのです。
やっと90% 行ったぜ!自分の書いた適当プログラムの結果によると、あとはghc6とlibgnustep-guiがおおきな壁のようです。前者はブートストラップしないといけないので、ぼちぼちと。後者はFTBFSで止まっています。
$ cat f.c #includegcc の場合。これは良いパターン。int main(void) { _FPU_SETCW(0); return 0; }
$ gcc -o f f.c -Wl,-t /usr/bin/ld: mode shlelf_linux /usr/lib/gcc/sh4-linux-gnu/4.4.2/../../../crt1.o /usr/lib/gcc/sh4-linux-gnu/4.4.2/../../../crti.o /usr/lib/gcc/sh4-linux-gnu/4.4.2/crtbegin.o /tmp/ccQQKhOh.o (/usr/lib/gcc/sh4-linux-gnu/4.4.2/libgcc.a)_set_fpscr.o libgcc_s.so.1 (/usr/lib/gcc/sh4-linux-gnu/4.4.2/libgcc_s.so.1) /lib/libc.so.6 (/usr/lib/libc_nonshared.a)elf-init.oS /lib/ld-linux.so.2 libgcc_s.so.1 (/usr/lib/gcc/sh4-linux-gnu/4.4.2/libgcc_s.so.1) /usr/lib/gcc/sh4-linux-gnu/4.4.2/crtend.o /usr/lib/gcc/sh4-linux-gnu/4.4.2/../../../crtn.og++ の場合。
g++ -o f f.c -Wl,-t /usr/bin/ld: mode shlelf_linux /usr/lib/gcc/sh4-linux-gnu/4.4.2/../../../crt1.o /usr/lib/gcc/sh4-linux-gnu/4.4.2/../../../crti.o /usr/lib/gcc/sh4-linux-gnu/4.4.2/crtbegin.o /tmp/ccZX5ufD.o -lstdc++ (/usr/lib/gcc/sh4-linux-gnu/4.4.2/libstdc++.so) -lm (/usr/lib/gcc/sh4-linux-gnu/4.4.2/../../../libm.so) libgcc_s.so.1 (/usr/lib/gcc/sh4-linux-gnu/4.4.2/libgcc_s.so.1) /lib/libc.so.6 (/usr/lib/libc_nonshared.a)elf-init.oS /lib/ld-linux.so.2 libgcc_s.so.1 (/usr/lib/gcc/sh4-linux-gnu/4.4.2/libgcc_s.so.1) /usr/lib/gcc/sh4-linux-gnu/4.4.2/crtend.o /usr/lib/gcc/sh4-linux-gnu/4.4.2/../../../crtn.o /tmp/ccZX5ufD.o: In function `main': f.c:(.text+0x24): undefined reference to `__set_fpscr(unsigned long)' /usr/bin/ld: link errors found, deleting executable `f' collect2: ld returned 1 exit statusg++ の場合はlibgcc.a を見ないで、libgcc_s.so.1を見に行っている。うーむ。
[....]
/* Macros for accessing the hardware control word. */
#define _FPU_GETCW(cw) __asm__ ("sts fpscr,%0" : "=r" (cw))
#if defined __GNUC__
extern void __set_fpscr(unsigned long);
#define _FPU_SETCW(cw) __set_fpscr ((cw))
#else
#define _FPU_SETCW(cw) __asm__ ("lds %0,fpscr" : : "r" (cw))
#endif
[....]
んで、悩む。C++ のコードからCの関数を呼んでいることに気がつく。
すぐに気がつけよ。<俺
--- a/sysdeps/sh/sh4/fpu/fpu_control.h 2006-08-17 10:18:26.000000000 +0900
+++ b/sysdeps/sh/sh4/fpu/fpu_control.h 2010-01-15 15:31:04.000000000 +0900
@@ -45,6 +45,14 @@
#define _FPU_GETCW(cw) __asm__ ("sts fpscr,%0" : "=r" (cw))
#if defined __GNUC__
+/* Allow the use in C++ code. */
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern void __set_fpscr(unsigned long);
+#ifdef __cplusplus
+}
+#endif /* C++ */
#define _FPU_SETCW(cw) __set_fpscr ((cw))
#else
#define _FPU_SETCW(cw) __asm__ ("lds %0,fpscr" : : "r" (cw))
こんな感じで。glibcで提供されるヘッダファイル内でextern "C"を使うのはどうかと思ったけど、regex.h でもやっているからいいよね。
今週末に行われる Debian BSP のために Try WiMaxサービスを利用してみることにした。
ビックカメラ等の店頭でも申し込みができるとのこと。ちょうど立川に用事があったのでビックカメラ立川店に行って申し込みをした。
後日郵送なのかな?と思ったらそのまま実機を渡された。ちょっとびっくり。あと、使い方とかも聞かれなかった。そういうもんなのかな。今住んでいるところではWiMaxサポートエリアではない(笑のでまだどんなもんなのか試してない。あと、借りている端末はまだLinuxのドライバがないようだ。
$ cat hoge.commands Uploader: Nobuhiro Iwamatsu詳細は UploadQueue/READMEに書いてあります。 ちなみにDELAYED Uploadされたパッケージはhttp://ftp-master.debian.org/deferred/にあります。Commands: cancel hoge-0.0.0-1_i386.changes
_ free adult sites [dvf, vgvjg ze ylsxogpq c lrfcw. djoc vcescazt c aj w! zhs ..]