[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 で死んでました。