开源大会之见闻

xmj@hellogcc

详细情况可以参见http://linux.chinaunix.net/lds2011

我只呆了上午半天,这里简单介绍一下所见所闻。也算作是社区动态吧。

今年的一个特色是现场增加了微博互动,可以通过手机短信的方式发送内容,讲台两边有大屏幕时时滚动显示微博内容。我特意尝试发送了一条短信,顺便为hellogcc社区做下宣传,呵呵,效果不错。

会中特别提到了,国人在开源社区中的角色正在由使用者逐渐转变为贡献者。这一点,个人确实能感受到一些。特别的,微软的演讲也表明了,开源无处不在,微软也在摻和。

有一个失误,演讲题目“Open Development != Open Source“翻译成中文后,变成了”开放的开发=开放的源码“。本意是不等于,结果翻成等于了。

总的来说,还是不错的。

Debugger Not In Depth: Inferior Call

 1 inferior call 1 什么是inferiro call 在解释inferior call的实现原理之前,我们先解释一下inferior call是什么。 inferior call 可以被简单地理解为“调试器在当前的堆栈上,主动调用被调试程序的函数,并且正确的得到 函数的返回值(这一句好像有点多余)”。inferior call理解起来,远比我们想象的简单,这个功能在我们的 调试过程经常会被用到。比如有这样一段代码片段, extern int bar (int); void foo () { /* i is avaliable before. */ o = bar (i); } 假设现在程序执行到foo中,即将调用bar,我们想检查给定一个输入,函数的bar的返回值是否正确。通常这个时候我们想在GDB这里调用一下目标代码中的函数, (gdb) p bar (5) $1 = 4 其实bar (5)是在目标端运行的,这就是一个inferior call。 在有些程序中,为了方便调试,开发人员会开发一些调试函数,留在程序中。这样在调试阶段,就可以利用inferior call这个功能,把一些程序的内部状态给打印出来。比如在调试GCC rtl的时候,我们经常在GDB中用 p print_rtx (rtx),来打印rtx 的内容。这就是一个inferior call。 2 […]

查看struct gcc_target的定义

xmj@hellogcc 现在结构体struct gcc_target的定义,是通过一系列的宏来实现了,相关文件包括:target.h,target.def,target-hooks-def.h。这些宏,包括 #define DEFHOOKPOD(NAME, DOC, TYPE, INIT) TYPE NAME; #define DEFHOOK(NAME, DOC, TYPE, PARAMS, INIT) TYPE (* NAME) PARAMS; #define HOOK_VECTOR_1(NAME, FRAGMENT) HOOKSTRUCT(FRAGMENT) #define HOOK_VECTOR(INIT_NAME, SNAME) HOOK_VECTOR_1 (INIT_NAME, struct SNAME {) #define HOOK_VECTOR_END(DECL_NAME) HOOK_VECTOR_1(,} DECL_NAME ; ) 。。。 如果,要实现,增加一个target hook,就需要在target.def文件里增加相应的条目。为了能够查看实际的结构体定义,可以在trunk/gcc目录下,运行命令 $ gcc -E target.h -I ../../build-trunk/gcc/ -o ~/temp/target.i 查看~/temp/target.i文件,可以看到struct gcc_target的定义: struct gcc_target { struct […]

探索GDB的移植

GDB已经被移植到到十几个处理器和平台上,足以证明GDB的结构是便于移植的。本文简单介绍了,作者在移植GDB的过程中,使用和修改的一些GDB hook函数,从而进一步理解这些hook函数的作用。 http://filer.blogbus.com/11149686/resource_11149686_1307586989v.pdf 幻灯片就是上周活动时候用的,加了一点点小的修改。

开始加入gnu toolchain的开发(之二)

xmj@hellogcc 向GNU提交代码,必须要签署FSF版权转让协议(copyright assignment),这意味着你是作为贡献者将这些代码的版权归为FSF所有。这里只介绍了以个人的名义来申请签署协议和进行开发的流程,至于以公司的名义的流程,我不清楚,故没有介绍。申请签署该协议的方法为,填写如下表格,并发送给assign@gnu.org 。下边给出样例答案。 Please email the following information to assign@gnu.org , and we will send you the assignment form for your past and future changes. Please use your full legal name (in ASCII characters) as the subject line of the message. ———————————————————————- REQUEST: SEND FORM FOR PAST AND FUTURE CHANGES [What is the name […]