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

[MD:3022]portable dumper for Emacs 21.1



3つめの patch です。今回の変更点は、

・Lisp_String の GC mark に関して語読していた部分を修正しました。また、
21 では large / small string の違いは string data の割り付け方法のみで、
marking の方法も同じだということが分かり、portable dumper から見て全く
同等だということが分かったので、分けずに混ぜて dump することにしました。
これによって code size が減り(以下略)

・林さんの "Attempt to split fixed-size window" は手元でも再現しました。
(僕の手元では、emacs-version の値が7桁 ("21.1.XX") の時は正常で、6桁 
("21.1.X") の時しか bug が再現しない、という悲惨な状態でした。)
林さんの patch を取り込み、同様に bitfield の初期化に関する Emacs
21.1 の bug をもう1ヶ所修正しました。(blink-cursor-mode が off だと 
cursor が表示されなくなる、というものでした。)
# 初期化忘れの bug は、いつか一度一念発起して、全部洗わないといけませんねえ

・不完全だった Lisp_Object validity checker を改訂しました。
PDUMP_DEBUG の他に PDUMP_CHECK_OBJECT_VALIDITY_ON_GC を #define すると
(src/config.h を手で書きかえる)、dump file の load 後の GC phase で 
mark_object に飛んできた Lisp_Object を片っ端から check routine に飛ば
します。heap が疑わしいと感じた場合にはこれを #define して、いろいろ
garbage-collect して assertion failure が起きないか試してみて下さい。
どこが壊れているのかは、正確には分からないのですが、少なくとも壊れてい
ることだけははっきり分かるはずです。
なおここで言う "validity" とは、Lisp_Object (の実体) が、意図した 
address 空間上に、意図した byte index で存在することを保証するものです。
中身の check まではできません。
PDUMP_DEBUG と別 symbol にしたのは、これを #define していると GC が遅
くてとても実用にならないからです。

・半田さんの advice に従い、HASH_* macro を lisp.h に copy & paste し
ました。

・Vweak_hash_tables を dump & load する code を足しました。

・気付いたものについて long -> POINTER_TYPE * の修正をしました。

1つめは17日時点からの差分、2つめは original emacs-21.1.tar.gz からの差
分です。どちらにも、[MD:3014] の林さんの patch が含まれています。それ
ぞれ -p1, -p0 で当てて下さい。


僕の手元で vc-diff が動かなかった件ですが、これは単に作業環境の vc.elc 
が CVS の keyword 展開で崩壊していた、というだけのことでした;;。やられ
た。
これで分かっていて残っている bug は、阿部さんが報告して下さった 
backtrace に関するものだけなのですが、これだけはちっとも再現できません。

--
Keiichiro Nagano

Attachment: pdump21-knagano-020317-21.diff.gz
Description: Binary data

Attachment: pdump21-knagano-020321.diff.gz
Description: Binary data