[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]
[MD:6265] Re: MSVC最適化有効時のbootstrap
- X-ml-count: 6265
- Subject: [MD:6265] Re: MSVC最適化有効時のbootstrap
- From: Keiichiro Nagano (永野圭一郎) <knagano@xxxxxxxxx>
- Date: Thu, 23 Dec 2004 05:00:05 +0900
- User-agent: Wanderlust/2.12.0 (Your Wildest Dreams-pre) SEMI/1.14.6 (Maruoka) LIMIT/1.14.9 (Domyoji) APEL/10.6 Emacs/21.3 (i386-unknown-freebsd4.9) MULE/5.0 (SAKAKI)
永野です。(随分とお久しぶりの登場になります。)
調査ありがとうございます。
まずご質問にお応えします
At Mon, 06 Dec 2004 21:32:50 +0900 (JST),
Hidefumi Fujimoto wrote:
> 実際にPDUMP_OFFSETを、
> #define PDUMP_OFFSET 10485760
> (=0xA00000)
> とすることで、最適化有りでbootstrap等一連のコンパイルと動作確認をしました。
>
> このようにPDUMP_OFFSETを大きな値にすることは問題ないでしょうか?
はい、問題ありません。load 時(通常の起動時)にいきなり随分と広い memory
空間を使っているように「見える」ようになるくらいで、実害はないはずです。
(もしかしたら、Lisp Pointer Size Max が想定よりも早く来てしまうように
なるかもしれない(? 勘違い?)ので、自分でも見てみます...)
ところで、もっと大きな問題はその過程にあると思っています
> 原因:
> 1. 問題となるのは、pdump_load時のpdump_relocate_objectsの中の下記行
> (alloc.c(Rev.3575)の7047行目:シンボルのrelocate)で、
> SUBRP(ptr->function) == TRUE の時 (Cで書かれた組み込み関数)
>
> PDUMP_RELOCATE (ptr->function, offset);
>
> 2. 最適化してコンパイルを行うと、XPNTR(ptr->function)(= Lisp_Subrのアドレス)が
> 約0x5A0000〜0x5B0000と、0x670000以上となる。(最適化なしの場合は、すべて0x670000以上)
> 0x5A0000〜0x5B0000の場合、PDUMP_RELOCATE内部で、組み込み関数なのに
> ptr->functionが変更されてしまう。
>
> 3. 実際にptr->functionが呼び出されたときに、全く違うアドレスを実行しようとしてエラーとなる
>
> と言うことではないかと思います。
折角の portable dumper が、compiler の挙動によって動いたり動かなかった
りするのは、それではぜんぜん portable ではないではないかという意味で名
前と矛盾しており、意義を失っています。
dump 前に malloc を空打ちしてみて、そこで取得できた addr を、offset に
使うようにすれば、いいのでしょうか? >develop
# MSVC7、2まんえん...
# http://www.amazon.co.jp/exec/obidos/ASIN/B00009PJOC/
# 学生ではなくなってしまった新卒サラリーマンには、きびしいい
--
Keiichiro Nagano