[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]
Re: [MD:6474] Meadow-2.20-dev 状況報告
- X-ml-count: 6498
- Subject: Re: [MD:6474] Meadow-2.20-dev 状況報告
- From: "M.Fujii" <boochang@xxxxxxxxxxxx>
- Date: Wed, 20 Apr 2005 23:27:28 +0900 (JST)
- X-mailer: Mew version 4.1 on Emacs 22.0.50 / Mule 5.0 (SAKAKI)
藤井です。
CVS HEAD への Sync が落ちついた段階で申し訳ないですが、Cygwin 環境向け
の変更を commit しました。
From: MIYOSHI Masanori <miyoshi@xxxxxxxxxxx>
Subject: [MD:6474] Meadow-2.20-dev 状況報告
Date: Tue, 12 Apr 2005 06:56:46 +0900
Message-ID: <u8y3p2d0h.wl%miyoshi@xxxxxxxxxxx>
> o lisp.h の cygwin 用のコードにまだマージしていない部分がある。
> #ifdef USE_LSB_TAG 〜#endif の間の XTYPE や XINT 等。
> よく分からないエラーが生じる。
この部分のマージを行ないました。
確かに良く分からないエラーがかなりでてきました。
暫定的な対応を含む対応が幾つか必要でしたので報告します。
まず、USE_LSB_TAG が定義されている状態では、Lisp_Object の下位 3bit を
オブジェクト種別のために使用します。そのためポインタの下位 3bit が 0、
つまりアドレスが 8 の倍数であることが求められます。このため、XTYPE や
XINT の定義を CVS HEAD の定義に変更すると、アライメントの問題が発生しま
す。
このため、以下の対応を行ないました。
(1) ビルトイン関数(Lisp_Subr)が 8 バイトアライメントされないので DEFUN
の定義も一部 CVS HEAD に Sync しました。(DECL_ALIGN マクロを適用し
ています)(lisp.h)
(2) Lisp_Cons や Lisp_Float は配列で確保されるので、これらのサイズが 8
の倍数でない状態ではアライメントの問題が発生します。
本来は上記オブジェクトのサイズ 8 バイトなので問題ないはずなのですが、以
下の対応で 現時点では 12 バイトになっているため問題が生じています。
> o Lisp_Float と Lisp_Cons に GC 用のマークビットを仮に追加
> (lisp.h)。pdump の実装を容易にするため。これらの両オブジェクトの
> マークビットは下記のようにオブジェクトの外部に移動された。この変
> 更に、pdumper を対応させるのは面倒(というかよく分からん)だったの
> で、このように仮に対処。
現在はそれぞれのサイズが 16 バイトになるようにして対応しました。(lisp.h)
# この対応は、上記仮の対処がなくなれば同時に必要なくなります。
(3) XINT が間違って使用されていると思われる箇所があったので、修正しました。
(w32proc.c)
# 従来は XINT と make_number の評価結果が一緒だったので問題が表面化しま
# せんでした。
以下は portable dumper に関連する対応です。
上記 8 バイトアライメントの問題は portable dumper の生成するダンプファ
イルにも影響が及ぼします。
(4) PDUMP_OFFSET が 8 の倍数でないので、オフセット値の加減算の過程でア
ドレスが 8 の倍数でなくなります。PDUMP_OFFSET の値を 8 の倍数に変更
しました。(alloc.c)
# PDUMP_OFFSET の値に制約はないと判断したので、勝手に変更してますが、
# ちょっと不安です。
(5) ダンプファイルに書き込む各オブジェクトのサイズが 8 の倍数でないと、
結果としてアドレスが 8 の倍数でなくなります。
以下のマクロを修正して、サイズが 8 の倍数になるよう補正しました。
(alloc.c)
PDUMP_LISP_STRING_DUMP_SIZE
PDUMP_VECTORLIKE_SIZE
PDUMP_LISP_HASH_TABLE_SIZE
また、以下の構造体にダミーメンバを挿入してサイズが 8 の倍数になるよ
う修正しました。(lisp.h)
Lisp_Buffer_Local_Value, Lisp_Overlay, Lisp_Marker
これらの修正については、コード変更量が小さくなるよう暫定的な修正に
なっています。このあたりは後で見直したいと考えています。
いろいろ修正していますが、VC でビルドする場合は、(1)、(3) の修正のみが
有効になります。また、(1)、(3) の修正は VC でビルドした場合には実質的に
何の変化も及ぼしません。
以上です。
--
藤井 正行 / Masayuki FUJII ( boochang@xxxxxxxxxxxx )