[PHP-dev 1314] Re: PHPにバンドルしているonigurumaについて

KOYAMA Tetsuji koyama @ hoge.org
2006年 9月 16日 (土) 21:59:03 JST


小山です。

こちらにも macosx-ppc があるので調べてみました。

On 9/16/06, Rui Hirokawa <rui_hirokawa @ ybb.ne.jp> wrote:
> 廣川です。
>
> やはり,環境(Xcode)依存の問題なんですね。
> 金井さんの環境で現れたエラーもvarginがらみだったのでしょうか。
>
> main/php_config.h のHAVE_STDARG_PROTOTYPESは
> どのように設定されていますか?
>
> configureにより生成されたconfig.logの
> "length prototypes and stdarg.h"直後に
> エラーが発生していますか?
>
> main/php_config.hに以下の行があった場合,
> #undef HAVE_STDARG_PROTOTYPES
> これを
> #define HAVE_STDARG_PROTOTYPES  1
> に変えるとコンパイルがとおりますか?

廣川さんの予想通り configure の stdarg.h のチェックに失敗しているせいでした。

#define HAVE_STDARG_PROTOTYPES  1

にするとコンパイルは通ります。

で、なぜ configure の stdarg.h チェックに失敗するかですが、どうも
Xcode 2.4 の gcc-4.0.1 の最適化のバグのようです。

config.m4 の該当部分のチェックコード


#include <stdarg.h>
int foo(int x, ...) {
        va_list va;
        va_start(va, x);
        va_arg(va, int);
        va_arg(va, char *);
        va_arg(va, double);
        return 0;
}
int main() { return foo(10, "", 3.14); }

を -O2 でコンパイルしたバイナリを実行すると Bus Error に
なります。最適化なしだと無事に実行できます。


-- 
    小山哲志@ビート・クラフト
    koyama @ beatcraft.com
    koyama @ hoge.org


PHP-dev メーリングリストの案内