What LLDB does different from other typical debuggers

今天在随意浏览lldb mailling archive,发现了这样一个邮件,内容大致是关于,lldb和其他的一般debugger 有什么不同。看完之后,收获颇多。

http://lists.cs.uiuc.edu/pipermail/lldb-dev/2011-November/000718.html

Posted in Uncategorized | Leave a comment

我向GCC社区提交过的Patch

从2009年至今,23个Patch,共1512行。主要包括:

1、修复文档、注释、代码中的小错误
2、龙芯2F,3A等相关代码
3、其它遇到的问题

可以通过以下脚本生成上述所有的Patch。


#! /bin/bash

############################################
# Generate patches submitted by me to GCC. #
# Mingjie Xing (mingjie.xing@gmail.com) #
############################################

# r147644 - http://gcc.gnu.org/ml/gcc-cvs/2009-05/msg00620.html
# r155645 - http://gcc.gnu.org/ml/gcc-cvs/2010-01/msg00104.html
# r163028 - http://gcc.gnu.org/ml/gcc-cvs/2010-08/msg00239.html

# r163246 - http://gcc.gnu.org/ml/gcc-cvs/2010-08/msg00457.html
# r163799 - http://gcc.gnu.org/ml/gcc-cvs/2010-09/msg00090.html
# r163986 - http://gcc.gnu.org/ml/gcc-cvs/2010-09/msg00278.html
# r166927 - http://gcc.gnu.org/ml/gcc-cvs/2010-11/msg00816.html
# r167107 - http://gcc.gnu.org/ml/gcc-cvs/2010-11/msg00996.html
# r167290 - http://gcc.gnu.org/ml/gcc-cvs/2010-11/msg01180.html
# r167484 - http://gcc.gnu.org/ml/gcc-cvs/2010-12/msg00165.html
# r168364 - http://gcc.gnu.org/ml/gcc-cvs/2010-12/msg01050.html
# r168396 - http://gcc.gnu.org/ml/gcc-cvs/2011-01/msg00012.html
# r168397 - http://gcc.gnu.org/ml/gcc-cvs/2011-01/msg00013.html
# r168452 - http://gcc.gnu.org/ml/gcc-cvs/2011-01/msg00069.html
# r170041 - http://gcc.gnu.org/ml/gcc-cvs/2011-02/msg00586.html
# r170729 - http://gcc.gnu.org/ml/gcc-cvs/2011-03/msg00150.html
# r170730 - http://gcc.gnu.org/ml/gcc-cvs/2011-03/msg00151.html
# r171206 - http://gcc.gnu.org/ml/gcc-cvs/2011-03/msg00629.html
# r174833 - http://gcc.gnu.org/ml/gcc-cvs/2011-06/msg00322.html
# r181346 - http://gcc.gnu.org/ml/gcc-cvs/2011-11/msg00637.html
# r187392 - http://gcc.gnu.org/ml/gcc-cvs/2012-05/msg00388.html
# r187393 - http://gcc.gnu.org/ml/gcc-cvs/2012-05/msg00389.html
# r190617 - http://gcc.gnu.org/ml/gcc-cvs/2012-08/msg00594.html

r=147644 && svn diff -c $r svn://gcc.gnu.org/svn/gcc > r$r.patch
r=155645 && svn diff -c $r svn://gcc.gnu.org/svn/gcc > r$r.patch
r=163028 && svn diff -c $r svn://gcc.gnu.org/svn/gcc > r$r.patch

r=163246 && svn diff -c $r svn://gcc.gnu.org/svn/gcc > r$r.patch
r=163799 && svn diff -c $r svn://gcc.gnu.org/svn/gcc > r$r.patch
r=163986 && svn diff -c $r svn://gcc.gnu.org/svn/gcc > r$r.patch
r=166927 && svn diff -c $r svn://gcc.gnu.org/svn/gcc > r$r.patch
r=167107 && svn diff -c $r svn://gcc.gnu.org/svn/gcc > r$r.patch
r=167290 && svn diff -c $r svn://gcc.gnu.org/svn/gcc > r$r.patch
r=167484 && svn diff -c $r svn://gcc.gnu.org/svn/gcc > r$r.patch
r=168364 && svn diff -c $r svn://gcc.gnu.org/svn/gcc > r$r.patch
r=168396 && svn diff -c $r svn://gcc.gnu.org/svn/gcc > r$r.patch
r=168397 && svn diff -c $r svn://gcc.gnu.org/svn/gcc > r$r.patch
r=168452 && svn diff -c $r svn://gcc.gnu.org/svn/gcc > r$r.patch
r=170041 && svn diff -c $r svn://gcc.gnu.org/svn/gcc > r$r.patch
r=170729 && svn diff -c $r svn://gcc.gnu.org/svn/gcc > r$r.patch
r=170730 && svn diff -c $r svn://gcc.gnu.org/svn/gcc > r$r.patch
r=171206 && svn diff -c $r svn://gcc.gnu.org/svn/gcc > r$r.patch
r=174833 && svn diff -c $r svn://gcc.gnu.org/svn/gcc > r$r.patch
r=181346 && svn diff -c $r svn://gcc.gnu.org/svn/gcc > r$r.patch
r=187392 && svn diff -c $r svn://gcc.gnu.org/svn/gcc > r$r.patch
r=187393 && svn diff -c $r svn://gcc.gnu.org/svn/gcc > r$r.patch
r=190617 && svn diff -c $r svn://gcc.gnu.org/svn/gcc > r$r.patch

Posted in Uncategorized | Leave a comment

GCC IRC 上的一段对话

今天无意中看到GCC IRC 上的一段对话,

[21:34] <richi> dnovillo: that said – introducing record-builder atthis point seems wrong
[21:34] <dnovillo> what are the preconditions that you are thinking of?
[21:35] <richi> that either everything “up” or everything “down” is C++-ified
[21:35] <richi> C++-ifying random places makes GCC a mess
[21:35] <dnovillo> i don’t understand what that means.
[21:35] <richi> datastructures are the very bottom
[21:35] <richi> a GIMPLE pass would be the very top
[21:35] <richi> but some pieces of tree?
[21:37] <dnovillo> we are targeting specific facilities used by our teams.  that’s our guiding principle.  they build new IL and types (asan).  our mandate does not include converting the whole codebase into C++, we don’t have that kind of budget.

看来有些global maintainer对现在C++的修改也不满意。而且google目前并不打算把GCC的所有部分都用C++重写。希望我理解错了。

Posted in Uncategorized | Leave a comment

libgcc1和libgcc2的区别

参见:http://gcc.gnu.org/onlinedocs/gccint/Libgcc.html#Libgcc

GCC provides a low-level runtime library, libgcc.a or libgcc_s.so.1 on some platforms. GCC generates calls to routines in this library automatically, whenever it needs to perform some operation that is too complicated to emit inline code for.

Most of the routines in libgcc handle arithmetic operations that the target processor cannot perform directly. This includes integer multiply and divide on some machines, and all floating-point and fixed-point operations on other machines. libgcc also includes routines for exception handling, and a handful of miscellaneous operations.

libgcc是GCC提供的一个低层运行时库,当一些操作/运算在特定平台上不支持时,GCC会自动生成对这些库函数的调用,使用这些库函数来模拟实现。从概念上和源码实现中,又可以分为libgcc1和libgcc2,虽然它们最终会被编译合并为libgcc.a。

参见:http://gcc.gnu.org/ml/gcc-help/2009-03/msg00145.html

libgcc1 exists primarily conceptually. It is the basic set of
operations which can not be reasonably implemented using other
operations. In the good old days libgcc1 was built using the other
compiler on your system. Since these days there is generally no other
compiler, most targets provide assembler code to perform the operations.
For example, see config/arm/lib1funcs.asm.

libgcc1中包含了一套基础操作/运算,这些无法使用其它操作来实现,通常会使用一系列的汇编代码来模拟完成。

libgcc2, conversely, is the set of operations which can be implemented
reasonably. For example, if you have a 32-bit add instruction, it’s
easy to use it to implement 64-bit addition. This code appears in
gcc/libgcc2.c. On many processors it is possible to optimize using
instructions which are not avaliable in C, such as add-with-carry; those
optimizations are written in gcc/longlong.h.

libgcc2,正好相反,这些可以通过已有的一些操作/运算来简单的组合完成。通常是使用C代码来编写。

另参见:http://gcc.gnu.org/ml/gcc/2003-12/msg01191.html

Posted in GCC | Tagged | 1 Comment

GNU hacker的一些照片

前几天看lldb的 mail list,看见一个Jason Molenda的人的回复。觉得这个名字好像在哪里见过,于是就翻了翻GDB的changelog,发现他在很多年前,给GDB工作过。最开始在cygnus,后来去了apple。无意中在google中搜索了一下,发现了他的一个网站,里边有很多照片。好多照片都是他们这些gnu hacker在一起的,勾起了我无限的兴趣 (我特别喜欢把mail list里边的人和他们的照片对应起来)。下边我来一一介绍,由近及远,

第一个是关于 Richard Henderson http://molenda.us/photos/rth-ildan-test-2005-12-10/ 照片是关于他练习跆拳道的照片吧。Richard 在我心目中是十分牛了,比现在的GCC Global Maintainer要厉害,他现在好像在做qemu。12年在布拉格,我见过他。很cool的一个人。

第二个是 关于Jason Merrill http://molenda.us/photos/wedding-2000-09-16/。 我就认识这个人,他应该是C++ 还是 libstdc++的maintainer。

第三个是 两次GDB picnic 的照片 (1999年和2000年)。http://molenda.us/photos/gdb-picnic-1999/http://molenda.us/photos/gdb-picnic-2000-08-15/ 里边能找到最早的GDB 开发者。大部分人都陆续离开了GDB,只有两个人仍然留着,Stan 和 Doug。看看大牛的样子,的确是很有意思的事情。

Posted in Uncategorized | Leave a comment

HelloGCC 2012 视频 LLVM: Another Toolchain Platform

演讲者:杨勇勇
中国科学院自动化研究所在读博士生,三年级。感兴趣的领域包括:嵌入式系统开发平台、大规模数据计算、软件工程、编译优化技术、代码生成及调度算法、操作系统等等。
简介:自动化研究所下属的“国家专用集成电路设计与研究工程技术中心”目前正在开发一款面向极大数据量和运算量的SoC平台原型,负责数据处理的核心是一个自主设计、概念新颖的多运算核系统。本人负责的工作内容是构建该处理核心的软件工具链,包含C语言编译器、汇编器、反汇编器、链接器、调试器等。
我们选择LLVM作为编译工具的实现基础。该话题演讲讨论的是一套基本的软件开发平台,我们会介绍LLVM系统结构,如何实现一个LLVM的后端,以及通过LLVM的MC层整合汇编器/反汇编器,并在最后简单讨论链接器和符号调试器。

演讲幻灯片下载:http://www.hellogcc.org/?p=188

Posted in llvm, 社区活动 | Leave a comment

GCC 野史

今天无意中看到了这篇文章,The Short History of GCC development,我个人更愿意把它叫做野史。里边加入了很多有趣的东西,比如egcs如何从gcc fork出去的,怎么又消灭的gcc,然后又改名为gcc。在egcs成立的时候,就有个team (我猜想是cygnus的team),这个文章里边也有名单,有一半的人现在还活跃着。

里边还提到了Mark Mitchell,其中有一个问答(发生在1997年或者98年)比较有意思,

JB: Which systems do currently use GCC as their primary compiler set (not counting *BSD and GNU/Linux)?

Apple’s OS X. If Apple succeeds, there will probably be more OS X developers using GCC than there are GNU/Linux developers.

现在苹果是成功了,但是没有用gcc :)

里边还引用了不少slashdot上的段子,老外用词都很生猛,自己看吧 :D

Posted in Uncategorized | Leave a comment

HelloGCC 2012 视频 Port GDB to a New Architecture

演讲者: 齐尧codesourcery/mentorgraphics
简介:我们会介绍如何把GDB移植到一个新的体系结构上,包括支持改体系结构的断点,单步,还会介绍如何支持该体系结构的prologue 分析和epilogue 分析,最后我们介绍在Linux 之上,我们需要做的移植工作,比如对plt stub的支持和signal trampoline的支持。

演讲幻灯片下载:http://www.hellogcc.org/?p=188

Posted in Debugger, GDB, 社区活动 | Leave a comment

11月10日workshop

2012年workshop的所有slides可以下载这个文件

http://www.hellogcc.org/download/hellogcc-2012.pdf

Posted in Uncategorized | 1 Comment

GNU coding standard

刚刚开始GNU 软件开发的人,可能都会被gnu coding standard给搞晕,因为可能自己的编码习惯和这个gnu standard不是很一致,再加上编辑器对tab和space的使用,就使得符合gnu standard变得更加困难。

我个人建议,如果是第一次写gnu的代码,最好去看看gnu standard,不长,

http://www.gnu.org/prep/standards/standards.html

还有一个办法,就是写好了代码,用indent去检查一下,

indent -nbad -bap -nbc -bbo -bl -bli2 -bls -ncdb -nce -cp1 -cs -di2 -ndj -nfc1 -nfca -hnl -i2 -ip5 -lp -pcs -psl -nsc -nsob
Posted in Uncategorized | Leave a comment