[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
gcc-2.96
取り残されるとコワいので egcs-20000508 を試してみました。
カーネルと libc を作ってみたところ、どうやらそれなりに
まともにできているようです。ただ ld にバグがあってちゃんと
リンクできません。以下のパッチでうまく行くようになります。
Index: gnu/dist/ld/ldlang.c
*** ldlang.c~ Wed Feb 3 21:15:28 1999
--- ldlang.c Sun May 14 02:05:38 2000
***************
*** 2834,2843 ****
/* Change the symbol from common to defined. */
h->type = bfd_link_hash_defined;
h->u.def.section = section;
! h->u.def.value = section->_raw_size;
/* Increase the size of the section. */
! section->_raw_size += size;
/* Make sure the section is allocated in memory, and make sure that
it is no longer a common section. */
--- 2834,2843 ----
/* Change the symbol from common to defined. */
h->type = bfd_link_hash_defined;
h->u.def.section = section;
! h->u.def.value = section->_cooked_size;
/* Increase the size of the section. */
! section->_cooked_size += size;
/* Make sure the section is allocated in memory, and make sure that
it is no longer a common section. */
# binutils-2.9.5.0.41 と比較してみつけたのだけど、何が変わるの
# か理解していません。誰か教えて。:-)
gcc 側で、-msdata=none してもこの問題を回避できるようです。
どちらかの対応をしていないと common なシンボルの値が重複して
リンクされます。最初にカーネルを作ったときは curpm と cn_tab の
値を同じにされてしまって、consinit で死んでました。