にゃははー

はへらー

【解決】Intel Atom環境でBoost.ContextがSEGVる

普段VAIO Z(Intel Atom Z550 + Ubuntu 10.10)で開発してるわけなんだけど、Boost.MMMを作るにあたってBoost.ContextがAtom環境でSEGVってくれる。
具体的にはboost_fcontext_startでboost::contexts::detail::trampolineに行く時にtrampolineの第1引数の値がboost_fcontext_makeの第3引数と同じでないといけないんだけどこれがなんか違う。

で、手元にi686ってこのAtomしかなくて、他の環境でSEGVるのか試してもらいたいです。x86_64は動くのでまぁいいですが。

https://github.com/olk/boost.context/
からcloneしてBoostからJamrootとboostcpp.jamを拝借してboost.contextの下に置いたら

$ bjam architecture=x86 address-model=32 instruction-set=i686
$ sudo bjam install architecture=x86 address-model=32 instruction-set=i686

ってしてもらって

#include <boost/context/context.hpp>
#include <boost/context/stack_utils.hpp>

void f() {}

int main()
{
	boost::contexts::context ctx(f
	, boost::contexts::default_stacksize()
	, boost::contexts::no_stack_unwind
	, boost::contexts::return_to_caller);
	ctx.start();
}

$ g++ testcase.cpp -lboost_context

なり

$ clang++ testcase.cpp -lboost_context

してもらって実行して成功したかどうかだけでも教えてもらえると嬉しいです。
i686系全般に言えるようならissuesに投げようと思います。



2012/02/06 16:32 追記
DSOだとSEGVるようです。static linkだと手元の環境でも実行できました。
引き続き情報をいただければありがたいです。

表って作れないかな...



2012/02/06 17:42 追記
リンク後のPLTからboost_fcontext_alignが消え去ってることがわかりました。一方リンク前のlibboost_context.soのPLTにはboost_fcontext_alignがいました。
そしてC++からboost_fcontext_alignを呼ぶと正しく呼べることがわかりました。
PLTから消え去る原因がわかればどうにかなる感じ?



2012/02/06 18:18 追記
牛の人の神デバッグによりwaができました!
https://gist.github.com/1750972
pull-req任されたので少し勉強してから投げます。