<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: gcc _Unwind_Backtrace()の謎</title>
	<atom:link href="http://www.jinmei.org/blog/2009/06/14/1580/feed" rel="self" type="application/rss+xml" />
	<link>http://www.jinmei.org/blog/2009/06/14/1580</link>
	<description></description>
	<lastBuildDate>Wed, 23 Nov 2011 20:38:40 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<item>
		<title>By: _Unwind_Backtrace()と-fomit-frame-pointer</title>
		<link>http://www.jinmei.org/blog/2009/06/14/1580/comment-page-1#comment-1904</link>
		<dc:creator>_Unwind_Backtrace()と-fomit-frame-pointer</dc:creator>
		<pubDate>Thu, 18 Jun 2009 09:05:23 +0000</pubDate>
		<guid isPermaLink="false">http://www.jinmei.org/blog/?p=1580#comment-1904</guid>
		<description>[...] 一つ前のエントリの続き。gccの_Unwind_Backtrace()には、フレームポインタなしでコンパイルされたコードに対しても動くという特長がある。はじめは、最初のフレームのときだけbuiltin関数 [...]</description>
		<content:encoded><![CDATA[<p>[...] 一つ前のエントリの続き。gccの_Unwind_Backtrace()には、フレームポインタなしでコンパイルされたコードに対しても動くという特長がある。はじめは、最初のフレームのときだけbuiltin関数 [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: jinmei</title>
		<link>http://www.jinmei.org/blog/2009/06/14/1580/comment-page-1#comment-1827</link>
		<dc:creator>jinmei</dc:creator>
		<pubDate>Mon, 15 Jun 2009 18:05:48 +0000</pubDate>
		<guid isPermaLink="false">http://www.jinmei.org/blog/?p=1580#comment-1827</guid>
		<description>onoさん: ご確認ありがとうございます。

shinhさん:

&gt; amd64 はデフォルトで -fomit-frame-pointer がかかってる感じなので(正確にはABIでフレームポインタ無くていいと書いてあると思います)、

amd64/x86_64の場合、-fomit-frame-pointerがより頻繁に使われているということは確かに関係あるかもしれません(ちなみに僕が確認できる範囲でいえば、コンパイラの最適化オプション(-Oxなど)を指定しなければamd64でもフレームポインタありのコードが生成されてました)。

&gt; デバッガでスタックトレース出すために .eh_frame を必ず作る必要がある、という理解です。

これが理由だとすると、 .debug_frame を使うのでもよさそうですが…。.debug_frameの場合、stripすると消えてしまうという問題はありますが、stripしたバイナリを使ってデバッガで追いかけるのはもともとかなり厳しいですし(優秀なバイナリアンなら問題ないのかとは思いますが:-)。まあ、gccを作った人が、そういう場合でもせめて各frameのアドレスくらいは確実に表示できるようにしようと思って.eh_frameに置くことにしたのだとしたら、そういうこともあるかなとは思います。</description>
		<content:encoded><![CDATA[<p>onoさん: ご確認ありがとうございます。</p>
<p>shinhさん:</p>
<p>> amd64 はデフォルトで -fomit-frame-pointer がかかってる感じなので(正確にはABIでフレームポインタ無くていいと書いてあると思います)、</p>
<p>amd64/x86_64の場合、-fomit-frame-pointerがより頻繁に使われているということは確かに関係あるかもしれません(ちなみに僕が確認できる範囲でいえば、コンパイラの最適化オプション(-Oxなど)を指定しなければamd64でもフレームポインタありのコードが生成されてました)。</p>
<p>> デバッガでスタックトレース出すために .eh_frame を必ず作る必要がある、という理解です。</p>
<p>これが理由だとすると、 .debug_frame を使うのでもよさそうですが…。.debug_frameの場合、stripすると消えてしまうという問題はありますが、stripしたバイナリを使ってデバッガで追いかけるのはもともとかなり厳しいですし(優秀なバイナリアンなら問題ないのかとは思いますが:-)。まあ、gccを作った人が、そういう場合でもせめて各frameのアドレスくらいは確実に表示できるようにしようと思って.eh_frameに置くことにしたのだとしたら、そういうこともあるかなとは思います。</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: shinh</title>
		<link>http://www.jinmei.org/blog/2009/06/14/1580/comment-page-1#comment-1822</link>
		<dc:creator>shinh</dc:creator>
		<pubDate>Mon, 15 Jun 2009 15:14:28 +0000</pubDate>
		<guid isPermaLink="false">http://www.jinmei.org/blog/?p=1580#comment-1822</guid>
		<description>&gt; なぜamd64の場合にはCでもこれが生成されるのかは不明

amd64 はデフォルトで -fomit-frame-pointer がかかってる感じなので(正確にはABIでフレームポインタ無くていいと書いてあると思います)、デバッガでスタックトレース出すために .eh_frame を必ず作る必要がある、という理解です。</description>
		<content:encoded><![CDATA[<p>&gt; なぜamd64の場合にはCでもこれが生成されるのかは不明</p>
<p>amd64 はデフォルトで -fomit-frame-pointer がかかってる感じなので(正確にはABIでフレームポインタ無くていいと書いてあると思います)、デバッガでスタックトレース出すために .eh_frame を必ず作る必要がある、という理解です。</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: ono</title>
		<link>http://www.jinmei.org/blog/2009/06/14/1580/comment-page-1#comment-1812</link>
		<dc:creator>ono</dc:creator>
		<pubDate>Mon, 15 Jun 2009 06:13:55 +0000</pubDate>
		<guid isPermaLink="false">http://www.jinmei.org/blog/?p=1580#comment-1812</guid>
		<description>動作報告です。

powerpc(32bit)でためしてみたところ、-e付きだと動作しているようにみえます。
% ./unwindtest
% ./unwindtest -e     
frame[0] 0x10001078: entrance pt=0x10001038, diff=64
frame[1] 0x10001204: entrance pt=0x100011ec, diff=24
frame[2] 0x10001250: entrance pt=0x10001224, diff=44

環境:
PowerPC 405EX
Linux 2.6.29
gcc 4.2.3</description>
		<content:encoded><![CDATA[<p>動作報告です。</p>
<p>powerpc(32bit)でためしてみたところ、-e付きだと動作しているようにみえます。<br />
% ./unwindtest<br />
% ./unwindtest -e<br />
frame[0] 0&#215;10001078: entrance pt=0&#215;10001038, diff=64<br />
frame[1] 0&#215;10001204: entrance pt=0x100011ec, diff=24<br />
frame[2] 0&#215;10001250: entrance pt=0&#215;10001224, diff=44</p>
<p>環境:<br />
PowerPC 405EX<br />
Linux 2.6.29<br />
gcc 4.2.3</p>
]]></content:encoded>
	</item>
</channel>
</rss>

