[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[plamo:06918] Re: gcl



 山内です.

  gclの件ですが,3.のAthlonマシンで一応,動くようになり
ましたので,報告します.

  NULL_OR_ON_C_STACK(x)というマクロは,要はxのアドレス
がNULL or STACKにあるかヒープにあるかを知るためのものだ
ったようです(実際,私もそのような関数があればいいなと思っ
たことがある).gclではどうやら x >= 0x80000000 でスタッ
クにあるとしていたっぽくて,これが問題のようです.
 3.のAthlonマシンでこんな簡単なソース

#include <stdio.h>
int main()
{
    int i ;
    printf("%lx\n",(long)&i) ;
    return(0) ;
}

  を走らせてみると,
7ffffa54
  という結果が帰ってきます.なんと,スタックは↑のアドレ
スの範囲にはありません.
  Linux Kernel Hackers' Guide の
http://khg.redhat.com/HyperNews/get/memory/linuxmm.html
によると,

A user process' view of memory

 0xc0000000
           The invisible kernel
                           reserved
           initial stack
           room for stack growth
                           4 pages
 0x60000000
           shared libraries
 brk
           unused
           malloc memory
 end_data
           uninitialized data
 end_code
           initialized data
 0x00000000
           text

  となっており,これが正しいなら,スタックとなる可能性の
ある領域は,x >= 0x60000000 となるはずですよね?
 そこで,h/386-linux.h の最後に,

#define NULL_OR_ON_C_STACK(x) ( (x)==NULL || (unsigned long)(x) >= 0x60000000 )

  をつけてみました.これでconfigure,make するととりあえ
ず動作しているのですが,これで本当に正しいのかどうか,不
安です.というか,たぶん本来はこんなマクロや関数に頼って
ソースを書くのは御法度なんでしょうね...

 それと,3.のAthlonマシンと4.のK6-2マシンとの違いで,1
つ気づいた事があります.3.ではカーネルのサポートするメモ
リを2GBにしていたのに対し,4.では1GBにしていた事です.
2GBのカーネルと1GBのそれとでは,ユーザメモリの扱いが異
なっているのかなー,だから,4.では動いたのかなーとか推測
しております.Plamo2.0のデフォルトのカーネルは2GBなんで
したっけ?

------                                           ------
  Chisato Yamauchi
    Mail: cyamauch@phyas.aichi-edu.ac.jp
          cyamauch@hst.phyas.aichi-edu.ac.jp
    URL:  http://phe.phyas.aichi-edu.ac.jp/~cyamauch/
------                                           ------

Follow-Ups
[plamo:06929] Re: gcl, Seiji Fukagawa

[検索ページ] [メール一覧]
Plamo ML 公開システム