[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]

Re: [MD:6474] Meadow-2.20-dev 状況報告



藤井です。

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 )