hns - 日記自動生成システム - Version 2.19.9

先月 2004年09月 来月
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
Namazu for hns による簡易全文検索
詳しくは 詳細指定/ヘルプを参照して下さい
検索式:

2004年09月26日() 旧暦 [n年日記]

更新: "2004/09/27 23:57:57"

#1 [NetBSD][build.sh] SHLIB_LINK 問題

8/28 の覚え。

grep SHLIB_LINK t-[s,n]*:

ttyp4:makoto@st4200 17:12:58/040926(...checkout/src)> \
find gnu/dist/gcc -type f -name 't-[s,n]*' -exec grep -7 SHLIB_LINK /dev/null '{}' \;
と入力して表示されるものを見て考えてみた。

SHLIB_LINK= の行がない時 (TNF):

行がない時には、 gnu/dist/gcc/gcc/config/t-slibgcc-elf-ver にある次の定義が生きる。
SHLIB_LINK = $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \
      -Wl,--soname=$(SHLIB_SONAME) \
      -Wl,--version-script=$(SHLIB_MAP) \
      -o $(SHLIB_NAME) @multilib_flags@ $(SHLIB_OBJS) $(SHLIB_LC) && \
      rm -f $(SHLIB_SOLINK) && \
      $(LN_S) $(SHLIB_NAME) $(SHLIB_SOLINK)
こちらは signal 11 (ただし見聞のみ)

SHLIB_LINK= の行がある時 (nandra):

SHLIB_LINK= の行がある時には、 この定義が空になり
# Disable SHLIB_LINK if shared libgcc not enabled.
という場合になる。そうして、_Unwind_GetIP 問題、つまり
libstdc++.so: undefined reference to `_Unwind_GetIP'
という問題になる。 関連記事: tech-pkg, 2004/02/29

例えば libgcc という名前は src/gnu/lib/libgcc3 の下の 次のところにある。

ttype:makoto@harry  18:10:13/040926(...lib/libgcc3)> find . -name libgcc\* -ls
  512 Sep 12 23:48 ./libgcc
53110 Sep 12 23:57 ./libgcc/obj/libgcc.a
59188 Sep 12 23:57 ./libgcc/obj/libgcc_p.a
54310 Sep 12 23:57 ./libgcc/obj/libgcc_pic.a
  512 Sep 12 23:48 ./libgcc_eh
38752 Sep 12 23:58 ./libgcc_eh/obj/libgcc_eh.a
41364 Sep 12 23:58 ./libgcc_eh/obj/libgcc_eh_p.a
33622 Sep 12 23:58 ./libgcc_eh/obj/libgcc_eh_pic.a
  512 Sep 12 23:48 ./libgcc_s
79194 Sep 12 23:58 ./libgcc_s/obj/libgcc_s_pic.a
43112 Sep 12 23:58 ./libgcc_s/obj/libgcc_s.so.1.0
 1148 Sep 12 23:58 ./libgcc_s/obj/libgcc.map
   15 Sep 12 23:58 ./libgcc_s/obj/libgcc_s.so.1 -> libgcc_s.so.1.0
   15 Sep 12 23:58 ./libgcc_s/obj/libgcc_s.so -> libgcc_s.so.1.0
この中で、件の定義は、次の中にある。
ttype:makoto@harry 18:12:19/040926(...lib/libgcc3)> nm libgcc_s/obj/libgcc_s.so.1.0 | grep -i unwind_getip
00003fe0 T _Unwind_GetIP
これは src/destdir.macppc/lib/ の下には写されていない。 src/gnu/lib/Makefile の中に次の文がある。
.if ${MKGCC} != "no"
. if ${HAVE_GCC3} == "no"
SUBDIR+= libg2c libgcc libobjc libstdc++
. else
SUBDIR+= libg2c3 libfrtbegin libgcc3 libobjc3 libsupc++ libstdc++-v3
. endif
.endif
この libgcc3 の行があるところに行くためには: MKGCC=no でなくて、HAVE_GCC3 == no でないこと。 つまり /etc/mk.conf に次のように書いておく
MKGCC=yes
HAVE_GCC3=yes
(いま読直すと、全然論理が合っていない...上の設定は初期値か..多分)
/usr/share/mk/bsd.own.mk に、次の行がある。
/usr/share/mk/bsd.own.mk:HAVE_GCC3?=    yes
つまり初期値。
libgcc_s.so.1.0 を使わずに _Unwind_GetIP 問題を解決する必要がある ..

./libgcc3/libgcc_eh/obj/libgcc_eh.a:

ttype:makoto@harry 18:56:19/040926(...gnu/lib)> nm ./libgcc3/libgcc_eh/obj/libgcc_eh.a | grep -i unwind_getip
U _Unwind_GetIP
0000239c T _Unwind_GetIP
これを使う。その方法は
  1. 二つを混ぜてしまう libgcc_eh + libgcc = libgcc
  2. gcc が二つを見るようにする
多分、本来は「最近の gcc なら二つを見るようになっている」のに、それを書戻している部分 があるのでは ? と思う。

gnu/dist/gcc/gcc/gcc.c にそれらしいコードが:

1561     /* Transform the extant libgcc_spec into one that uses the shared libgcc
1562        when given the proper command line arguments.  */
1563     while (*p)
1564       {
1565         if (in_sep && *p == '-' && strncmp (p, "-lgcc", 5) == 0)
1566           {
1567             init_gcc_specs (&obstack,
1568 #ifdef NO_SHARED_LIBGCC_MULTILIB
1569                             "-lgcc_s"
1570 #else
1571                             "-lgcc_s%M"
1572 #endif
1573                             ,
1574                             "-lgcc",
1575                             "-lgcc_eh"
1576 #ifdef USE_LIBUNWIND_EXCEPTIONS
1577                             " -lunwind"
1578 #endif
1579                             );
1580
1581             p += 5;
1582             in_sep = 0;
1583           }
1584         else if (in_sep && *p == 'l' && strncmp (p, "libgcc.a%s", 10) == 0)
1585           {
1586             /* Ug.  We don't know shared library extensions.  Hope that
1587                systems that use this form don't do shared libraries.  */
1588             init_gcc_specs (&obstack,
1589 #ifdef NO_SHARED_LIBGCC_MULTILIB
1590                             "-lgcc_s"
1591 #else
1592                             "-lgcc_s%M"
1593 #endif
1594                             ,
1595                             "libgcc.a%s",
1596                             "libgcc_eh.a%s"
1597 #ifdef USE_LIBUNWIND_EXCEPTIONS
1598                             "libunwind.a%s"
1599 #endif
1600                             );
1601             p += 10;
1602             in_sep = 0;
1603           }
-lgcc であれば、内部的に -lgcc_s や -lgcc_eh に書換えてくれる ? 1.7 (2/25/2004) で変更されている。... これを特に書戻したりはしていない ... 最初の問題を見直す:
# link grodvi/grodvi
/export/20040612/checkout/src/obj/tooldir.NetBSD-1.6ZI-powerpc/bin/powerpc--netbsd-c++ -Wl,-nostdlib -o grodvi -Wl,-rpath-link,/export/20040612/checkout/d/lib:/export/20040612/checkout/d/usr/lib -L/export/20040612/checkout/d/lib -B/export/20040612/checkout/d/usr/lib/ -B/export/20040612/checkout/d/usr/lib/ dvi.o /export/20040612/checkout/src/gnu/usr.bin/groff/src/libs/libdriver/obj/libdriver.a /export/20040612/checkout/src/gnu/usr.bin/groff/src/libs/libgroff/obj/libgroff.a -lm -L/export/20040612/checkout/d/usr/lib -L/export/20040612/checkout/d/usr/lib
/export/20040612/checkout/d/usr/lib/libstdc++.so: undefined reference to `_Unwind_GetIP'

nbmake: stopped in /export/20040612/checkout/src/gnu/usr.bin/groff/src/devices/grodvi
strings して見ると、この c++ には eh が出て来ない。-lgcc も指定していない ?
このようなものはいかがだろうか ?
cvs diff -u gnu/dist/gcc/gcc/cp/g++spec.c
Index: gnu/dist/gcc/gcc/cp/g++spec.c
===================================================================
 RCS file: /export/20040820/Repository/src/gnu/dist/gcc/gcc/cp/g++spec.c,v
retrieving revision 1.1.1.1
diff -u -u -r1.1.1.1 g++spec.c
--- gnu/dist/gcc/gcc/cp/g++spec.c       26 Sep 2004 07:18:49 -0000      1.1.1.1
+++ gnu/dist/gcc/gcc/cp/g++spec.c       26 Sep 2004 12:52:24 -0000
@@ -37,10 +37,10 @@
 #endif
 
 #ifndef LIBSTDCXX
-#define LIBSTDCXX "-lstdc++"
+#define LIBSTDCXX "-lstdc++ -lgcc -lgcc_eh"
 #endif
 #ifndef LIBSTDCXX_PROFILE
-#define LIBSTDCXX_PROFILE "-lstdc++"
+#define LIBSTDCXX_PROFILE "-lstdc++ -lgcc -lgcc_eh"
 #endif
 
 void
ttyp5:makoto@st4200  22:01:09/040926(...checkout/src)> 

cannot find -lstdc++ -lgcc:

/export/20040820/checkout/src/obj/tooldir.NetBSD-2.0G-powerpc/lib/gcc-lib/powerpc--netbsd/3.3.3/ ../../../../powerpc--netbsd/bin/ld: cannot find -lstdc++ -lgcc -lgcc_eh
collect2: ld returned 1 exit status



最近の日記
2024年05月08日
comparison on ./buildsh tools
2024年05月06日
py-setuptools (python 3.11.9)
make release took 1 hours and 10 min
qemu invocation for 10.99.10
2024年05月05日
Windows 10 version
serial connection
bc bench
2024年05月04日
Trial on 10.99.10
another version (later trial) to succeed
2024年04月29日
dkim
以上、1 日分です。
タイトル一覧
カテゴリ分類
Powered by hns-2.19.9, HyperNikkiSystem Project

Count.cgi (since 2000/02/05)