URN Logo
UNIX Resources » Linux » China Linux Forum » CPU 与 编译器 » 4 » 我翻译的一段GCC Internals的内容
announcement 声明: 本页内容为中国Linux论坛的内容镜像,文章的版权以及其他所有的相关权利属于中国Linux论坛和相应文章的作者,如果转载,请注明文章来源及相关版权信息。
Resources
China Linux Forum(finished)
Linux Forum(finished)
FreeBSD China(finished)
linuxforum.net
  业界新闻与评论
  自由软件杂谈
  IT 人生
  Linux软件快递
  翻译作坊
  Linux图书与评论
  GNU Emacs/XEmacs
  Linux 中文环境和中文化
  Linux桌面与办公软件
  Linux 多媒体与娱乐版
  自由之窗Mozilla
  笔记本电脑上的Linux
  Gentoo
  Debian 一族
  网络管理技术
  Linux 安装与入门
  WEB服务器和FTP服务器
  域名服务器和邮件服务器
  Linux防火墙和代理服务器应用
  文件及打印服务器
  技术培训与认证
  Linux内核技术
  Linux 嵌入技术
  Linux设备驱动程序
  Linux 集群技术
  LINUX平台数据库
  系统和网络安全
  CPU 与 编译器
  系统计算研究所专栏
  Linux下的GUI软件开发
  C/C++编程版
  PHP 技 术
  Java&jsp技术
  Shell编程技术
  Perl 编 程
  Python 编 程
  XML/Web Service 技术
  永远的Unix
  FreeBSD世界
   
我翻译的一段GCC Internals的内容
我翻译的一段GCC Internals的内容 - shy828301 [2006-07-28 11:19 | 3,722 byte(s)]
 
Re: 我翻译的一段GCC Internals的内容 - qiyoa [2006-07-30 14:34 | 70 byte(s)]
 
Re: 我翻译的一段GCC Internals的内容 - EricFisher [2006-07-31 19:05 | 105 byte(s)]
 
 
 
 
 
 
 
 
 
 
Re: 我翻译的一段GCC Internals的内容 - teawater [2006-07-28 20:12 | 31 byte(s)]
 
Subject: 我翻译的一段GCC Internals的内容
Author: shy828301    Posted: 2006-07-28 11:19    Length: 3,722 byte(s)
[Original] [Print] [Top]
前段时间又看了一遍GCC Internals,翻译了一下关于GCC如何处理构造函数和析构函数的内容。我把我的译文贴上来,肯定还有很多错误在里面,希望各位大侠指出。

原文链接:
http://gcc.gnu.org/onlinedocs/gccint/Initialization.html#Initialization

译文:
用某些语言编译的代码包括构造函数(也称作初始化例程)——程序启动时用于初始化程序数据的函数。这些函数需要在程序开始之前调用——也就是说,在 main之前调用。编译一些语言产生析构函数(也称作终止例程),在程序结束时调用。为了使得初始化和终止函数工作,编译器必须在汇编代码中输出一些东西,使得这些函数在恰当的时间 被调用。当移植编译器到一个新的系统时,需要指定怎样做这件事。GCC目前支持构造函数和析构函数执行的两个主要的方法。每一种方法又有两个变种。连接器必须为这些函数构造两个链表,一个链表用于构造函数,称作__CTOR_LIST__,一个链表用于析构函数,称作__DTOR_LIST__。每个链表以一个忽略的函数指针开始。后面跟着一系列0或多个指向构造函数或析构函数的指针,然后是一个包含0的函数指针。crtstuff.c或者 libgcc2.c在启动时和退出时遍历这些链表,这依赖于操作系统和可执行文件的格式。构造函数以到序调用,析构函数正序调用。处理构造函数最好的方法,仅仅可以工作于提供可以任意命名段的目标文件格式。一个段留出用于构造函数,另一个段用于析构函数。传统上叫做".ctors"和".dtors"。定义了构造函数的目标文件也在构造函数段中放一个字,指向这个函数。连接器累加所有的这些字到一个连续的".ctors"段。析构函数的处理方法也一样。如果定义了TARGET_ASM_NAMED_SECTION将由target-def.h选择缺省的方法。那些不支持任意命名段的目标文件,但是支持特殊定义的构造函数和析构函数段的可以通过定义CTORS_SECTION_ASM_OP和DTORS_SECTION_ASM_OP来获得一样的效果。当任意命名的段可用时,有两个变种,依赖于在crtstuff.c中的代码怎样调用。在程序开始处,支持执行.init段的系统上,crtstuff.c中的一部分代码被编译到这个段中。程序被GCC驱动链接:
ld -o output_file crti.o crtbegin.o ... -lgcc crtend.o crtn.o
函数的prologue(__init)出现在crti.o的.init段中。epilogue出现在crtn.o中。同样的,函数__fini在. fine节中。通常这些文件由操作系统或者GNU C库提供,但是某些体系结构由GCC提供。目标文件crtbegin.o和crtend.o是从crtstuff.c编译的。他们包含在.init和. fini段中的分支到.text段例程的代码片断。链接器把段的所有部分都放在一起,导致一个完整的__init函数,我们需要在启动时调用的例程。为了使用这个变种,你必须恰当的定义INIT_SECTION_ASM_OP宏。当GCC编译任何叫做main的函数时(或者更确切的说,任何通过语言前端调用expand_main_function定义的,作为程序入口点的函 数),如果init段不可用,他插入一个到__main函数的过程调用,作为prologue后的第一个可执行代码。__main函数定义于 libgcc2.c中,运行全局构造函数。在不支持任意命名段的目标文件格式中又有两个变种。在最简单的变种中,GNU连接器(GNU ld)和一个"a.out"格式必须使用。在这种情况中,TARGET_ASM_CONSTRUCTOR被定义,产生一个类型是"N_SETT"的. stabs入口,引用名字__CTOR_LIST__,包含初始化代码的void函数的地址作为他的值。GNU链接器识别这个作为一个请求,加这个值到一个集合上。这些值被累加,最终放在可执行文件中,作为上面描述的格式中的一个向量,元素带有前导计数而且尾部为0。 TARGET_ASM_DESTRUCTOR的处理也是相似的。由于没有init段可用,没有INIT_SECTION_ASM_OP导致main的编译在上面调用__main,开始初始化过程。最后一个变种既不使用任意命名的段也不使用链接器。这个在你想要使用动态链接和GNU链接器不支持的目标文件格式,比如"ECOFF"时才这样做。在这种情况中,TARGET_HAVE_CTORS_DTORS为假,构造函数和析构函数简单的由他们的名字识别。这就在链接中要求一个额外的程序,称作collect2。这个程序假装是GCC使用的链接器。他不仅通过运行一般地链接器完成这个工作,也安排包含构造函数和析构函数的向量。这些函数通过__main调用,就像上面描述的一样。为了使用这个方法,use_collect2必须在config.gcc中定义。
[Original] [Print] [Top]
Subject: Re: 我翻译的一段GCC Internals的内容
Author: teawater    Posted: 2006-07-28 20:12    Length: 31 byte(s)
[Original] [Print] [Top]
顶一下 以后再接再厉 多翻点 呵呵
----
科学家会武术 流氓都挡不住
[Original] [Print] [Top]
Subject: Re: 我翻译的一段GCC Internals的内容
Author: qiyoa    Posted: 2006-07-30 14:34    Length: 70 byte(s)
[Original] [Print] [Top]
可以到“翻译作坊 ”开一个项目,翻译gcc internals!

[Original] [Print] [Top]
Subject: 如果能把gcc相关的东西都翻译成中文,那么对中国的自由软件业来说,贡献是巨大的
Author: r00t    Posted: 2006-07-30 16:22    Length: 0 byte(s)
[Original] [Print] [Top]
----
[Original] [Print] [Top]
Subject: Re: 如果能把gcc相关的东西都翻译成中文,那么对中国的自由软件业来说,贡献是巨大的
Author: qiyoa    Posted: 2006-07-30 18:45    Length: 309 byte(s)
[Original] [Print] [Top]
能说详细一点吗?
您觉得“gcc相关的东西” 除了 gcc internal,还有什么吗?
我以前看过gcc internal,觉得很多内容都不是很清楚。而且很多信息都包含在源代码的注释里边,比较零散,没有体系。

希望有高手带领我们,把这些东西搞清楚,:)
翻译internal也挺好的!我可以参与,:)
[Original] [Print] [Top]
Subject: Re: 如果能把gcc相关的东西都翻译成中文,那么对中国的自由软件业来说,贡献是巨大的
Author: shy828301    Posted: 2006-07-31 09:44    Length: 102 byte(s)
[Original] [Print] [Top]
可以先翻译GCC internals,RTL部分已经有中文版的了,我已经把第14章翻译一大部分了,剩下的其实就不是很多了
[Original] [Print] [Top]
Subject: Re: 如果能把gcc相关的东西都翻译成中文,那么对中国的自由软件业来说,贡献是巨大的
Author: alephman    Posted: 2006-07-31 10:49    Length: 30 byte(s)
[Original] [Print] [Top]
可以把东东发出来,免得重复劳动.
[Original] [Print] [Top]
Subject: Re: 如果能把gcc相关的东西都翻译成中文,那么对中国的自由软件业来说,贡献是巨大的
Author: shy828301    Posted: 2006-07-31 12:05    Length: 34 byte(s)
[Original] [Print] [Top]
论坛的附件功能好像关闭了,发不上来
[Original] [Print] [Top]
Subject: Re: 我翻译的一段GCC Internals的内容
Author: EricFisher    Posted: 2006-07-31 19:05    Length: 105 byte(s)
[Original] [Print] [Top]
>可以到“翻译作坊 ”开一个项目,翻译gcc internals!

是个好主意!!!支持!!!
[Original] [Print] [Top]
Subject: Re: 如果能把gcc相关的东西都翻译成中文,那么对中国的自由软件业来说,贡献是巨大的
Author: qiyoa    Posted: 2006-07-31 22:47    Length: 32 byte(s)
[Original] [Print] [Top]
不用附件,直接粘贴上来,不行吗?
[Original] [Print] [Top]
Subject: Re: 如果能把gcc相关的东西都翻译成中文,那么对中国的自由软件业来说,贡献是巨大的
Author: ccba    Posted: 2006-08-02 12:47    Length: 100 byte(s)
[Original] [Print] [Top]
如果需要GNU Website方面的协助,也许我可以帮上点忙。

我的联系方式: wcai @ gnu.org
[Original] [Print] [Top]
Subject: Re: 如果能把gcc相关的东西都翻译成中文,那么对中国的自由软件业来说,贡献是巨大的
Author: qiyoa    Posted: 2006-08-02 23:40    Length: 128 byte(s)
[Original] [Print] [Top]
通过您的邮件地址,我找到了GNU中文翻译小组,真是让我吃惊啊!

我们还是先翻译吧,等翻译差不多了,再联系您! :)
[Original] [Print] [Top]
Subject: Re: 如果能把gcc相关的东西都翻译成中文,那么对中国的自由软件业来说,贡献是巨大的
Author: shy828301    Posted: 2006-08-03 09:45    Length: 100 byte(s)
[Original] [Print] [Top]
我最近在整理我以前的笔记,而且以前翻译的不是很全,会补充一些东西,会先发在我的blog上,先在上面连载了
----
我的blog:http://hi.baidu.com/juventus
[Original] [Print] [Top]
« Previous thread
When build hello step by step, I get an error, why
CPU 与 编译器
4
Next thread »
如何看一个CPU是否是双核的,而不是超线程的
     

Copyright © 2007 UNIX Resources Network, All Rights Reserved.      About URN | Privacy & Legal | Help | Contact us
备案序号: 京ICP备05006143    webmaster: webmaster@unixresources.net
This page created on 2008-07-17 03:47:14, cost 0.078208923339844 ms.