Gauche > Archives > 2009/11/04

2009/11/04 00:00:14 UTCshiro
#
このfixは古いNetBSDでも有効ですか?
2009/11/04 00:02:01 UTCenami
#
-current しかだめですね。
#
だからバージョンみて切り替えないと。
#
revision 1.125
date: 2009/09/24 21:21:34;  author: pooka;  state: Exp;  lines: +43 -2
Add Solarisa-like dlinfo() interface to the ELF dynamic linker.
Implement RTLD_DI_LINKMAP which returns a pointer to the linkmap
chain at the given object.  Other Solaris queries are currently
unimplemented.
2009/11/04 00:02:58 UTCshiro
#
それも入れられます? 入ったらapplyします。
2009/11/04 00:06:14 UTCenami
#
NetBSD 5.99.18 が 9/18 で 5.99.19 が 9/27 だから 5.99.19 以上にすればいいかな
2009/11/04 00:13:54 UTCenami
#
% diff -u gc/dyn_load.c.orig gc/dyn_load.c 
--- gc/dyn_load.c.orig  2009-11-04 17:36:21.000000000 +0900
+++ gc/dyn_load.c       2009-11-04 18:09:20.000000000 +0900
@@ -78,6 +78,8 @@
 #endif
 
 #if defined(NETBSD)
+#   include <sys/param.h>
+#   include <dlfcn.h>
 #   include <machine/elf_machdep.h>
 #   define ELFSIZE ARCH_ELFSIZE
 #endif
@@ -499,6 +501,7 @@
         return(0);
     }
     if( cachedResult == 0 ) {
+#if !defined(NETBSD) || !__NetBSD_Prereq__(5,99,19)
         int tag;
         for( dp = _DYNAMIC; (tag = dp->d_tag) != 0; dp++ ) {
             if( tag == DT_DEBUG ) {
@@ -508,6 +511,15 @@
                 break;
             }
         }
+#else
+        struct link_map *lm = NULL;
+        int rv = dlinfo(RTLD_SELF, RTLD_DI_LINKMAP, &lm); 
+        if (rv != 0)
+                return (0);
+        if (lm == NULL)
+                return (0);
+        cachedResult = lm;
+#endif 
     }
     return cachedResult;
 }
#
こうかな
2009/11/04 00:20:47 UTCenami
#
0.9 rc1 でも gosh -ftest は動いて build すすんでる
2009/11/04 00:25:51 UTCenami
#
Total:  9943 tests,  9943 passed,     0 failed,     0 aborted.
Gauche scheme interpreter, version 0.9_rc1 [utf-8,pthreads]
#
NetBSD/i386 5.99.21
2009/11/04 00:31:52 UTCenami
#
九月頭から 9/24 以前に2.19 に switch した port は、その間に build した環境では動かないけど、そこは -current だからということで。
2009/11/04 00:43:43 UTCenami
#
afk
2009/11/04 01:17:50 UTCshiro
#
むー、__NetBSD_Prereq__のところがLinuxだと通りませんね。
#
__NetBSD_Prereq__が完全に#if defined(NETBSD)...#endifの中に入るようにすれば通るけど。__NetBSD_Prereq__って多分#ifより先に__NetBSD_Prereq__マクロが展開されることを意図してるんだろうけど、cppの規格内でそれってできましたっけ。
#
ポータブルコードでは全部展開してMAJORとk
#
とかMINORとか比べるようにした方がいい気がする。
2009/11/04 03:45:40 UTCenami
#
あるいは#ifndef __NetBSD_Prereq__ #define __NetBSD_Prereq__(x,y,z) 0 #endif を直前にいれるかですかね。
2009/11/04 04:14:04 UTCshiro
#
そうか、__NetBSD_Prereq___が引数つきマクロとして定義されてればパーズ可能ですね。
2009/11/04 04:24:15 UTCshiro
#
パッチ入れました。他にもi4
#
i386/glibcのスレッド絡みでgcに手が入ってるので、rc2にしてあります。今まで確認頂いたプラットフォームでももう一度確認して頂けるとありがたいです。
2009/11/04 04:33:32 UTCshiro
#
tarballも公開しました http://practical-scheme.net/vault/Gauche-0.9_rc2.tgz
2009/11/04 04:33:40 UTC(び)
#
Mac OS X 10.6.1(10B504) Intel(i386-apple-darwin) OKっす
2009/11/04 04:47:29 UTC(び)
#
NetBSD 5 (x86_64)もOKですね
2009/11/04 04:53:51 UTC(び)
#
dyn_load.c:521: error: `RTLD_DI_LINKMAP' undeclared (first use in this function)
dyn_load.c:521: error: (Each undeclared identifier is reported only once gcc -DPACKAGE_NAME=\"gc\" -DPACKAGE_TARNAME=\"gc\" -DPACKAGE_VERSION=\"7.1\" "-DPACKAGE_STRING=\"gc 7.1\"" -DPACKAGE_BUGREPORT=\"Hans.Boehm@hp.com\" -DPACKAGE_URL=\"\" -DGC_VERSION_MAJOR=7 -DGC_VERSION_MINOR=1 -DPACKAGE=\"gc\" -DVERSION=\"7.1\" -DGC_NETBSD_THREADS=1 -D_REENTRANT=1 -D_PTHREADS=1 -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DNO_EXECUTE_PERMISSION=1 -DALL_INTERIOR_POINTERS=1 -DGC_GCJ_SUPPORT=1 -DJAVA_FINALIZATION=1 -DATOMIC_UNCOLLECTABLE=1 -DDONT_ADD_BYTE_AT_END=1 -DLARGE_CONFIG=1 -I./include -fexceptions -I libatomic_ops/src -O6 -march=pentium4 -c alloc.c  -fPIC -DPIC -o .libs/alloc.o
#
NetBSD 3.1_STABLEだとNGです
#
boehm-gcのビルドがこけます。
2009/11/04 05:38:30 UTCshiro
#
あれ、なんでそっちの条件にいくんだろう。そこはdefined(NETBSD) && __NetBSD_Prereq__(5,99,19)でないと通らないはずなのに。
#
古すぎて__NetBSD_Prereq__が無かったとしてもそこは通らないはず…
2009/11/04 05:51:33 UTCshiro
#
もしかして、509行目の!__NetBSD_Prereq__(5,99,19)を
#
!(__NetBSD_Prereq__(5,99,19)) にしたら変わるかな。
2009/11/04 05:53:50 UTCenami
#
マクロの使い方間違えたか。指定したバージョン以下で真になるんだ。
じゃあなんで5.99.21で動いたんだろう、cleanし忘れ?
2009/11/04 05:58:18 UTCshiro
#
そしたら否定を取ればいい?
2009/11/04 05:58:36 UTCenami
#
でもそれだとnetbsd5 でも動かないはずか。
2009/11/04 06:12:45 UTCleque
#
Mac OS X 10.5.8 (9L30) i386-apple-darwin9.8.0 も make check 通りました
2009/11/04 06:17:37 UTCshiro
#
げ、__NetBSD_Prereq__って途中で意味が反転してる? http://mail-index.netbsd.org/tech-pkg/2008/10/18/msg001862.html http://cvsweb.netbsd.org/bsdweb.cgi/src/sys/sys/param.h.diff?r1=1.241&r2=1.242
2009/11/04 06:17:42 UTC_enami@twitter
#
32ビットあふれてる?
2009/11/04 06:21:07 UTCshiro
#
NetBSD-3まで対応するなら__NetBSD_Prereq__は使えないですね。自力で__NetBSD_Version__と比較する?
2009/11/04 06:44:51 UTC_enami@twitter
#
自力か、configureで dlinfo他をしらべるかでしょうか。
2009/11/04 07:32:18 UTCshiro
#
どこまで調べれば良いかがいまいち。このfixはboehm gcの方に反映させるべきだと思うんですが、その場合はNetBSDのバージョンで判断する方がよいかもしれません。
#
(反映しとかないとgc-7.2に切り替える時にregressしてしまう可能性が)
2009/11/04 07:56:08 UTCshiro
#
直接__NetBSD_Version__と比較するようにしてみました。NetBSDerな方確認お願いします。
#
rc2のtarballもすげ替えてあります。
2009/11/04 08:05:46 UTC(び)
#
Mac OS X (10.6.1)、NetBSD-5(STABLE x86_64)、NetBSD-3.1(STABLE x86_64) OKです
2009/11/04 08:08:06 UTCshiro
#
まはろー。あとはNetBSD-currentだな。
2009/11/04 08:33:11 UTCふじさわ
#
Debian lennyでもmake check OKでした。
2009/11/04 08:46:12 UTCleque
#
Mac OS X 10.5.8 (9L30) i386-apple-darwin9.8.0 も変わらず問題ありません
#
ただ、 configure 時に stderr に次のようなメッセージが出ます
#
configure: WARNING: "Explict GC_INIT() calls may be required."
rm: conftest.dSYM: is a directory
#
ググってみると conftest.dSYM の方は configure の方の問題で実害はないみたいです
2009/11/04 08:59:53 UTCleque
#
GC_INIT の方も gc の configure の普通のメッセージなのかな
2009/11/04 15:10:47 UTCnekoie
#
rc2試したら、古いslackwareの方の環境で、gcのmake時に次のエラーが出ました
#
pthread_support.c:414: error: conflicting types for 'GC_delete_thread'
pthread_support.c:393: error: previous implicit declaration of 'GC_delete_thread' was here
make[2]: *** [pthread_support.lo] Error 1
#
パッと見たところ、GC_delete_thread()関数の定義順の問題っぽかったので、コピペして定義順を変更したら上手く動くようになりました
#
古いSuSEの方では問題出てないので、やっぱりうちの環境特有っぽそうですが
2009/11/04 15:16:33 UTCnekoie
#
一応パッチにしてみました
#
http://f.tir.jp/pthread_support.diff
2009/11/04 15:27:52 UTCshiro
#
あれ、確かにGC_delete_threadは後から定義されてますね。なんでこっちでエラー出なかったんだろう。
#
とりあえず宣言だけ先につけとけば大丈夫ですが。
#
ああ、新しめのgccだとwarningになってたんですね。
2009/11/04 16:03:33 UTCnekoie
#
見てみたら、/* [SK] */のコメントのついたパッチで導入された部分でGC_delete_thread()を呼んでるから、定義よりも先に呼ばれるようになったんですね
2009/11/04 16:03:55 UTCshiro
#
そゆことです。forward declaration入れたんで今は大丈夫だと思います。
2009/11/04 16:04:11 UTCnekoie
#
なるほどです。ありがとうございます
2009/11/04 22:05:13 UTC_enami@twitter
#
金曜夜までiphone only なので誰か gauche 0.9rc2 netbsd 5.99.19 以降でテストできないかなぁ RT shiro: まはろー。あとはNetBSD-currentだな。 http://bit.ly/GOkRK
2009/11/04 23:02:30 UTC_enami@twitter
#
pkgsrc の中の人が本職か。何れにせよ pkgsrc もなおさないと。RT : shiro: どこまで調べれば良いかがいまいち。このfixはboehm gcの方に反映させるべきだと思うんですが、その場合はNetBSDのバージョンで判断する方がよい