我首先声明一下,xx的这个文章很好。我看了以后明白了一些东西。 >>> >> >> PLT/GOT的作用比你说的要多一些,还是自己看linker&loader吧。 >> > > 恩,所以说PLT/GOT等概念要自己补充,这个东西一两句说不清的。我只是提取出来了这里需要的点一下,其实我也没有理解非常透彻。 > 我倾向于每个文章都有自己的重点,可以不用很全面。如果很全面,就成了manual了。我们能在一个点上想明白,就很好了。慢慢的,把这些点链接起来,就好了。 >>> 然后machine.md里面对call要有相应的照顾。 >>> \begin{shaded} >>> \begin{verbatim} >>> (define_expand "call" >>> [(parallel [(call (match_operand:SI 0 "sym_ref_mem_operand" "") >>> (match_operand 1 "" "i")) >>> (clobber (reg:SI 9))])] >> >> 能把上边这个解释一下不? operand 0 和operand 1分别是什么? >> 为啥clobber reg:SI 9?这个是什么? >> >> 问题可能有点跑题 :) >> > > 恩,有时间的话我整理一下md文件里面我个人能理解和掌握的,这个例子里面确实和这些内容没太大关联。 > 这个md文件水很深,也不是一年半载能讲清楚的,有时间的话,一点儿一点儿来,通过不同的例子,不同的角度,来慢慢讲清楚不同的用法。 > 我觉得挺有关联的。 :) 我还是喜欢那样通过一个问题,一点一点去追,会得到很多收获。其实这里是不是和pic有关系,我倒不是那么在乎了。如果这里,我们先搞明白gcc为了pic call,怎样产生代码。这个pattern是怎么match的。以及dynamic linker怎么resolve symbol,以及update plt entry。我想这样就是所谓的"情景分析"吧。 这样的方式很适合去学习。 anyway, it is a good start. Thanks a lot :) -- Yao Qi <qiyaoltc AT gmail DOT com> http://sites.google.com/site/duewayqi/