[hellogcc] Re: [gccint-zh] Merge r368 to r374 to gccint-zh-4.6 branch

  • From: Yao Qi <qiyaoltc@xxxxxxxxx>
  • To: hellogcc@xxxxxxxxxxxxx
  • Date: Tue, 4 Oct 2011 00:30:29 +0800

On Tue, Oct 4, 2011 at 12:19 AM, Yao Qi <qiyaoltc@xxxxxxxxx> wrote:
> 首先感谢 Ding Cong给我们做的大段的翻译。谢谢!如果将来还有修改,请
> 分别apply到我们的trunk和4.6 branch上。
>
> 我这个patch就是把Ding Cong的修改从trunk merge到gccint-zh-4.6
> branch。因为我们trunk现在的版本是基于fsf r170041,而4.6是在 r170935
> fork出来的,所以我们自己的trunk和4.6 branch的内容应该一样的。
>
> 我接下来会把 fsf gcc r170041 到r170935的修改merge过来,不一定翻译。
> 这些修改应该会同时存在我们的trunk和4.6 branch。
>
> 从r170935以后,我们的trunk和4.6 branch就要分别接受fsf的trunk和4.6
> branch的改动了。
>
> --
> Yao Qi <qiyaoltc AT gmail DOT com>
>

抱歉乱码。重发一次

-- 
Yao Qi <qiyaoltc AT gmail DOT com>
http://sites.google.com/site/duewayqi/

Index: contrib-zh.texi
===================================================================
--- contrib-zh.texi     (revision 368)
+++ contrib-zh.texi     (revision 374)
@@ -7,6 +7,7 @@

 @itemize @bullet

+@item Ding Cong        <tuxding AT gmail.com>
 @item Hou Jingyi       <houjingyi AT gmail.com>
 @item Huang Xinping    <xinping.huang AT gmail.com>
 @item L J              <proljc AT gmail.com>
Index: fragments.texi
===================================================================
--- fragments.texi      (revision 368)
+++ fragments.texi      (revision 374)
@@ -17,12 +17,7 @@
 @en autoconf.  The list of fragments to incorporate is set by
 @en @file{config.gcc} (and occasionally @file{config.build}
 @en and @file{config.host}); @xref{System Config}.
-当使用 @file{configure} 脚本配置GCC时,将会从模版文件
-@file{Makefile.in} 中构建 @file{Makefile} 文件。这个时候,会将
-@file{config} 目录下的makefile片段合在一起。这些片段用来设置不
-能被autoconf检测计算出的Makefile参数。要合并的片段列表由
-@file{config.gcc}(以及偶尔由 @file{config.build} 和
-@file{config.host})设置;@xref{System Config}。
+当使用 @file{configure} 脚本配置GCC时,将会从模版文件 @file{Makefile.in} 中构建
@file{Makefile} 文件。这个时候,会将 @file{config}
目录下的makefile片段合在一起。这些片段用来设置不能被autoconf检测计算出的Makefile参数。要合并的片段列表由
@file{config.gcc}(以及偶尔由 @file{config.build} 和
@file{config.host})设置;@xref{System Config}。

 @en Fragments are named either @file{t-@var{target}} or @file{x-@var{host}},
 @en depending on whether they are relevant to configuring GCC to produce
@@ -35,9 +30,7 @@
 @en If these files do not exist, it means nothing needs to be added for a
 @en given target or host.  Most targets need a few @file{t-@var{target}}
 @en fragments, but needing @file{x-@var{host}} fragments is rare.
-如果不存在这些文件,则意味着不需要对给定目标或主机添加什么。大多
-数目标机需要一些 @file{t-@var{target}} 片段,不过需要
-@file{x-@var{host}} 片段的很少。
+如果不存在这些文件,则意味着不需要对给定目标或主机添加什么。大多数目标机需要一些 @file{t-@var{target}}
片段,不过需要 @file{x-@var{host}} 片段的很少。

 @en @menu
 @en * Target Fragment:: Writing @file{t-@var{target}} files.
@@ -200,14 +193,7 @@
 @table @code
 @findex LIBGCC2_CFLAGS
 @item LIBGCC2_CFLAGS
-编译 @file{libgcc2.c} 时使用的编译器标记。
-@findex LIB2FUNCS_EXTRA
-@item LIB2FUNCS_EXTRA
-将被编译或汇编,并插入 @file{libgcc.a} 的源文件名列表。
-@findex Floating Point Emulation
-@item Floating Point Emulation
-要使GCC在 @file{libgcc.a} 中包括软浮点库,则使用下面的一些规则
-来定义 @code{FPBIT} 和 @code{DPBIT}:
+编译 @file{libgcc2.c} 时使用的编译器标记。@findex LIB2FUNCS_EXTRA @item
LIB2FUNCS_EXTRA 将被编译或汇编,并插入 @file{libgcc.a} 的源文件名列表。@findex Floating
Point Emulation @item Floating Point Emulation 要使GCC在 @file{libgcc.a}
中包括软浮点库,则使用下面的一些规则来定义 @code{FPBIT} 和 @code{DPBIT}:

 @smallexample
 # We want fine grained libraries, so use the new code
@@ -224,79 +210,24 @@
         cat $(srcdir)/config/fp-bit.c > dp-bit.c
 @end smallexample

-可能需要在 @file{fp-bit.c} 和 @file{dp-bit.c} 的开始处提供额外的
-#define来控制目标机大小端和其它选项。
-@findex CRTSTUFF_T_CFLAGS
-@item CRTSTUFF_T_CFLAGS
-编译 @file{crtstuff.c} 时使用的特定标记。@xref{Initialization}。
-@findex CRTSTUFF_T_CFLAGS_S
-@item CRTSTUFF_T_CFLAGS_S
-编译共享连接的 @file{crtstuff.c} 时使用的特定标记。用于在
-@code{EXTRA-PARTS} 中使用 @file{crtbeginS.o} 和 @file{crtendS.o}
-时。@xref{Initialization}。
-@findex MULTILIB_OPTIONS
-@item MULTILIB_OPTIONS
-对于一些目标机,使用不同方式调用GCC所产生的目标对象不能被一起连接。
-例如,对于一些目标机,GCC可产生大端和小端代码。对于这些目标机,必须
-安排编译多个版本的 @file{libgcc.a},对应于每个不相兼容的选项集。当
-GCC调用连接器时,它会根据使用的命令行选项来安排连接正确版本的
+可能需要在 @file{fp-bit.c} 和 @file{dp-bit.c} 的开始处提供额外的 #define
来控制目标机大小端和其它选项。 @findex CRTSTUFF_T_CFLAGS @item CRTSTUFF_T_CFLAGS 编译
@file{crtstuff.c} 时使用的特定标记。@xref{Initialization}。 @findex
CRTSTUFF_T_CFLAGS_S @item CRTSTUFF_T_CFLAGS_S 编译共享连接的
@file{crtstuff.c} 时使用的特定标记。用于在 @code{EXTRA-PARTS} 中使用
@file{crtbeginS.o} 和 @file{crtendS.o} 时。@xref{Initialization}。@findex
MULTILIB_OPTIONS @item MULTILIB_OPTIONS
对于一些目标机,使用不同方式调用GCC所产生的目标对象不能被一起连接。例如,对于一些目标机,GCC可产生大端和小端代码。对于这些目标机,必须安排编译多个版本的
@file{libgcc.a},对应于每个不相兼容的选项集。当GCC调用连接器时,它会根据使用的命令行选项来安排连接正确版本的
 @file{libgcc.a}。

-@code{MULTILIB_OPTIONS} 宏列出了必须构建特定版本 @file{libgcc.a} 的
-选项集。将互不兼容的选项并排写出,并由斜线分隔。将可以一起使用的选项
-由空格分开。构建程序将会构建所有兼容选项的组合。
+@code{MULTILIB_OPTIONS} 宏列出了必须构建特定版本 @file{libgcc.a}
的选项集。将互不兼容的选项并排写出,并由斜线分隔。将可以一起使用的选项由空格分开。构建程序将会构建所有兼容选项的组合。

-例如,如果将 @code{MULTILIB_OPTIONS} 设置为
-@samp{m68000/m68020 msoft-float},@file{Makefile} 将会使用下列选项集
-来构建特定版本的 @file{libgcc.a}:@option{-m68000}, @option{-m68020},
-@option{-msoft-float}, @samp{-m68000 -msoft-float}, 和
-@samp{-m68020 -msoft-float}。
-@findex MULTILIB_DIRNAMES
-@item MULTILIB_DIRNAMES
-如果使用了 @code{MULTILIB_OPTIONS},该变量指定了用于存放不同库的目录名。
-@code{MULTILIB_OPTIONS} 中的每个元素,对应于 @code{MULTILIB_DIRNAMES} 中
-的每个元素。如果没有使用 @code{MULTILIB_DIRNAMES},缺省值将为
-@code{MULTILIB_OPTIONS},并使用斜线来替代空格。
+例如,如果将 @code{MULTILIB_OPTIONS} 设置为 @samp{m68000/m68020
msoft-float},@file{Makefile} 将会使用下列选项集来构建特定版本的
@file{libgcc.a}:@option{-m68000}, @option{-m68020},
@option{-msoft-float}, @samp{-m68000 -msoft-float}, 和 @samp{-m68020
-msoft-float}。@findex MULTILIB_DIRNAMES
+@item MULTILIB_DIRNAMES 如果使用了
@code{MULTILIB_OPTIONS},该变量指定了用于存放不同库的目录名。@code{MULTILIB_OPTIONS}
中的每个元素,对应于 @code{MULTILIB_DIRNAMES} 中的每个元素。如果没有使用
@code{MULTILIB_DIRNAMES},缺省值将为 @code{MULTILIB_OPTIONS},并使用斜线来替代空格。

-例如,如果 @code{MULTILIB_OPTIONS} 设置为 @samp{m68000/m68020 msoft-float},
-则 @code{MULTILIB_DIRNAMES} 的缺省值为 @samp{m68000 m68020 msoft-float}。
-如果需要不同的目录名时,可以指定不同的值。
-@findex MULTILIB_MATCHES
-@item MULTILIB_MATCHES
-有时,相同的选项可以被写成两种不同的方式。如果一个选项在
-@code{MULTILIB_OPTIONS} 式列出,GCC需要知道它的任何同义形式。这种情况下,
-将 @code{MULTILIB_MATCHES} 设置为 @samp{option=option} 形式的列表来描述
-所有相关的同义词。例如,@samp{m68000=mc68000 m68020=mc68020}。
-@findex MULTILIB_EXCEPTIONS
-@item MULTILIB_EXCEPTIONS
-有时,当 @code{MULTILIB_OPTIONS} 中指定了多个选项集时,会有些组合不能被
-构建。这种情况下,将 @code{MULTILIB_EXCEPTIONS} 设置为所有不被构建的例外。
+例如,如果 @code{MULTILIB_OPTIONS} 设置为 @samp{m68000/m68020 msoft-float},则
@code{MULTILIB_DIRNAMES} 的缺省值为 @samp{m68000 m68020
msoft-float}。如果需要不同的目录名时,可以指定不同的值。@findex MULTILIB_MATCHES @item
MULTILIB_MATCHES 有时,相同的选项可以被写成两种不同的方式。如果一个选项在 @code{MULTILIB_OPTIONS}
式列出,GCC需要知道它的任何同义形式。这种情况下,将 @code{MULTILIB_MATCHES} 设置为
@samp{option=option} 形式的列表来描述所有相关的同义词。例如,@samp{m68000=mc68000
m68020=mc68020}。 @findex MULTILIB_EXCEPTIONS @item MULTILIB_EXCEPTIONS
有时,当 @code{MULTILIB_OPTIONS} 中指定了多个选项集时,会有些组合不能被构建。这种情况下,将
@code{MULTILIB_EXCEPTIONS} 设置为所有不被构建的例外。

-例如ARM处理器不能执行同时执行硬件浮点指令和缩减大小的THUMB指令,这样就没
-有必要构建这些选项组合的库。因此将 @code{MULTILIB_EXCEPTIONS} 设为:
+例如ARM处理器不能执行同时执行硬件浮点指令和缩减大小的THUMB指令,这样就没有必要构建这些选项组合的库。因此将
@code{MULTILIB_EXCEPTIONS} 设为:

 @smallexample
 *mthumb/*mhard-float*
 @end smallexample
 @findex MULTILIB_EXTRA_OPTS
 @item MULTILIB_EXTRA_OPTS
-有时当构建多版本 @file{libgcc.a} 时,有些选项需要总是被传给编译器。这种情
-况下,将 @code{MULTILIB_EXTRA_OPTS} 设置为用于所有构建时的选项列表。如果设
-置了该宏,则可能要将 @code{CRTSTUFF_T_CFLAGS} 设置为跟在其后的破折号。
-@findex NATIVE_SYSTEM_HEADER_DIR
-@item NATIVE_SYSTEM_HEADER_DIR
-如果系统头文件的缺省位置不是 @file{/usr/include},则必须将该宏设置为包含头
-文件的目录。该值应该匹配 @code{SYSTEM_INCLUDE_DIR} 宏的值。
-@findex SPECS
-@item SPECS
-不幸的是,设置 @code{MULTILIB_EXTRA_OPTS} 并不足够,因为它并不影响目标库的
-构建,最起码对于缺省multilib的构建是这样的。一种可能的方法是使用
-@code{DRIVER_SELF_SPECS} 从 @file{specs} 文件中取得选项,就像是它们被传给了
-编译器驱动程序的命令行。但是,你不想在安装工具链之后再增加这些选项,所以你
-可以在安装原始的内嵌 @file{specs} 时,调节在构建工具链时使用的 @file{specs}
-文件。诀窍是将 @code{SPECS} 设置为其它文件名(例如 @file{specs.install}),
-然后该文件将会由内建 @file{specs} 创建出来,并且引出一个 @file{Makefile} 规
-则来生成 @file{specs} 文件,在构建时候使用。
+有时当构建多版本 @file{libgcc.a} 时,有些选项需要总是被传给编译器。这种情况下,将
@code{MULTILIB_EXTRA_OPTS} 设置为用于所有构建时的选项列表。如果设置了该宏,则可能要将
@code{CRTSTUFF_T_CFLAGS} 设置为跟在其后的破折号。 @findex NATIVE_SYSTEM_HEADER_DIR
@item NATIVE_SYSTEM_HEADER_DIR 如果系统头文件的缺省位置不是
@file{/usr/include},则必须将该宏设置为包含头文件的目录。该值应该匹配 @code{SYSTEM_INCLUDE_DIR}
宏的值。@findex SPECS @item SPECS 不幸的是,设置 @code{MULTILIB_EXTRA_OPTS}
并不足够,因为它并不影响目标库的构建,最起码对于缺省multilib的构建是这样的。一种可能的方法是使用
@code{DRIVER_SELF_SPECS} 从 @file{specs}
文件中取得选项,就像是它们被传给了编译器驱动程序的命令行。但是,你不想在安装工具链之后再增加这些选项,所以你可以在安装原始的内嵌
@file{specs} 时,调节在构建工具链时使用的 @file{specs} 文件。诀窍是将 @code{SPECS}
设置为其它文件名(例如 @file{specs.install}),然后该文件将会由内建 @file{specs} 创建出来,并且引出一个
@file{Makefile} 规则来生成 @file{specs} 文件,在构建时候使用。
 @item T_CFLAGS
 These are extra flags to pass to the C compiler.  They are used both
 when building GCC, and when compiling things with the just-built GCC@.
@@ -312,5 +243,4 @@

 @en The use of @file{x-@var{host}} fragments is discouraged.  You should only
 @en use it for makefile dependencies.
-不鼓励使用 @file{x-@var{host}} 片段。应该只在没有其它机制可以获得所需要的时候
-才使用。
+不鼓励使用 @file{x-@var{host}} 片段。应该只在没有其它机制可以获得所需要的时候才使用。
Index: include/gpl_v3.texi
===================================================================
--- include/gpl_v3.texi (revision 368)
+++ include/gpl_v3.texi (revision 374)
@@ -1,7 +1,8 @@
 @ignore
 @c Set file name and title for man page.
 @setfilename gpl
-@settitle GNU General Public License
+@en @settitle GNU General Public License
+@settitle GNU 通用公共许可
 @c man begin SEEALSO
 gfdl(7), fsf-funding(7).
 @c man end
@@ -14,720 +15,845 @@
 @end ignore
 @node Copying
 @c man begin DESCRIPTION
-@unnumbered GNU General Public License
+@en @unnumbered GNU General Public License
+@unnumbered GNU 通用公共许可
 @center Version 3, 29 June 2007

 @c This file is intended to be included in another file.

 @display
-Copyright @copyright{} 2007 Free Software Foundation, Inc.
@url{http://fsf.org/}
+@en Copyright @copyright{} 2007 Free Software Foundation, Inc.
@url{http://fsf.org/}
+版权所有 @copyright{} 2007 Free Software Foundation, Inc. @url{http://fsf.org/}

-Everyone is permitted to copy and distribute verbatim copies of this
-license document, but changing it is not allowed.
+@en Everyone is permitted to copy and distribute verbatim copies of this
+@en license document, but changing it is not allowed.
+允许所有人复制和发布本授权文件的完整版本,但不允许对它进行任何修改。
 @end display

-@heading Preamble
+@en @heading Preamble
+@heading 导言

-The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
+@en The GNU General Public License is a free, copyleft license for
+@en software and other kinds of works.
+GNU 通用公共授权是一份针对软件和其他种类作品的自由的、公共的授权文件。

-The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom
-to share and change all versions of a program--to make sure it remains
-free software for all its users.  We, the Free Software Foundation,
-use the GNU General Public License for most of our software; it
-applies also to any other work released this way by its authors.  You
-can apply it to your programs, too.
+@en The licenses for most software and other practical works are designed
+@en to take away your freedom to share and change the works.  By contrast,
+@en the GNU General Public License is intended to guarantee your freedom
+@en to share and change all versions of a program--to make sure it remains
+@en free software for all its users.  We, the Free Software Foundation,
+@en use the GNU General Public License for most of our software; it
+@en applies also to any other work released this way by its authors.  You
+@en can apply it to your programs, too.
+大多数软件授权申明被设计为剥夺您共享和修改软件的自由。相反地,GNU
通用公共授权力图保护您分享和修改自由软件地自由――以确保软件对所有使用者都是自由的。我们,自由软件基金会,对我们的大多数软件使用 GNU
通用公共授权;本授权同样适用于任何其作者以这种方式发布的软件。您也可以让您的软件使用本授权。

-When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
+@en When we speak of free software, we are referring to freedom, not
+@en price.  Our General Public Licenses are designed to make sure that you
+@en have the freedom to distribute copies of free software (and charge for
+@en them if you wish), that you receive source code or can get it if you
+@en want it, that you can change the software or use pieces of it in new
+@en free programs, and that you know you can do these things.
+当我们谈论自由软件时,我们指的是行为的自由,而非价格自由。GNU
通用公共授权被设计为确保您拥有发布自由软件副本(以及为此收费,如果您希望的话)的自由,确保您能收到源代码或者在您需要时能获取源代码,确保您能修改软件或者将它的一部分用于新的自由软件,并且确保您知道您能做这些事情。

-To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you
-have certain responsibilities if you distribute copies of the
-software, or if you modify it: responsibilities to respect the freedom
-of others.
+@en To protect your rights, we need to prevent others from denying you
+@en these rights or asking you to surrender the rights.  Therefore, you
+@en have certain responsibilities if you distribute copies of the
+@en software, or if you modify it: responsibilities to respect the freedom
+@en of others.
+为了保护您的权利,我们需要做出要求,禁止任何人否认您的这些权利或者要求您放弃这些权利。因此,如果您发布此软件的副本或者修改它,您就需要肩负起尊重他人自由的责任。

-For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too,
-receive or can get the source code.  And you must show them these
-terms so they know their rights.
+@en For example, if you distribute copies of such a program, whether
+@en gratis or for a fee, you must pass on to the recipients the same
+@en freedoms that you received.  You must make sure that they, too,
+@en receive or can get the source code.  And you must show them these
+@en terms so they know their rights.
+例如,如果您发布自由软件的副本,无论以自由还是以收费的模式,您都必须把您获得的自由同样的给予副本的接收者。您必须确保他们也能收到或者得到源代码。而且您必须向他们展示这些条款,以使他们知道自己享有这样的权利。

-Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
+@en Developers that use the GNU GPL protect your rights with two steps:
+@en (1) assert copyright on the software, and (2) offer you this License
+@en giving you legal permission to copy, distribute and/or modify it.
使用 GNU 通用公共授权的开发者通过两项措施来保护您的权利:(1)声明软件的版权;(2)向您提供本授权文件以给您复制、发布并且/或者修改软件的法律许可。

-For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
+@en For the developers' and authors' protection, the GPL clearly explains
+@en that there is no warranty for this free software.  For both users' and
+@en authors' sake, the GPL requires that modified versions be marked as
+@en changed, so that their problems will not be attributed erroneously to
+@en authors of previous versions.
+为了保护软件开发者和作者,通用公共授权明确阐释自由软件没有任何担保责任。如用户和软件作者所希望的,通用公共授权要求软件被修改过的版本必须明确标示,从而避免它们的问题被错误地归咎于先前的版本。

-Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the
-manufacturer can do so.  This is fundamentally incompatible with the
-aim of protecting users' freedom to change the software.  The
-systematic pattern of such abuse occurs in the area of products for
-individuals to use, which is precisely where it is most unacceptable.
-Therefore, we have designed this version of the GPL to prohibit the
-practice for those products.  If such problems arise substantially in
-other domains, we stand ready to extend this provision to those
-domains in future versions of the GPL, as needed to protect the
-freedom of users.
+@en Some devices are designed to deny users access to install or run
+@en modified versions of the software inside them, although the
+@en manufacturer can do so.  This is fundamentally incompatible with the
+@en aim of protecting users' freedom to change the software.  The
+@en systematic pattern of such abuse occurs in the area of products for
+@en individuals to use, which is precisely where it is most unacceptable.
+@en Therefore, we have designed this version of the GPL to prohibit the
+@en practice for those products.  If such problems arise substantially in
+@en other domains, we stand ready to extend this provision to those
+@en domains in future versions of the GPL, as needed to protect the
+@en freedom of users.
+某些设备被设计成拒绝用户安装或运行其内部软件的修改版本,尽管制造商可以安装和运行它们。这从根本上违背了通用公共授权保护用户能修改软件的自由的宗旨。此类滥用本授权的系统模式出现在了最让人无法接受的个人用户产品领域。因此,我们设计了这个版本的通用公共授权来禁止那些产品的侵权行为。如果此类问题在其他领域大量出现,我们准备好了在将来的通用公共授权版本里扩展这项规定,以保护用户的自由。

-Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish
-to avoid the special danger that patents applied to a free program
-could make it effectively proprietary.  To prevent this, the GPL
-assures that patents cannot be used to render the program non-free.
+@en Finally, every program is threatened constantly by software patents.
+@en States should not allow patents to restrict development and use of
+@en software on general-purpose computers, but in those that do, we wish
+@en to avoid the special danger that patents applied to a free program
+@en could make it effectively proprietary.  To prevent this, the GPL
+@en assures that patents cannot be used to render the program non-free.
+最后,每个程序都经常受到软件专利的威胁。政府不应该允许专利权限制通用计算机软件的发展和使用,但是在政府确实允许这种事情的地区,我们希望避免应用于自由软件的专利权使该软件有效私有化的危险。为了阻止这样的事情的发生,通用公共授权确保没有人能够使用专利权使得自由软件非自由化。

-The precise terms and conditions for copying, distribution and
-modification follow.
+@en The precise terms and conditions for copying, distribution and
+@en modification follow.
+以下是复制、分发和修改软件的详细条款和条件。

-@heading TERMS AND CONDITIONS
+@en @heading TERMS AND CONDITIONS
+@heading 条款和条件

 @enumerate 0
-@item Definitions.
+@en @item Definitions.
+@item 定义

-``This License'' refers to version 3 of the GNU General Public License.
+@en ``This License'' refers to version 3 of the GNU General Public License.
+``本授权''指 GNU 通用公共授权第三版

-``Copyright'' also means copyright-like laws that apply to other kinds
-of works, such as semiconductor masks.
+@en ``Copyright'' also means copyright-like laws that apply to other kinds
+@en of works, such as semiconductor masks.
+``版权''一词同样指适用于其他产品如半导体掩膜等的保护版权的法律。

-``The Program'' refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as ``you''.  ``Licensees'' and
-``recipients'' may be individuals or organizations.
+@en ``The Program'' refers to any copyrightable work licensed under this
+@en License.  Each licensee is addressed as ``you''.  ``Licensees'' and
+@en ``recipients'' may be individuals or organizations.
+``本程序''指任何在本授权下发布的受版权保护的作品。被授权人称为``您''。``被授权人''和``版权接受者''可以是个人或组织。

-To ``modify'' a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of
-an exact copy.  The resulting work is called a ``modified version'' of
-the earlier work or a work ``based on'' the earlier work.
+@en To ``modify'' a work means to copy from or adapt all or part of the work
+@en in a fashion requiring copyright permission, other than the making of
+@en an exact copy.  The resulting work is called a ``modified version'' of
+@en the earlier work or a work ``based on'' the earlier work.
+``修改''作品是指从软件中拷贝或者做出全部或一丁点儿的修改,这不同于逐字逐句的复制,是需要版权许可的。修改成果被称为先前作品的``修改版本''或者``基于''先前作品的软件。

-A ``covered work'' means either the unmodified Program or a work based
-on the Program.
+@en A ``covered work'' means either the unmodified Program or a work based
+@en on the Program.
+``覆盖程序''指未被修改过的本程序或者基于本程序的程序。

-To ``propagate'' a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
+@en To ``propagate'' a work means to do anything with it that, without
+@en permission, would make you directly or secondarily liable for
+@en infringement under applicable copyright law, except executing it on a
+@en computer or modifying a private copy.  Propagation includes copying,
+@en distribution (with or without modification), making available to the
+@en public, and in some countries other activities as well.
+``传播''程序指使用该程序做任何如果没有许可就会在适用的版权法下直接或间接侵权的事情,不包括在电脑上执行程序或者是做出您不与人共享的修改。传播包括复制,分发(无论修改与否),向公众共享,以及在某些国家的其他行为。

-To ``convey'' a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user
-through a computer network, with no transfer of a copy, is not
-conveying.
+@en To ``convey'' a work means any kind of propagation that enables other
+@en parties to make or receive copies.  Mere interaction with a user
+@en through a computer network, with no transfer of a copy, is not
+@en conveying.
+``发布''作品指任何让其他组织制作或者接受副本的传播行为。仅仅通过电脑网络和一个用户交流,且没有发送程序拷贝的行为不是发布。

-An interactive user interface displays ``Appropriate Legal Notices'' to
-the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
+@en An interactive user interface displays ``Appropriate Legal Notices'' to
+@en the extent that it includes a convenient and prominently visible
+@en feature that (1) displays an appropriate copyright notice, and (2)
+@en tells the user that there is no warranty for the work (except to the
+@en extent that warranties are provided), that licensees may convey the
+@en work under this License, and how to view a copy of this License.  If
+@en the interface presents a list of user commands or options, such as a
+@en menu, a prominent item in the list meets this criterion.
+一个显示``适当的法律通告''的交互的用户接口应包括这样一个方便而显著的可视部件,它具有以下功能:(1)显示一个合适的版权通告;(2)告诉用户对本程序没有任何担保责任(除非有担保明确告知),受权人可以在本授权下发布本程序,以及如果阅读本授权协议的副本。如果该接口显示了一个用户命令或选项列表,比如菜单,该列表中的选项需要符合上述规范。

-@item Source Code.
+@en @item Source Code.
+@item 源代码

-The ``source code'' for a work means the preferred form of the work for
-making modifications to it.  ``Object code'' means any non-source form
-of a work.
+@en The ``source code'' for a work means the preferred form of the work for
+@en making modifications to it.  ``Object code'' means any non-source form
+@en of a work.
+``源代码''指修改程序常用的形式。``目标代码''指程序的任何非源代码形式。

-A ``Standard Interface'' means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
+@en A ``Standard Interface'' means an interface that either is an official
+@en standard defined by a recognized standards body, or, in the case of
+@en interfaces specified for a particular programming language, one that
+@en is widely used among developers working in that language.
+``标准接口''有两种含义,一是由标准组织分支定义的官方标准;二是针对某种语言专门定义的众多接口中,在该类语言的开发者中广为使用的那种接口。

-The ``System Libraries'' of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-``Major Component'', in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
+@en The ``System Libraries'' of an executable work include anything, other
+@en than the work as a whole, that (a) is included in the normal form of
+@en packaging a Major Component, but which is not part of that Major
+@en Component, and (b) serves only to enable use of the work with that
+@en Major Component, or to implement a Standard Interface for which an
+@en implementation is available to the public in source code form.  A
+@en ``Major Component'', in this context, means a major essential component
+@en (kernel, window system, and so on) of the specific operating system
+@en (if any) on which the executable work runs, or a compiler used to
+@en produce the work, or an object code interpreter used to run it.
+可执行程序的``系统库''不是指整个程序,而是指任何包含于主要部件但不属于该部件的部分,并且只是为了使能该部件而开发,或者为了实现某些已有公开源代码的标准接口。``主要部件''在这里指的是执行程序的特定操作系统(如果有的话)的主要的关键部件(内核,窗口系统等),或者生成该可执行程序时使用的编译器,或者运行该程序的目标代码解释器。

-The ``Corresponding Source'' for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
+@en The ``Corresponding Source'' for a work in object code form means all
+@en the source code needed to generate, install, and (for an executable
+@en work) run the object code and to modify the work, including scripts to
+@en control those activities.  However, it does not include the work's
+@en System Libraries, or general-purpose tools or generally available free
+@en programs which are used unmodified in performing those activities but
+@en which are not part of the work.  For example, Corresponding Source
+@en includes interface definition files associated with source files for
+@en the work, and the source code for shared libraries and dynamically
+@en linked subprograms that the work is specifically designed to require,
+@en such as by intimate data communication or control flow between those
+@en subprograms and other parts of the work.
+目标代码中的程序``对应的源代码''指所有生成,安装,(对可执行程序而言)运行该目标代码和修改该程序所需要的源代码,包括控制这些行为的脚本。但是,它不包括程序需要的系统库,通用目的的工具,以及程序在完成某些功能时不经修改地使用的那些不包括在程序中的普遍可用的自由软件。例如,对应的源代码包括与程序的源文件相关的接口定义文件,以及共享库中的源代码和该程序设计需要的通过如频繁的数据交互或者这些子程序和该程序其他部分之间的控制流等方式获得的动态链接子程序。

-The Corresponding Source need not include anything that users can
-regenerate automatically from other parts of the Corresponding Source.
+@en The Corresponding Source need not include anything that users can
+@en regenerate automatically from other parts of the Corresponding Source.
+对应的源代码不需要包含任何拥护可以从这些资源的其他部分自动再生的资源。

-The Corresponding Source for a work in source code form is that same
-work.
+@en The Corresponding Source for a work in source code form is that same
+@en work.
+源代码形式的程序对应的源代码定义同上。

-@item Basic Permissions.
+@en @item Basic Permissions.
+@item 基本的许可

-All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
+@en All rights granted under this License are granted for the term of
+@en copyright on the Program, and are irrevocable provided the stated
+@en conditions are met.  This License explicitly affirms your unlimited
+@en permission to run the unmodified Program.  The output from running a
+@en covered work is covered by this License only if the output, given its
+@en content, constitutes a covered work.  This License acknowledges your
+@en rights of fair use or other equivalent, as provided by copyright law.
+所有在本授权协议下授予的权利都是对本程序的版权而言,并且只要所述的条件都满足了,这些授权是不能收回的。本授权明确的确认您可以不受任何限制地运行本程序的未修改版本。运行一个本授权覆盖的程序获得的结果只有在该结果的内容构成一个覆盖程序的时候才由本授权覆盖。本授权承认您正当使用或版权法规定的其它类似行为的权利。

-You may make, run and propagate covered works that you do not convey,
-without conditions so long as your license otherwise remains in force.
-You may convey covered works to others for the sole purpose of having
-them make modifications exclusively for you, or provide you with
-facilities for running those works, provided that you comply with the
-terms of this License in conveying all material for which you do not
-control copyright.  Those thus making or running the covered works for
-you must do so exclusively on your behalf, under your direction and
-control, on terms that prohibit them from making any copies of your
-copyrighted material outside their relationship with you.
+@en You may make, run and propagate covered works that you do not convey,
+@en without conditions so long as your license otherwise remains in force.
+@en You may convey covered works to others for the sole purpose of having
+@en them make modifications exclusively for you, or provide you with
+@en facilities for running those works, provided that you comply with the
+@en terms of this License in conveying all material for which you do not
+@en control copyright.  Those thus making or running the covered works for
+@en you must do so exclusively on your behalf, under your direction and
+@en control, on terms that prohibit them from making any copies of your
+@en copyrighted material outside their relationship with you.
+只要您的授权仍然有效,您可以无条件地制作,运行和传播那些您不发布的覆盖程序。只要您遵守本授权中关于发布您不具有版权的资料的条款,您可以向别人发布覆盖程序,以要求他们为您做出专门的修改或者向您提供运行这些程序的简易设备。那些为您制作或运行覆盖程序的人作为您专门的代表也必须在您的指示和控制下做到这些,请禁止他们在他们和您的关系之外制作任何您拥有版权的程序的副本。

-Conveying under any other circumstances is permitted solely under the
-conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
+@en Conveying under any other circumstances is permitted solely under the
+@en conditions stated below.  Sublicensing is not allowed; section 10
+@en makes it unnecessary.
+当下述条件满足的时候,在任何其他情况下的发布都是允许的。转授许可证授权是不允许的,第10节让它变的没有必要了。

-@item Protecting Users' Legal Rights From Anti-Circumvention Law.
+@en @item Protecting Users' Legal Rights From Anti-Circumvention Law.
+@item 保护用户的合法权利不受反破解法侵犯

-No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
+@en No covered work shall be deemed part of an effective technological
+@en measure under any applicable law fulfilling obligations under article
+@en 11 of the WIPO copyright treaty adopted on 20 December 1996, or
+@en similar laws prohibiting or restricting circumvention of such
+@en measures.
+在任何实现1996年通过的世界知识产权组织版权条约第11章中所述任务的法律,或者是禁止或限制这种破解方法的类似法律下,覆盖程序都不会被认定为有效的技术手段的一部分。

-When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such
-circumvention is effected by exercising rights under this License with
-respect to the covered work, and you disclaim any intention to limit
-operation or modification of the work as a means of enforcing, against
-the work's users, your or third parties' legal rights to forbid
-circumvention of technological measures.
+@en When you convey a covered work, you waive any legal power to forbid
+@en circumvention of technological measures to the extent such
+@en circumvention is effected by exercising rights under this License with
+@en respect to the covered work, and you disclaim any intention to limit
+@en operation or modification of the work as a means of enforcing, against
+@en the work's users, your or third parties' legal rights to forbid
+@en circumvention of technological measures.
+当您发布一个覆盖程序时,您将放弃任何禁止技术手段破解的法律力量,甚至在本授权关于覆盖程序的条款下执行权利也能完成破解。同时,您放弃任何限制用户操作或修改该覆盖程序以执行您禁止技术手段破解的合法权利的企图。

-@item Conveying Verbatim Copies.
+@en @item Conveying Verbatim Copies.
+@item 发布完整副本

-You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
+@en You may convey verbatim copies of the Program's source code as you
+@en receive it, in any medium, provided that you conspicuously and
+@en appropriately publish on each copy an appropriate copyright notice;
+@en keep intact all notices stating that this License and any
+@en non-permissive terms added in accord with section 7 apply to the code;
+@en keep intact all notices of the absence of any warranty; and give all
+@en recipients a copy of this License along with the Program.
+你可以通过任何媒介发布本程序源代码的未被修改过的完整副本,只要您显著而适当地在每个副本上发布一个合适的版权通告;保持完整所有叙述本授权和任何按照第7节加入的非许可的条款;保持完整所有的免责申明;并随程序给所有的接受者一份本授权。

-You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
+@en You may charge any price or no price for each copy that you convey,
+@en and you may offer support or warranty protection for a fee.
+您可以为您的副本收取任何价格的费用或者自由,你也可以提供技术支持或者责任担保来收取费用。

-@item Conveying Modified Source Versions.
+@en @item Conveying Modified Source Versions.
+@item 发布修改过的源码版本

-You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these
-conditions:
+@en You may convey a work based on the Program, or the modifications to
+@en produce it from the Program, in the form of source code under the
+@en terms of section 4, provided that you also meet all of these
+@en conditions:
+您可以在第 4 节的条款下以源码形式发布一个基于本程序的软件,或者从本程序中制作该软件需要进行的修改,只要您同时满足所有以下条件:

 @enumerate a
 @item
-The work must carry prominent notices stating that you modified it,
-and giving a relevant date.
+@en The work must carry prominent notices stating that you modified it,
+@en and giving a relevant date.
+制作的软件必须包含明确的通告说明您修改了它,并给出相应的修改日期。

 @item
-The work must carry prominent notices stating that it is released
-under this License and any conditions added under section 7.  This
-requirement modifies the requirement in section 4 to ``keep intact all
-notices''.
+@en The work must carry prominent notices stating that it is released
+@en under this License and any conditions added under section 7.  This
+@en requirement modifies the requirement in section 4 to ``keep intact all
+@en notices''.
+制作的软件必须包含明确的通告,陈述它在本授权下发布并指出任何按照第7节加入的条件。这条要求修改了第4节的``保持所有通知完整''的要求。

 @item
-You must license the entire work, as a whole, under this License to
-anyone who comes into possession of a copy.  This License will
-therefore apply, along with any applicable section 7 additional terms,
-to the whole of the work, and all its parts, regardless of how they
-are packaged.  This License gives no permission to license the work in
-any other way, but it does not invalidate such permission if you have
-separately received it.
+@en You must license the entire work, as a whole, under this License to
+@en anyone who comes into possession of a copy.  This License will
+@en therefore apply, along with any applicable section 7 additional terms,
+@en to the whole of the work, and all its parts, regardless of how they
+@en are packaged.  This License gives no permission to license the work in
+@en any other way, but it does not invalidate such permission if you have
+@en separately received it.
+您必须把整个软件作为一个整体向任何获取副本的人按照本授权协议授权。本授权因此会和任何按照第7节加入的条款一起,对整个软件及其所有部分,无论是以什么形式打包的,起法律效力。本授权不允许以其他任何形式授权该软件,但如果您个别地收到这样的许可,本授权并不否定该许可。

 @item
-If the work has interactive user interfaces, each must display
-Appropriate Legal Notices; however, if the Program has interactive
-interfaces that do not display Appropriate Legal Notices, your work
-need not make them do so.
+@en If the work has interactive user interfaces, each must display
+@en Appropriate Legal Notices; however, if the Program has interactive
+@en interfaces that do not display Appropriate Legal Notices, your work
+@en need not make them do so.
+如果您制作的软件包含交互的用户接口,每个用户接口都必须显示适当的法律通告;但是,如果本程序包含没有显示适当的法律通告的交互接口,您的软件没有必要修改他们让他们显示。
 @end enumerate

-A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-``aggregate'' if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
+@en A compilation of a covered work with other separate and independent
+@en works, which are not by their nature extensions of the covered work,
+@en and which are not combined with it such as to form a larger program,
+@en in or on a volume of a storage or distribution medium, is called an
+@en ``aggregate'' if the compilation and its resulting copyright are not
+@en used to limit the access or legal rights of the compilation's users
+@en beyond what the individual works permit.  Inclusion of a covered work
+@en in an aggregate does not cause this License to apply to the other
+@en parts of the aggregate.
+如果一个覆盖程序和其他本身不是该程序的扩展的程序的联合体,这样的联合的目的不是为了在某个存储或发布媒体上生成更大的程序,且联合体程序和相应产生的版权没有用来限制程序的使用或限制单个程序赋予的联合程序的用户的合法权利的时候,这样的联合体就被称为``聚集体''。在聚集体中包含覆盖程序并不会使本授权应用于该聚集体的其他部分。

-@item  Conveying Non-Source Forms.
+@en @item  Conveying Non-Source Forms.
+@item  发布非源码形式的副本

-You may convey a covered work in object code form under the terms of
-sections 4 and 5, provided that you also convey the machine-readable
-Corresponding Source under the terms of this License, in one of these
-ways:
+@en You may convey a covered work in object code form under the terms of
+@en sections 4 and 5, provided that you also convey the machine-readable
+@en Corresponding Source under the terms of this License, in one of these
+@en ways:
+您可以在第 4, 5 节条款下以目标代码形式发布程序,只要您同时以一下的一种方式在本授权条款下发布机器可读的对应的源代码:

 @enumerate a
 @item
-Convey the object code in, or embodied in, a physical product
-(including a physical distribution medium), accompanied by the
-Corresponding Source fixed on a durable physical medium customarily
-used for software interchange.
+@en Convey the object code in, or embodied in, a physical product
+@en (including a physical distribution medium), accompanied by the
+@en Corresponding Source fixed on a durable physical medium customarily
+@en used for software interchange.
+在物理产品(包括一个物理的发布媒介)中或作为其一部分发布目标代码,并在通常用于软件交换的耐用的物理媒介中发布对应的源代码。

 @item
-Convey the object code in, or embodied in, a physical product
-(including a physical distribution medium), accompanied by a written
-offer, valid for at least three years and valid for as long as you
-offer spare parts or customer support for that product model, to give
-anyone who possesses the object code either (1) a copy of the
-Corresponding Source for all the software in the product that is
-covered by this License, on a durable physical medium customarily used
-for software interchange, for a price no more than your reasonable
-cost of physically performing this conveying of source, or (2) access
-to copy the Corresponding Source from a network server at no charge.
+@en Convey the object code in, or embodied in, a physical product
+@en (including a physical distribution medium), accompanied by a written
+@en offer, valid for at least three years and valid for as long as you
+@en offer spare parts or customer support for that product model, to give
+@en anyone who possesses the object code either (1) a copy of the
+@en Corresponding Source for all the software in the product that is
+@en covered by this License, on a durable physical medium customarily used
+@en for software interchange, for a price no more than your reasonable
+@en cost of physically performing this conveying of source, or (2) access
+@en to copy the Corresponding Source from a network server at no charge.
+在物理产品(包括一个物理的发布媒介)中或作为其一部分发布目标代码,并附上有效期至少3年且与您为该产品模型提供配件或客户服务的时间等长的书面承诺,给予每个拥有该目标代码的人(1)要么在通常用于软件交换的耐用物理媒介中,以不高于您执行这种源码的发布行为所花费的合理费用的价格,一份该产品中所有由本授权覆盖的软件的对应的源代码的拷贝;(2)要么通过网络服务器自由提供这些对应源代码的访问。

 @item
-Convey individual copies of the object code with a copy of the written
-offer to provide the Corresponding Source.  This alternative is
-allowed only occasionally and noncommercially, and only if you
-received the object code with such an offer, in accord with subsection
-6b.
+@en Convey individual copies of the object code with a copy of the written
+@en offer to provide the Corresponding Source.  This alternative is
+@en allowed only occasionally and noncommercially, and only if you
+@en received the object code with such an offer, in accord with subsection
+@en 6b.
+单独地发布目标代码的副本,并附上一份提供对应源代码的书面承诺。这种行为只允许偶尔发生并不能盈利,且在您收到的目标代码附有第6节b规定的承诺的时候。

 @item
-Convey the object code by offering access from a designated place
-(gratis or for a charge), and offer equivalent access to the
-Corresponding Source in the same way through the same place at no
-further charge.  You need not require recipients to copy the
-Corresponding Source along with the object code.  If the place to copy
-the object code is a network server, the Corresponding Source may be
-on a different server (operated by you or a third party) that supports
-equivalent copying facilities, provided you maintain clear directions
-next to the object code saying where to find the Corresponding Source.
-Regardless of what server hosts the Corresponding Source, you remain
-obligated to ensure that it is available for as long as needed to
-satisfy these requirements.
+@en Convey the object code by offering access from a designated place
+@en (gratis or for a charge), and offer equivalent access to the
+@en Corresponding Source in the same way through the same place at no
+@en further charge.  You need not require recipients to copy the
+@en Corresponding Source along with the object code.  If the place to copy
+@en the object code is a network server, the Corresponding Source may be
+@en on a different server (operated by you or a third party) that supports
+@en equivalent copying facilities, provided you maintain clear directions
+@en next to the object code saying where to find the Corresponding Source.
+@en Regardless of what server hosts the Corresponding Source, you remain
+@en obligated to ensure that it is available for as long as needed to
+@en satisfy these requirements.
+在指定的地点(自由或收费地)提供发布的目标代码的访问并在同样的地点以不增加价格的方式提供对应源代码的同样的访问权。您不需要要求接收者在复制目标代码的时候一道复制对应的源代码。如果复制目标代码的地点是网络服务器,对应的源代码可以在另外一个支持相同复制功能的服务器上(由您或者第三方运作),只要您在目标代码旁边明确指出在哪里可以找到对应的源代码。无论什么样的服务器提供这些对应的源代码,您都有义务保证它在任何有需求的时候都可用,从而满足本条规定。

 @item
-Convey the object code using peer-to-peer transmission, provided you
-inform other peers where the object code and Corresponding Source of
-the work are being offered to the general public at no charge under
-subsection 6d.
+@en Convey the object code using peer-to-peer transmission, provided you
+@en inform other peers where the object code and Corresponding Source of
+@en the work are being offered to the general public at no charge under
+@en subsection 6d.
+用点对点传输发布目标代码,您需要告知其他的节点目标代码和对应的源代码在哪里按照第6节d的条款向大众自由提供。

 @end enumerate

-A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
+@en A separable portion of the object code, whose source code is excluded
+@en from the Corresponding Source as a System Library, need not be
+@en included in conveying the object code work.
+目标代码中可分离的部分,其源代码作为系统库不包含在对应的源代码中,不需要包含在发布目标代码的行为中。

-A ``User Product'' is either (1) a ``consumer product'', which means any
-tangible personal property which is normally used for personal,
-family, or household purposes, or (2) anything designed or sold for
-incorporation into a dwelling.  In determining whether a product is a
-consumer product, doubtful cases shall be resolved in favor of
-coverage.  For a particular product received by a particular user,
-``normally used'' refers to a typical or common use of that class of
-product, regardless of the status of the particular user or of the way
-in which the particular user actually uses, or expects or is expected
-to use, the product.  A product is a consumer product regardless of
-whether the product has substantial commercial, industrial or
-non-consumer uses, unless such uses represent the only significant
-mode of use of the product.
+@en A ``User Product'' is either (1) a ``consumer product'', which means any
+@en tangible personal property which is normally used for personal,
+@en family, or household purposes, or (2) anything designed or sold for
+@en incorporation into a dwelling.  In determining whether a product is a
+@en consumer product, doubtful cases shall be resolved in favor of
+@en coverage.  For a particular product received by a particular user,
+@en ``normally used'' refers to a typical or common use of that class of
+@en product, regardless of the status of the particular user or of the way
+@en in which the particular user actually uses, or expects or is expected
+@en to use, the product.  A product is a consumer product regardless of
+@en whether the product has substantial commercial, industrial or
+@en non-consumer uses, unless such uses represent the only significant
+@en mode of use of the product.
+``用户产品''指(1)``消费品'',即通常用于个人的、家庭的或日常目的的有形个人财产;或者(2)任何为公司设计或销售却卖给了个人的东西。在判断一个产品是否消费品时,有疑点的案例将以有利于覆盖面的结果加以判断。对特定用户接收到的特定产品,``正常使用''指该类产品的典型的或通常的使用,无论该用户的特殊情况,或者该用户实际使用该产品的情况,或者该产品要求的使用方式如何。一个产品是否是消费品与该产品是否具有实质的经济上的、工业的或非消费品的用处无关,除非该用处是此类产品唯一的重要使用模式。

-``Installation Information'' for a User Product means any methods,
-procedures, authorization keys, or other information required to
-install and execute modified versions of a covered work in that User
-Product from a modified version of its Corresponding Source.  The
-information must suffice to ensure that the continued functioning of
-the modified object code is in no case prevented or interfered with
-solely because modification has been made.
+@en ``Installation Information'' for a User Product means any methods,
+@en procedures, authorization keys, or other information required to
+@en install and execute modified versions of a covered work in that User
+@en Product from a modified version of its Corresponding Source.  The
+@en information must suffice to ensure that the continued functioning of
+@en the modified object code is in no case prevented or interfered with
+@en solely because modification has been made.
+用户产品的``安装信息''指从对应源码的修改版本安装和运行该用户产品中包含的覆盖程序的修改版本所需要的任何方法、过程、授权密钥或其他信息。这些信息必须足以保证修改后的目标代码不会仅仅因为被修改过而不能继续运行。

-If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
+@en If you convey an object code work under this section in, or with, or
+@en specifically for use in, a User Product, and the conveying occurs as
+@en part of a transaction in which the right of possession and use of the
+@en User Product is transferred to the recipient in perpetuity or for a
+@en fixed term (regardless of how the transaction is characterized), the
+@en Corresponding Source conveyed under this section must be accompanied
+@en by the Installation Information.  But this requirement does not apply
+@en if neither you nor any third party retains the ability to install
+@en modified object code on the User Product (for example, the work has
+@en been installed in ROM).
+如果您在本节条款下在用户产品中,或随同,或专门为了其中的使用,发布目标代码程序,而在发布过程中用户产品的所有权和使用权都永久地或在一定时期内(无论此项发布的特点如何)传递给了接收者,在本节所述的条款下发布的对应的源代码必须包含安装信息。但是如果您或者任何第三方组织都没有保留在用户产品上安装修改过的目标代码的能力(比如程序被安装在了ROM上),那么这项要求不会生效。

-The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or
-updates for a work that has been modified or installed by the
-recipient, or for the User Product in which it has been modified or
-installed.  Access to a network may be denied when the modification
-itself materially and adversely affects the operation of the network
-or violates the rules and protocols for communication across the
-network.
+@en The requirement to provide Installation Information does not include a
+@en requirement to continue to provide support service, warranty, or
+@en updates for a work that has been modified or installed by the
+@en recipient, or for the User Product in which it has been modified or
+@en installed.  Access to a network may be denied when the modification
+@en itself materially and adversely affects the operation of the network
+@en or violates the rules and protocols for communication across the
+@en network.
+提供安装信息的要求并没有要求为接收者修改或安装过的程序,或者修改或安装该程序的用户产品,继续提供支持服务、担保或升级。当修改本身实际上相反地影响了网络的运行,或者违反了网络通信的规则和协议时,网络访问可以被拒绝。

-Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
+@en Corresponding Source conveyed, and Installation Information provided,
+@en in accord with this section must be in a format that is publicly
+@en documented (and with an implementation available to the public in
+@en source code form), and must require no special password or key for
+@en unpacking, reading or copying.
+根据本节发布的对应源代码和提供的安装信息必须以公共的文件格式发布(并附加一个该类型文档的实现方法以源码形式向公众共享),解压缩、阅读或复制这些信息不能要求任何密码。

-@item Additional Terms.
+@en @item Additional Terms.
+@item 附加条款

-``Additional permissions'' are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
+@en ``Additional permissions'' are terms that supplement the terms of this
+@en License by making exceptions from one or more of its conditions.
+@en Additional permissions that are applicable to the entire Program shall
+@en be treated as though they were included in this License, to the extent
+@en that they are valid under applicable law.  If additional permissions
+@en apply only to part of the Program, that part may be used separately
+@en under those permissions, but the entire Program remains governed by
+@en this License without regard to the additional permissions.
+``附加许可''是通过允许一些本授权的特例来补充本授权的条款。只要它们在使用法律下合法,对整个程序都生效的附加许可就应当被认为是本授权的内容。如果附加许可只是对本程序的一部分生效,那么该部分可以在那些许可下独立使用,但整个程序是在本授权管理下,无论附加许可如何。

-When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
+@en When you convey a copy of a covered work, you may at your option
+@en remove any additional permissions from that copy, or from any part of
+@en it.  (Additional permissions may be written to require their own
+@en removal in certain cases when you modify the work.)  You may place
+@en additional permissions on material, added by you to a covered work,
+@en for which you have or can give appropriate copyright permission.
+当您发布覆盖程序的副本时,您可以选择删除该副本或其部分的任何附加许可。(当您修改程序时,附加许可可能要求在某些情况下将自身删除)。您可以把附加许可放在材料上,加入到您拥有或能授予版权许可的覆盖程序中。

-Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders
-of that material) supplement the terms of this License with terms:
+@en Notwithstanding any other provision of this License, for material you
+@en add to a covered work, you may (if authorized by the copyright holders
+@en of that material) supplement the terms of this License with terms:
+尽管本授权在别处有提供,对于您加入到程序中的材料,您可以(如果您由该材料的版权所有者授权的话)用以下条款补充本授权:

 @enumerate a
 @item
-Disclaiming warranty or limiting liability differently from the terms
-of sections 15 and 16 of this License; or
+@en Disclaiming warranty or limiting liability differently from the terms
+@en of sections 15 and 16 of this License; or
+拒绝担保责任或以与本授权第15和16小节条款不同的方式限制责任;或者

 @item
-Requiring preservation of specified reasonable legal notices or author
-attributions in that material or in the Appropriate Legal Notices
-displayed by works containing it; or
+@en Requiring preservation of specified reasonable legal notices or author
+@en attributions in that material or in the Appropriate Legal Notices
+@en displayed by works containing it; or
+要求保留特定的合理法律通告,或者该材料中或包含于适当法律通告中的该程序的作者贡献;或者

 @item
-Prohibiting misrepresentation of the origin of that material, or
-requiring that modified versions of such material be marked in
-reasonable ways as different from the original version; or
+@en Prohibiting misrepresentation of the origin of that material, or
+@en requiring that modified versions of such material be marked in
+@en reasonable ways as different from the original version; or
+禁止误传该材料的来源,或者要求该材料的修改版本以合理的方式标志为与原版本不同的版本;或者

 @item
-Limiting the use for publicity purposes of names of licensors or
-authors of the material; or
+@en Limiting the use for publicity purposes of names of licensors or
+@en authors of the material; or
+限制以宣传为目的的使用该材料作者或授权人的姓名;或者

 @item
-Declining to grant rights under trademark law for use of some trade
-names, trademarks, or service marks; or
+@en Declining to grant rights under trademark law for use of some trade
+@en names, trademarks, or service marks; or
+降低授权级别以在商标法下使用一些商品名称,商标或服务标记;或者

 @item
-Requiring indemnification of licensors and authors of that material by
-anyone who conveys the material (or modified versions of it) with
-contractual assumptions of liability to the recipient, for any
-liability that these contractual assumptions directly impose on those
-licensors and authors.
+@en Requiring indemnification of licensors and authors of that material by
+@en anyone who conveys the material (or modified versions of it) with
+@en contractual assumptions of liability to the recipient, for any
+@en liability that these contractual assumptions directly impose on those
+@en licensors and authors.
+要求任何发布该材料(或其修改版本)的人用对接收者的责任假设合同对授权人和材料作者进行保护,避免任何这样的假设合同直接造成授权人和作者的责任。
 @end enumerate

-All other non-permissive additional terms are considered ``further
-restrictions'' within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
+@en All other non-permissive additional terms are considered ``further
+@en restrictions'' within the meaning of section 10.  If the Program as you
+@en received it, or any part of it, contains a notice stating that it is
+@en governed by this License along with a term that is a further
+@en restriction, you may remove that term.  If a license document contains
+@en a further restriction but permits relicensing or conveying under this
+@en License, you may add to a covered work material governed by the terms
+@en of that license document, provided that the further restriction does
+@en not survive such relicensing or conveying.
+所有其他不许可的附加条款都被认为是第10节中的``进一步的约束''。如果您收到的程序或者其部分,声称自己由本授权管理,并补充了进一步约束,那么您可以删除这些约束。如果一个授权文件包含进一步约束,但是允许再次授权或者在本授权下发布,只要这样的进一步的约束在这样的再次授权或发布中无法保留下来,您就可以在覆盖程序中加入该授权文件条款管理下的材料。

-If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
+@en If you add terms to a covered work in accord with this section, you
+@en must place, in the relevant source files, a statement of the
+@en additional terms that apply to those files, or a notice indicating
+@en where to find the applicable terms.
+如果您依据本小节向覆盖程序添加条款,您必须在相关的源码文件中加入一个应用于那些文件的附加条款的声明或者指明在哪里可以找到这些条款的通告。

-Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions; the
-above requirements apply either way.
+@en Additional terms, permissive or non-permissive, may be stated in the
+@en form of a separately written license, or stated as exceptions; the
+@en above requirements apply either way.
+附加的条款,无论是许可的还是非许可的条款,都可以写在一个单独的书面授权中,或者申明为例外情况;这两种方法都可以实现上述要求。

-@item Termination.
+@en @item Termination.
+@item 终止授权

-You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
+@en You may not propagate or modify a covered work except as expressly
+@en provided under this License.  Any attempt otherwise to propagate or
+@en modify it is void, and will automatically terminate your rights under
+@en this License (including any patent licenses granted under the third
+@en paragraph of section 11).
+您只有在本授权的明确授权下才能传播或修改覆盖程序。任何其它的传播或修改覆盖程序的尝试都是非法的,并将自动终止您在本授权下获取的权利(包括依据第11节第三段条款授予的任何专利授权)。

-However, if you cease all violation of this License, then your license
-from a particular copyright holder is reinstated (a) provisionally,
-unless and until the copyright holder explicitly and finally
-terminates your license, and (b) permanently, if the copyright holder
-fails to notify you of the violation by some reasonable means prior to
-60 days after the cessation.
+@en However, if you cease all violation of this License, then your license
+@en from a particular copyright holder is reinstated (a) provisionally,
+@en unless and until the copyright holder explicitly and finally
+@en terminates your license, and (b) permanently, if the copyright holder
+@en fails to notify you of the violation by some reasonable means prior to
+@en 60 days after the cessation.
+然而,如果您停止违反本授权,那么您从某个特定版权所有者处获取的授权许可能够以以下方式恢复(a)您可以暂时地拥有授权,直到版权所有者明确地终止您的授权;(b)如果在您停止违反本授权后的60天内,版权所有者没有以某种合理的方式告知您的违背行为,那么您可以永久地获取该授权。

-Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
+@en Moreover, your license from a particular copyright holder is
+@en reinstated permanently if the copyright holder notifies you of the
+@en violation by some reasonable means, this is the first time you have
+@en received notice of violation of this License (for any work) from that
+@en copyright holder, and you cure the violation prior to 30 days after
+@en your receipt of the notice.
+进一步地,如果某个版权所有者以某种合理的方式告知您违反本授权的行为,而这是您第一次收到来自该版权所有者的违反本授权的通知(对任何软件),并且在收到通知后30天内修正了违反行为,那么您从该版权所有者处获取的授权将永久地恢复。

-Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
+@en Termination of your rights under this section does not terminate the
+@en licenses of parties who have received copies or rights from you under
+@en this License.  If your rights have been terminated and not permanently
+@en reinstated, you do not qualify to receive new licenses for the same
+@en material under section 10.
+当您的授权在本节条款下被终止时,那些从您那获取授权的组织只要保持不违反本授权协议,其授权就不会被终止。您只有在授权被版权所有者恢复了之后才有资格依据第10节的条款获取该材料的新的授权。

-@item Acceptance Not Required for Having Copies.
+@en @item Acceptance Not Required for Having Copies.
+@item 获取副本不需要接受本授权

-You are not required to accept this License in order to receive or run
-a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
+@en You are not required to accept this License in order to receive or run
+@en a copy of the Program.  Ancillary propagation of a covered work
+@en occurring solely as a consequence of using peer-to-peer transmission
+@en to receive a copy likewise does not require acceptance.  However,
+@en nothing other than this License grants you permission to propagate or
+@en modify any covered work.  These actions infringe copyright if you do
+@en not accept this License.  Therefore, by modifying or propagating a
+@en covered work, you indicate your acceptance of this License to do so.
+您不需要为了接收或运行本程序的副本而接受本授权协议。仅仅是因为点对点传输获取副本引起传播行为,也不要求您接受本授权协议。然而,除了本授权外,任何授权协议都不能授予您传播或修改覆盖程序的许可。因此,如果您修改或者传播了本程序的副本,那么您就默认地接受了本授权。

-@item Automatic Licensing of Downstream Recipients.
+@en @item Automatic Licensing of Downstream Recipients.
+@item 下游接收者的自动授权

-Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
+@en Each time you convey a covered work, the recipient automatically
+@en receives a license from the original licensors, to run, modify and
+@en propagate that work, subject to this License.  You are not responsible
+@en for enforcing compliance by third parties with this License.
+每次您发布更新的程序,接收者都自动获得一份来自原授权人的依照本授权协议运行、修改和传播该程序的授权。依据本授权,您不为执行任何第三方组织的要求负责。

-An ``entity transaction'' is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
+@en An ``entity transaction'' is a transaction transferring control of an
+@en organization, or substantially all assets of one, or subdividing an
+@en organization, or merging organizations.  If propagation of a covered
+@en work results from an entity transaction, each party to that
+@en transaction who receives a copy of the work also receives whatever
+@en licenses to the work the party's predecessor in interest had or could
+@en give under the previous paragraph, plus a right to possession of the
+@en Corresponding Source of the work from the predecessor in interest, if
+@en the predecessor has it or can get it with reasonable efforts.
+``实体事务''指转移一个组织的控制权或全部资产,或者拆分组织,或者合并组织的事务。如果覆盖程序的传播是实体事务造成的,该事务中每一个接收本程序副本的组织都将获取一份其前身拥有的或者能够依据前面的条款提供的任何授权,以及从其前身获取程序对应的源代码的权利,如果前身拥有或以合理的努力能够获取这些源代码的话。

-You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
+@en You may not impose any further restrictions on the exercise of the
+@en rights granted or affirmed under this License.  For example, you may
+@en not impose a license fee, royalty, or other charge for exercise of
+@en rights granted under this License, and you may not initiate litigation
+@en (including a cross-claim or counterclaim in a lawsuit) alleging that
+@en any patent claim is infringed by making, using, selling, offering for
+@en sale, or importing the Program or any portion of it.
+您不可以对从本授权协议获取或确认的权利的执行强加任何约束。比如,您不可以要求授权费用,版税要求或对从本授权获取的权利的执行收取任何费用。您不可以发起诉讼(包括联合诉讼和反诉)声称由于制作、使用、销售、批发或者引进本程序或其任何一部分而侵犯了任何专利权。

-@item Patents.
+@en @item Patents.
+@item 专利权

-A ``contributor'' is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's ``contributor version''.
+@en A ``contributor'' is a copyright holder who authorizes use under this
+@en License of the Program or a work on which the Program is based.  The
+@en work thus licensed is called the contributor's ``contributor version''.
+``贡献者''是在本授权下授予本程序或者本程序所基于的程序的使用权的版权所有者。这样的程序被成为贡献者的``贡献者版本''。

-A contributor's ``essential patent claims'' are all patent claims owned
-or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, ``control'' includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
+@en A contributor's ``essential patent claims'' are all patent claims owned
+@en or controlled by the contributor, whether already acquired or
+@en hereafter acquired, that would be infringed by some manner, permitted
+@en by this License, of making, using, or selling its contributor version,
+@en but do not include claims that would be infringed only as a
+@en consequence of further modification of the contributor version.  For
+@en purposes of this definition, ``control'' includes the right to grant
+@en patent sublicenses in a manner consistent with the requirements of
+@en this License.
+一个贡献者的``实质的专利申明''是该贡献者所占有和控制的全部专利,无论已经获得的还是在将来获得的,那些可能受到某种方式侵犯的专利权。本授权允许制作、使用和销售其贡献者版本,但不包括那些只会由于对贡献者版本进一步的修改而受到侵犯的专利的申明。为此,``控制''一词包括以同本授权要求一致的方式给予从属授权的权利。

-Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
+@en Each contributor grants you a non-exclusive, worldwide, royalty-free
+@en patent license under the contributor's essential patent claims, to
+@en make, use, sell, offer for sale, import and otherwise run, modify and
+@en propagate the contents of its contributor version.
+每个贡献者在该贡献者的实质的专利申明下授予您非独家的,全世界的,不需要版税的专利授权,允许您制作、使用、销售、批发、进口以及运行、修改和传播其贡献者版本内容。

-In the following three paragraphs, a ``patent license'' is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To ``grant'' such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
+@en In the following three paragraphs, a ``patent license'' is any express
+@en agreement or commitment, however denominated, not to enforce a patent
+@en (such as an express permission to practice a patent or covenant not to
+@en sue for patent infringement).  To ``grant'' such a patent license to a
+@en party means to make such an agreement or commitment not to enforce a
+@en patent against the party.
+在以下三个自然段中,``专利授权''指任何形式表达的不执行专利权的协议或承诺(例如使用专利权的口头许可,或者不为侵犯专利而起诉的契约)。向一个组织授予专利授权指做出这样的不向该组织提出强制执行专利权的承诺。

-If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  ``Knowingly relying'' means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
+@en If you convey a covered work, knowingly relying on a patent license,
+@en and the Corresponding Source of the work is not available for anyone
+@en to copy, free of charge and under the terms of this License, through a
+@en publicly available network server or other readily accessible means,
+@en then you must either (1) cause the Corresponding Source to be so
+@en available, or (2) arrange to deprive yourself of the benefit of the
+@en patent license for this particular work, or (3) arrange, in a manner
+@en consistent with the requirements of this License, to extend the patent
+@en license to downstream recipients.  ``Knowingly relying'' means you have
+@en actual knowledge that, but for the patent license, your conveying the
+@en covered work in a country, or your recipient's use of the covered work
+@en in a country, would infringe one or more identifiable patents in that
+@en country that you have reason to believe are valid.
+如果您在自己明确知道的情况下发布基于某个专利授权的覆盖程序,而这个程序的对应的源代码并不能在本授权条款下通过网络服务器或其他有效途径自由地向公众提供访问,您必须做到:(1)使对应的源代码按照上述方法可访问;或者(2)放弃从该程序的专利授权获取任何利益;或者(3)以某种与本授权要求一致的方法使该专利授权延伸到下游的接收者。``在自己明确知道的情况下''指您明确地知道除了获取专利授权外,在某个国家您传播覆盖程序的行为,或者接收者使用覆盖程序的行为,会由于该专利授权而侵犯一个或多个在该国可确认的专利权,而这些专利权您有足够的理由相信它们是有效的。

-If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
+@en If, pursuant to or in connection with a single transaction or
+@en arrangement, you convey, or propagate by procuring conveyance of, a
+@en covered work, and grant a patent license to some of the parties
+@en receiving the covered work authorizing them to use, propagate, modify
+@en or convey a specific copy of the covered work, then the patent license
+@en you grant is automatically extended to all recipients of the covered
+@en work and works based on it.
+在依照或者涉及某一次事务或安排时,如果您通过获取发布或传播覆盖程序的传输版本,并给予接收该覆盖程序的某些组织专利授权,允许他们使用,传播,修改或者发布该覆盖程序的特殊版本,那么您赋予这些组织的专利授权将自动延伸到所有该覆盖程序及基于该程序的作品的接收者。

-A patent license is ``discriminatory'' if it does not include within the
-scope of its coverage, prohibits the exercise of, or is conditioned on
-the non-exercise of one or more of the rights that are specifically
-granted under this License.  You may not convey a covered work if you
-are a party to an arrangement with a third party that is in the
-business of distributing software, under which you make payment to the
-third party based on the extent of your activity of conveying the
-work, and under which the third party grants, to any of the parties
-who would receive the covered work from you, a discriminatory patent
-license (a) in connection with copies of the covered work conveyed by
-you (or copies made from those copies), or (b) primarily for and in
-connection with specific products or compilations that contain the
-covered work, unless you entered into that arrangement, or that patent
-license was granted, prior to 28 March 2007.
+@en A patent license is ``discriminatory'' if it does not include within the
+@en scope of its coverage, prohibits the exercise of, or is conditioned on
+@en the non-exercise of one or more of the rights that are specifically
+@en granted under this License.  You may not convey a covered work if you
+@en are a party to an arrangement with a third party that is in the
+@en business of distributing software, under which you make payment to the
+@en third party based on the extent of your activity of conveying the
+@en work, and under which the third party grants, to any of the parties
+@en who would receive the covered work from you, a discriminatory patent
+@en license (a) in connection with copies of the covered work conveyed by
+@en you (or copies made from those copies), or (b) primarily for and in
+@en connection with specific products or compilations that contain the
+@en covered work, unless you entered into that arrangement, or that patent
+@en license was granted, prior to 28 March 2007.
+一份专利授权是``有偏见的'',如果它没有在自身所覆盖的范围内包含,禁止行使,或者要求不执行一个或多个本授权下明确认可的权利。以下情况,您不可以发布一个覆盖程序:如果您与软件发布行业的第三方组织有协议,而该协议要求您根据该程序的发布情况向该组织付费,同时该组织在你们的协议中赋予任何从您那里获得覆盖软件的组织一份有偏见的专利授权,要么(a)连同您所发布的副本(或者从这些副本制作的副本);要么(b)主要为了并连同某个的产品或者包含该覆盖程序的联合体。如果您签署该协议或获得该专利授权的日期早于2007年3月28日,那么您不受本条款约束。

-Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
+@en Nothing in this License shall be construed as excluding or limiting
+@en any implied license or other defenses to infringement that may
+@en otherwise be available to you under applicable patent law.
+本授权的任何部分不会被解释为拒绝或者限制任何暗含的授权或其他在适用专利权法下保护您的专利不受侵犯的措施。

-@item No Surrender of Others' Freedom.
+@en @item No Surrender of Others' Freedom.
+@item 不要放弃别人的自由

-If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey
-a covered work so as to satisfy simultaneously your obligations under
-this License and any other pertinent obligations, then as a
-consequence you may not convey it at all.  For example, if you agree
-to terms that obligate you to collect a royalty for further conveying
-from those to whom you convey the Program, the only way you could
-satisfy both those terms and this License would be to refrain entirely
-from conveying the Program.
+@en If conditions are imposed on you (whether by court order, agreement or
+@en otherwise) that contradict the conditions of this License, they do not
+@en excuse you from the conditions of this License.  If you cannot convey
+@en a covered work so as to satisfy simultaneously your obligations under
+@en this License and any other pertinent obligations, then as a
+@en consequence you may not convey it at all.  For example, if you agree
+@en to terms that obligate you to collect a royalty for further conveying
+@en from those to whom you convey the Program, the only way you could
+@en satisfy both those terms and this License would be to refrain entirely
+@en from conveying the Program.
+如果您遇到了与本授权向矛盾的情况(无论是法庭判决,合同或者其他情况),它们不能使您免去本授权的要求。如果您不能同时按照本授权中的义务和其他相关义务来发布覆盖程序,那么您将不能发布它们。比如,如果您接受了要求您向从您这里或许本程序的人收取版税的条款,您唯一能够同时满足本授权和那些条款的方法是完全不要发布本程序。

-@item Use with the GNU Affero General Public License.
+@en @item Use with the GNU Affero General Public License.
+@item 和 GNU Affero 通用公共授权一起使用

-Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
+@en Notwithstanding any other provision of this License, you have
+@en permission to link or combine any covered work with a work licensed
+@en under version 3 of the GNU Affero General Public License into a single
+@en combined work, and to convey the resulting work.  The terms of this
+@en License will continue to apply to the part which is the covered work,
+@en but the special requirements of the GNU Affero General Public License,
+@en section 13, concerning interaction through a network will apply to the
+@en combination as such.
+尽管本协议有其他防备条款,您有权把任何覆盖程序和基于第三版 GNU Affero
通用公共授权的程序链接起来,并且发布该联合程序。本授权的条款仍然对您的覆盖程序有效,但是 GNU Affero
通用公共授权第13节关于通过网络交互的要求会对整个联合体有效。

-@item Revised Versions of this License.
+@en @item Revised Versions of this License.
+@item 本授权的修订版

-The Free Software Foundation may publish revised and/or new versions
-of the GNU General Public License from time to time.  Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
+@en The Free Software Foundation may publish revised and/or new versions
+@en of the GNU General Public License from time to time.  Such new
+@en versions will be similar in spirit to the present version, but may
+@en differ in detail to address new problems or concerns.
+自由软件基金会有时候可能会发布 GNU
通用软件授权的修订版本和/或新版本。这样的新版本将会和现行版本保持精神上的一致性,但是可能会在细节上有所不同,以处理新的问题和情况。

-Each version is given a distinguishing version number.  If the Program
-specifies that a certain numbered version of the GNU General Public
-License ``or any later version'' applies to it, you have the option of
-following the terms and conditions either of that numbered version or
-of any later version published by the Free Software Foundation.  If
-the Program does not specify a version number of the GNU General
-Public License, you may choose any version ever published by the Free
-Software Foundation.
+@en Each version is given a distinguishing version number.  If the Program
+@en specifies that a certain numbered version of the GNU General Public
+@en License ``or any later version'' applies to it, you have the option of
+@en following the terms and conditions either of that numbered version or
+@en of any later version published by the Free Software Foundation.  If
+@en the Program does not specify a version number of the GNU General
+@en Public License, you may choose any version ever published by the Free
+@en Software Foundation.
+每个版本都有一个单独的版本号。如果本程序指出了应用于本程序的一个特定的 GNU
通用公共授权版本号``以及后续版本'',您将拥有选择该版本或任何由自由软件基金会发布的后续版本中的条款和条件的权利。如果本程序没有指定特定的
GNU 通用公共授权版本号,那么您可以选择任何自由软件基金会已发布的版本。

-If the Program specifies that a proxy can decide which future versions
-of the GNU General Public License can be used, that proxy's public
-statement of acceptance of a version permanently authorizes you to
-choose that version for the Program.
+@en If the Program specifies that a proxy can decide which future versions
+@en of the GNU General Public License can be used, that proxy's public
+@en statement of acceptance of a version permanently authorizes you to
+@en choose that version for the Program.
+如果本程序指出某个代理可以决定将来的GNU通用公共授权是否可以应用于本程序,那么该代理的接受任何版本的公开称述都是您选择该版本应用于本程序的永久认可。

-Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
+@en Later license versions may give you additional or different
+@en permissions.  However, no additional obligations are imposed on any
+@en author or copyright holder as a result of your choosing to follow a
+@en later version.
+后续的授权版本可能会赋予您额外的或者不同的许可。但是,您对后续版本的选择不会对任何作者和版权所有者强加任何义务。

-@item Disclaimer of Warranty.
+@en @item Disclaimer of Warranty.
+@item 免责声明

-THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM ``AS IS'' WITHOUT
-WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND
-PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE PROGRAM PROVE
-DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
-CORRECTION.
+@en THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+@en APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+@en HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM ``AS IS'' WITHOUT
+@en WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
+@en LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+@en A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND
+@en PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE PROGRAM PROVE
+@en DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
+@en CORRECTION.
+在适用法律许可下,本授权不对本程序承担任何担保责任。除非是书面申明,否则版权所有者和/或提供本程序的第三方组织,``照旧''不承担任何形式的担保责任,无论是承诺的还是暗含的,包括但不限于就适售性和为某个特殊目的的适用性的默认担保责任。有关本程序质量与效能的全部风险均由您承担。如本程序被证明有瑕疵,您应承担所有必要的服务、修复或更正的费用。

-@item Limitation of Liability.
+@en @item Limitation of Liability.
+@item 责任范围

-IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR
-CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
-ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT
-NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR
-LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM
-TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER
-PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+@en IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+@en WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR
+@en CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+@en INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
+@en ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT
+@en NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR
+@en LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM
+@en TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER
+@en PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+除非受适用法律要求或者书面同意,任何版权所有者,或任何依前述方式修改和/或发布本程序者,对于您因为使用或不能使用本程序所造成的一般性、特殊性、意外性或间接性损失,不负任何责任(包括但不限于,资料损失,资料执行不精确,或应由您或第三人承担的损失,或本程序无法与其他程序运作等),即便该版权所有者或其他组织已经被告知程序有此类损失的可能性也是如此。

-@item Interpretation of Sections 15 and 16.
+@en @item Interpretation of Sections 15 and 16.
+@item 第 15 和 16 节的解释

-If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
+@en If the disclaimer of warranty and limitation of liability provided
+@en above cannot be given local legal effect according to their terms,
+@en reviewing courts shall apply local law that most closely approximates
+@en an absolute waiver of all civil liability in connection with the
+@en Program, unless a warranty or assumption of liability accompanies a
+@en copy of the Program in return for a fee.
+如果上述免责申明和责任范围不能按照地方法律条款获得法律效力,复审法庭应该采用最接近于完全放弃关于本程序的民事责任的法律,除非随同本程序的责任担保或责任假设合同是收费的。

 @end enumerate

-@heading END OF TERMS AND CONDITIONS
+@en @heading END OF TERMS AND CONDITIONS
+@heading 条款和条件结束

-@heading How to Apply These Terms to Your New Programs
+@en @heading How to Apply These Terms to Your New Programs
+@heading 如何在您的新程序中应用这些条款

-If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these
-terms.
+@en If you develop a new program, and you want it to be of the greatest
+@en possible use to the public, the best way to achieve this is to make it
+@en free software which everyone can redistribute and change under these
+@en terms.
+如果您开发了一个新程序,并且希望能够让它尽可能地被大众使用,达成此目的的最好方式就是让它成为自由软件。任何人都能够依据这些条款对该软件再次发布和修改。

-To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the ``copyright'' line and a pointer to where the full notice is found.
+@en To do so, attach the following notices to the program.  It is safest
+@en to attach them to the start of each source file to most effectively
+@en state the exclusion of warranty; and each file should have at least
+@en the ``copyright'' line and a pointer to where the full notice is found.
+为了做到这一点,请将以下声明附加到程序上。最安全的作法,是将声明放在每份源码文件的起始处,以有效传达无担保责任的讯息;且每份文件至少应有「版权」列以及本份声明全文位置的提示。

 @smallexample
-@var{one line to give the program's name and a brief idea of what it does.}
-Copyright (C) @var{year} @var{name of author}
+@en @var{one line to give the program's name and a brief idea of what
it does.}
+@en Copyright (C) @var{year} @var{name of author}
+@var{用一行描述程序的名称与其用途简述}
+版权所有 (C) @var{年份} @var{作者姓名}

-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or (at
-your option) any later version.
+@en This program is free software: you can redistribute it and/or modify
+@en it under the terms of the GNU General Public License as published by
+@en the Free Software Foundation, either version 3 of the License, or (at
+@en your option) any later version.
+本程序为自由软件;您可依据自由软件基金会所发表的GNU通用公共授权条款,对本程序再次发布和/或修改;无论您依据的是本授权的第三版,或(您可选的)任一日后发行的版本。

-This program is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-General Public License for more details.
+@en This program is distributed in the hope that it will be useful, but
+@en WITHOUT ANY WARRANTY; without even the implied warranty of
+@en MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+@en General Public License for more details.
+本程序是基于使用目的而加以发布,然而不负任何担保责任;亦无对适售性或特定目的适用性所为的默示性担保。详情请参照 GNU 通用公共授权。

-You should have received a copy of the GNU General Public License
-along with this program.  If not, see @url{http://www.gnu.org/licenses/}.
+@en You should have received a copy of the GNU General Public License
+@en along with this program.  If not, see @url{http://www.gnu.org/licenses/}.
 @end smallexample
+您应已收到附随于本程序的 GNU 通用公共授权的副本;如果没有,请参照 @url{http://www.gnu.org/licenses/} 。

-Also add information on how to contact you by electronic and paper mail.
+@en Also add information on how to contact you by electronic and paper mail.
+同时附上如何以电子及书面信件与您联系的资料。

-If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
+@en If the program does terminal interaction, make it output a short
+@en notice like this when it starts in an interactive mode:
+如果程序进行终端交互方式运作,请在交互式模式开始时,输出以下提示:

 @smallexample
-@var{program} Copyright (C) @var{year} @var{name of author}
-This program comes with ABSOLUTELY NO WARRANTY; for details type @samp{show w}.
-This is free software, and you are welcome to redistribute it
-under certain conditions; type @samp{show c} for details.
+@en @var{program} Copyright (C) @var{year} @var{name of author}
+@en This program comes with ABSOLUTELY NO WARRANTY; for details type
@samp{show w}.
+@en This is free software, and you are welcome to redistribute it
+@en under certain conditions; type @samp{show c} for details.
+@var{程序} 版权所有 (C) @var{年份} @var{作者姓名}
+本程序不负任何担保责任,欲知详情请输入 @samp{show w}。
+这是一个自由软件,欢迎您在特定条件下再发布本程序;欲知详情请输入 @samp{show c}。
 @end smallexample

-The hypothetical commands @samp{show w} and @samp{show c} should show
-the appropriate parts of the General Public License.  Of course, your
-program's commands might be different; for a GUI interface, you would
-use an ``about box''.
+@en The hypothetical commands @samp{show w} and @samp{show c} should show
+@en the appropriate parts of the General Public License.  Of course, your
+@en program's commands might be different; for a GUI interface, you would
+@en use an ``about box''.
+所假设的指令 @samp{show w} 与 @samp{show c}
应显示通用公共授权的相对应条款。当然,您可以使用其他的指令名称;对于图形用户界面,您可以用``关于''项代实现此功能。

-You should also get your employer (if you work as a programmer) or school,
-if any, to sign a ``copyright disclaimer'' for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-@url{http://www.gnu.org/licenses/}.
+@en You should also get your employer (if you work as a programmer) or school,
+@en if any, to sign a ``copyright disclaimer'' for the program, if necessary.
+@en For more information on this, and how to apply and follow the GNU GPL, see
+@en @url{http://www.gnu.org/licenses/}.
+如有需要,您还应该取得您的雇主(若您的工作为程序设计师)或学校就本程序所签署的``版权放弃承诺书''。欲知这方面的详情,以及如何应用和遵守
GNU 通用公共授权,请参考 @url{http://www.gnu.org/licenses/}。;

-The GNU General Public License does not permit incorporating your
-program into proprietary programs.  If your program is a subroutine
-library, you may consider it more useful to permit linking proprietary
-applications with the library.  If this is what you want to do, use
-the GNU Lesser General Public License instead of this License.  But
-first, please read @url{http://www.gnu.org/philosophy/why-not-lgpl.html}.
+@en The GNU General Public License does not permit incorporating your
+@en program into proprietary programs.  If your program is a subroutine
+@en library, you may consider it more useful to permit linking proprietary
+@en applications with the library.  If this is what you want to do, use
+@en the GNU Lesser General Public License instead of this License.  But
+@en first, please read @url{http://www.gnu.org/philosophy/why-not-lgpl.html}.
+GNU 通用公共授权并不允许您将本程序合并到私有的程序中。若您的程序是一个子程序库,您可能认为允许私有的应用程序链接该库会更有用。如果这是您所想做的,请使用
GNU 松弛通用公共授权代替本授权。但这样做之前,请阅读
@url{http://www.gnu.org/philosophy/why-not-lgpl.html}。;
 @c man end
Index: tm.texi
===================================================================
--- tm.texi     (revision 368)
+++ tm.texi     (revision 374)
@@ -146,8 +146,7 @@
 @en A C expression which determines whether the option @option{-@var{char}}
 @en takes arguments.  The value should be the number of arguments that
 @en option takes--zero, for many options.
-一个C表达式,用来确定选项@option{-@var{char}}是否接受参数。
-值应该为那个选项接受的参数个数,对于许多选项其为0。
+一个C表达式,用来确定选项@option{-@var{char}}是否接受参数。值应该为那个选项接受的参数个数,对于许多选项其为0。

 @en By default, this macro is defined as
 @en @code{DEFAULT_SWITCH_TAKES_ARG}, which handles the standard options
@@ -155,10 +154,7 @@
 @en wish to add additional options which take arguments.  Any redefinition
 @en should call @code{DEFAULT_SWITCH_TAKES_ARG} and then check for
 @en additional options.
-缺省情况下,该宏被定义为@code{DEFAULT_SWITCH_TAKES_ARG},
-其可以正常处理标准的选项。除非你希望增加额外的接受参数的选项,
-否则不需要定义@code{SWITCH_TAKES_ARG}。
-任何重定义都应该先调用@code{DEFAULT_SWITCH_TAKES_ARG},然后再检查额外的选项。
+缺省情况下,该宏被定义为@code{DEFAULT_SWITCH_TAKES_ARG},其可以正常处理标准的选项。除非你希望增加额外的接受参数的选项,否则不需要定义@code{SWITCH_TAKES_ARG}。任何重定义都应该先调用@code{DEFAULT_SWITCH_TAKES_ARG},然后再检查额外的选项。
 @end defmac

 @defmac WORD_SWITCH_TAKES_ARG (@var{name})
@@ -166,9 +162,7 @@
 @en takes arguments.  The value should be the number of arguments that
 @en option takes--zero, for many options.  This macro rather than
 @en @code{SWITCH_TAKES_ARG} is used for multi-character option names.
-一个C表达式,用来确定选项@option{-@var{name}}是否接受参数。
-值应该为那个选项接受的参数个数,对于许多选项其为0。
-该宏不同于@code{SWITCH_TAKES_ARG},是用于选项名为多个字符的情况。
+一个C表达式,用来确定选项@option{-@var{name}}是否接受参数。值应该为那个选项接受的参数个数,对于许多选项其为0。该宏不同于@code{SWITCH_TAKES_ARG},是用于选项名为多个字符的情况。

 @en By default, this macro is defined as
 @en @code{DEFAULT_WORD_SWITCH_TAKES_ARG}, which handles the standard options
@@ -176,10 +170,7 @@
 @en wish to add additional options which take arguments.  Any redefinition
 @en should call @code{DEFAULT_WORD_SWITCH_TAKES_ARG} and then check for
 @en additional options.
-缺省情况下,该宏被定义为@code{DEFAULT_WORD_SWITCH_TAKES_ARG},
-其可以正常处理标准的选项。除非你希望增加额外的接受参数的选项,
-否则不需要定义@code{WORD_SWITCH_TAKES_ARG}。
-任何重定义都应该先调用@code{DEFAULT_WORD_SWITCH_TAKES_ARG},然后再检查额外的选项。
+缺省情况下,该宏被定义为@code{DEFAULT_WORD_SWITCH_TAKES_ARG},其可以正常处理标准的选项。除非你希望增加额外的接受参数的选项,否则不需要定义@code{WORD_SWITCH_TAKES_ARG}。任何重定义都应该先调用@code{DEFAULT_WORD_SWITCH_TAKES_ARG},然后再检查额外的选项。
 @end defmac

 @defmac SWITCH_CURTAILS_COMPILATION (@var{char})
@@ -187,8 +178,7 @@
 @en stops compilation before the generation of an executable.  The value is
 @en boolean, nonzero if the option does stop an executable from being
 @en generated, zero otherwise.
-一个C表达式,用来确定选项@option{-@var{char}}是否在生成可执行程序之前停止编译。
-值为布尔型,如果选项确实停止生成可执行程序则为非0,否则为0。
+一个C表达式,用来确定选项@option{-@var{char}}是否在生成可执行程序之前停止编译。值为布尔型,如果选项确实停止生成可执行程序则为非0,否则为0。

 @en By default, this macro is defined as
 @en @code{DEFAULT_SWITCH_CURTAILS_COMPILATION}, which handles the standard
@@ -197,11 +187,7 @@
 @en options which affect the generation of an executable.  Any redefinition
 @en should call @code{DEFAULT_SWITCH_CURTAILS_COMPILATION} and then check
 @en for additional options.
-缺省情况下,该宏被定义为@code{DEFAULT_SWITCH_CURTAILS_COMPILATION},
-其可以正常处理标准的选项。除非你希望增加额外的影响可执行程序生成的选项,
-否则不需要定义@code{SWITCH_CURTAILS_COMPILATION}。
-任何重定义都应该先调用@code{DEFAULT_SWITCH_CURTAILS_COMPILATION},
-然后再检查额外的选项。
+缺省情况下,该宏被定义为@code{DEFAULT_SWITCH_CURTAILS_COMPILATION},其可以正常处理标准的选项。除非你希望增加额外的影响可执行程序生成的选项,否则不需要定义@code{SWITCH_CURTAILS_COMPILATION}。任何重定义都应该先调用@code{DEFAULT_SWITCH_CURTAILS_COMPILATION},然后再检查额外的选项。
 @end defmac

 @defmac TARGET_OPTION_TRANSLATE_TABLE
@@ -216,15 +202,7 @@
 @en such as one option that enables many options, some of which select
 @en multilibs.  Example nonsensical definition, where @option{-malt-abi},
 @en @option{-EB}, and @option{-mspoo} cause different multilibs to be chosen:
-如果定义,则为字符串对(pairs of strings)列表,
-其中第一个字符串为@file{gcc}驱动程序的一个可能的命令行目标,
-第二个字符串为空格分隔的(不支持tab和其它whitespace)选项列表,
-用来替换第一个选项。
-定义该列表的目标机要负责确保结果是有效的。替换选项不可以为@code{--opt}风格的,
-它们必须为@code{-opt}风格的。该宏的目的是为选择multilib提供一种替换机制,
-例如通过一个选项可以打开许多选项,其中一些用来选择multilib。
-例如,在下面这个无意义的定义中,
-@option{-malt-abi}, @option{-EB}和@option{-mspoo}会导致不同的multilib被选择:
+如果定义,则为字符串对(pairs of
strings)列表,其中第一个字符串为@file{gcc}驱动程序的一个可能的命令行目标,第二个字符串为空格分隔的(不支持tab和其它whitespace)选项列表,用来替换第一个选项。定义该列表的目标机要负责确保结果是有效的。替换选项不可以为@code{--opt}风格的,它们必须为@code{-opt}风格的。该宏的目的是为选择multilib提供一种替换机制,例如通过一个选项可以打开许多选项,其中一些用来选择multilib。例如,在下面这个无意义的定义中,@option{-malt-abi},
@option{-EB}和@option{-mspoo}会导致不同的multilib被选择:

 @smallexample
 #define TARGET_OPTION_TRANSLATE_TABLE \
@@ -236,8 +214,7 @@
 @defmac DRIVER_SELF_SPECS
 @en A list of specs for the driver itself.  It should be a suitable
 @en initializer for an array of strings, with no surrounding braces.
-驱动器本身的specs列表。其应该为一个字符串数组的适当的初始化值,
-并且不使用大括号包裹。
+驱动器本身的specs列表。其应该为一个字符串数组的适当的初始化值,并且不使用大括号包裹。

 @en The driver applies these specs to its own command line between loading
 @en default @file{specs} files (but not command-line specified ones) and
@@ -245,16 +222,12 @@
 @en applies them in the order given, so each spec can depend on the
 @en options added by earlier ones.  It is also possible to remove options
 @en using @samp{%<@var{option}} in the usual way.
-驱动器将这些specs应用到它自己的命令行上,位于加载缺省@file{specs}文件
-(而不是由命令行指定的)和选择multilib目录或者运行任何子命令之间。
-驱动器按照给定的顺序来应用它们,所以每个spec可以依赖于先前增加的选项。
-还可以使用通常的方式,用@samp{%<@var{option}}来移除选项。
+驱动器将这些specs应用到它自己的命令行上,位于加载缺省@file{specs}文件(而不是由命令行指定的)和选择multilib目录或者运行任何子命令之间。驱动器按照给定的顺序来应用它们,所以每个spec可以依赖于先前增加的选项。还可以使用通常的方式,用@samp{%<@var{option}}来移除选项。

 @en This macro can be useful when a port has several interdependent target
 @en options.  It provides a way of standardizing the command line so
 @en that the other specs are easier to write.
-当一个port具有多个相互依赖的目标机选项时,该宏会有帮助。
-它提供了一种标准化命令行的方法,使得其它specs的书写变得容易些。
+当一个port具有多个相互依赖的目标机选项时,该宏会有帮助。它提供了一种标准化命令行的方法,使得其它specs的书写变得容易些。

 @en Do not define this macro if it does not need to do anything.
 如果不需要做任何事情的话,则不要定义该宏。
@@ -265,26 +238,19 @@
 @en @option{--with} options) in the driver.  It should be a suitable
initializer
 @en for an array of structures, each containing two strings, without the
 @en outermost pair of surrounding braces.
-一个specs列表,用于支持驱动器中的配置时(configure-time)缺省选项
-(即,@option{--with}选项)。
-其应该为一个结构体数组的适当的初始化值,每个元素包含两个字符串,
-并且不带有最外层的大括号对。
+一个specs列表,用于支持驱动器中的配置时(configure-time)缺省选项(即,@option{--with}选项)。其应该为一个结构体数组的适当的初始化值,每个元素包含两个字符串,并且不带有最外层的大括号对。

 @en The first item in the pair is the name of the default.  This must match
 @en the code in @file{config.gcc} for the target.  The second item is a spec
 @en to apply if a default with this name was specified.  The string
 @en @samp{%(VALUE)} in the spec will be replaced by the value of the default
 @en everywhere it occurs.
-字符串对的第一项为缺省名字。其必须匹配目标机的@file{config.gcc}中的代码。
-第二项为一个spec,当那个缺省名字被指定的时候会被应用。
-在spec中,字符串@samp{%(VALUE)}出现的所有地方都将被缺省值替换。
+字符串对的第一项为缺省名字。其必须匹配目标机的@file{config.gcc}中的代码。第二项为一个spec,当那个缺省名字被指定的时候会被应用。在spec中,字符串@samp{%(VALUE)}出现的所有地方都将被缺省值替换。

 @en The driver will apply these specs to its own command line between loading
 @en default @file{specs} files and processing @code{DRIVER_SELF_SPECS}, using
 @en the same mechanism as @code{DRIVER_SELF_SPECS}.
-驱动器将这些specs应用到它自己的命令行上,
-位于加载缺省@file{specs}文件和处理@code{DRIVER_SELF_SPECS}之间,
-使用与@code{DRIVER_SELF_SPECS}相同的机制。
+驱动器将这些specs应用到它自己的命令行上,位于加载缺省@file{specs}文件和处理@code{DRIVER_SELF_SPECS}之间,使用与@code{DRIVER_SELF_SPECS}相同的机制。

 @en Do not define this macro if it does not need to do anything.
 如果不需要做任何事情的话,则不要定义该宏。
@@ -294,8 +260,7 @@
 @en A C string constant that tells the GCC driver program options to
 @en pass to CPP@.  It can also specify how to translate options you
 @en give to GCC into options for GCC to pass to the CPP@.
-一个C字符串常量,告诉GCC驱动程序要传给CPP的选项。
-其还可以指定如何将你传给GCC的选项转换成GCC传给CPP的选项。
+一个C字符串常量,告诉GCC驱动程序要传给CPP的选项。其还可以指定如何将你传给GCC的选项转换成GCC传给CPP的选项。

 @en Do not define this macro if it does not need to do anything.
 如果不需要做任何事情的话,则不要定义该宏。
@@ -305,8 +270,7 @@
 @en This macro is just like @code{CPP_SPEC}, but is used for C++, rather
 @en than C@.  If you do not define this macro, then the value of
 @en @code{CPP_SPEC} (if any) will be used instead.
-该宏类似于@code{CPP_SPEC},只不过是用于C++而不是C。如果你不定义该宏,
-则会使用@code{CPP_SPEC}的值(如果存在)来替代。
+该宏类似于@code{CPP_SPEC},只不过是用于C++而不是C。如果你不定义该宏,则会使用@code{CPP_SPEC}的值(如果存在)来替代。
 @end defmac

 @defmac CC1_SPEC
@@ -315,9 +279,7 @@
 @en front ends.
 @en It can also specify how to translate options you give to GCC into options
 @en for GCC to pass to front ends.
-一个C字符串常量,告诉GCC驱动程序要传给@code{cc1}, @code{cc1plus},
-@code{f771}和其它语言前端的选项。
-其还可以指定如何将你传给GCC的选项转换成GCC传给前端的选项。
+一个C字符串常量,告诉GCC驱动程序要传给@code{cc1}, @code{cc1plus},
@code{f771}和其它语言前端的选项。其还可以指定如何将你传给GCC的选项转换成GCC传给前端的选项。

 @en Do not define this macro if it does not need to do anything.
 如果不需要做任何事情的话,则不要定义该宏。
@@ -327,16 +289,13 @@
 @en A C string constant that tells the GCC driver program options to
 @en pass to @code{cc1plus}.  It can also specify how to translate options you
 @en give to GCC into options for GCC to pass to the @code{cc1plus}.
-一个C字符串常量,告诉GCC驱动程序要传给@code{cc1plus}的选项。
-其还可以指定如何将你传给GCC的选项转换成GCC传给@code{cc1plus}的选项。
+一个C字符串常量,告诉GCC驱动程序要传给@code{cc1plus}的选项。其还可以指定如何将你传给GCC的选项转换成GCC传给@code{cc1plus}的选项。

 @en Do not define this macro if it does not need to do anything.
 @en Note that everything defined in CC1_SPEC is already passed to
 @en @code{cc1plus} so there is no need to duplicate the contents of
 @en CC1_SPEC in CC1PLUS_SPEC@.
-如果不需要做任何事情的话,则不要定义该宏。
-注意在CC1_SPEC中定义的所有选项已经被传给@code{cc1plus},
-所以不需要在CC1PLUS_SPEC中重复CC1_SPEC的内容。
+如果不需要做任何事情的话,则不要定义该宏。注意在CC1_SPEC中定义的所有选项已经被传给@code{cc1plus},所以不需要在CC1PLUS_SPEC中重复CC1_SPEC的内容。
 @end defmac

 @defmac ASM_SPEC
@@ -344,9 +303,7 @@
 @en pass to the assembler.  It can also specify how to translate options
 @en you give to GCC into options for GCC to pass to the assembler.
 @en See the file @file{sun3.h} for an example of this.
-一个C字符串常量,告诉GCC驱动程序要传给汇编器的选项。
-其还可以指定如何将你传给GCC的选项转换成GCC传给汇编器的选项。
-参见文件@file{sun3.h}中的例子。
+一个C字符串常量,告诉GCC驱动程序要传给汇编器的选项。其还可以指定如何将你传给GCC的选项转换成GCC传给汇编器的选项。参见文件@file{sun3.h}中的例子。

 @en Do not define this macro if it does not need to do anything.
 如果不需要做任何事情的话,则不要定义该宏。
@@ -357,8 +314,7 @@
 @en run any programs which cleanup after the normal assembler.
 @en Normally, this is not needed.  See the file @file{mips.h} for
 @en an example of this.
-一个C字符串常量,告诉GCC驱动程序如何在运行正常的汇编器之后,来运行任何清除程序。
-通常,不需要该宏。参见文件@file{mips.h}中的例子。
+一个C字符串常量,告诉GCC驱动程序如何在运行正常的汇编器之后,来运行任何清除程序。通常,不需要该宏。参见文件@file{mips.h}中的例子。

 @en Do not define this macro if it does not need to do anything.
 如果不需要做任何事情的话,则不要定义该宏。
@@ -370,26 +326,20 @@
 @en read from its standard input (which will be a pipe connected to the
 @en output of the compiler proper).  This argument is given after any
 @en @option{-o} option specifying the name of the output file.
-如果驱动器应该传给汇编器一个由单横线@option{-}组成的参数,
-来指示它从标准输入(其将为一个与编译器输出相连接的管道)读取时,
-则定义该宏,并且不需要给出定义值。
-该参数在任何指定输出文件名的@option{-o}选项后面被给出。
+如果驱动器应该传给汇编器一个由单横线@option{-}组成的参数,来指示它从标准输入(其将为一个与编译器输出相连接的管道)读取时,则定义该宏,并且不需要给出定义值。该参数在任何指定输出文件名的@option{-o}选项后面被给出。

 @en If you do not define this macro, the assembler is assumed to read its
 @en standard input if given no non-option arguments.  If your assembler
 @en cannot read standard input at all, use a @samp{%@{pipe:%e@}} construct;
 @en see @file{mips.h} for instance.
-如果不定义该宏,则汇编器被认为在没有传给任何非选项参数时,才从标准输入读取。
-如果你的汇编器根本不能从标准输入读取,则使用@samp{%@{pipe:%e@}};
-参见@file{mips.h}中的例子。
+如果不定义该宏,则汇编器被认为在没有传给任何非选项参数时,才从标准输入读取。如果你的汇编器根本不能从标准输入读取,则使用@samp{%@{pipe:%e@}};参见@file{mips.h}中的例子。
 @end defmac

 @defmac LINK_SPEC
 @en A C string constant that tells the GCC driver program options to
 @en pass to the linker.  It can also specify how to translate options you
 @en give to GCC into options for GCC to pass to the linker.
-一个C字符串常量,告诉GCC驱动程序要传给连接器的选项。
-其还可以指定如何将你传给GCC的选项转换成GCC传给连接器的选项。
+一个C字符串常量,告诉GCC驱动程序要传给连接器的选项。其还可以指定如何将你传给GCC的选项转换成GCC传给连接器的选项。

 @en Do not define this macro if it does not need to do anything.
 如果不需要做任何事情的话,则不要定义该宏。
@@ -399,13 +349,11 @@
 @en Another C string constant used much like @code{LINK_SPEC}.  The difference
 @en between the two is that @code{LIB_SPEC} is used at the end of the
 @en command given to the linker.
-另一个C字符串常量,与@code{LINK_SPEC}的用法很相似。
-两者的区别是@code{LIB_SPEC}用于传给连接器的命令的结尾处。
+另一个C字符串常量,与@code{LINK_SPEC}的用法很相似。两者的区别是@code{LIB_SPEC}用于传给连接器的命令的结尾处。

 @en If this macro is not defined, a default is provided that
 @en loads the standard C library from the usual place.  See @file{gcc.c}.
-如果该宏没有被定义,则提供缺省的方式,从通常的地方来加载标准C库。
-参见@file{gcc.c}。
+如果该宏没有被定义,则提供缺省的方式,从通常的地方来加载标准C库。参见@file{gcc.c}。
 @end defmac

 @defmac LIBGCC_SPEC
@@ -413,14 +361,11 @@
 @en how and when to place a reference to @file{libgcc.a} into the
 @en linker command line.  This constant is placed both before and after
 @en the value of @code{LIB_SPEC}.
-另一个C字符串常量,
-告诉GCC驱动程序如何以及什么时候将对@file{libgcc.a}的引用放到连接器的命令行中。
-该常量同时被放在@code{LIB_SPEC}的值的前面和后面。
+另一个C字符串常量,告诉GCC驱动程序如何以及什么时候将对@file{libgcc.a}的引用放到连接器的命令行中。该常量同时被放在@code{LIB_SPEC}的值的前面和后面。

 @en If this macro is not defined, the GCC driver provides a default that
 @en passes the string @option{-lgcc} to the linker.
-如果该宏没有被定义,则GCC驱动器提供了一个缺省的方式,
-将字符串@option{-lgcc}传给连接器。
+如果该宏没有被定义,则GCC驱动器提供了一个缺省的方式,将字符串@option{-lgcc}传给连接器。
 @end defmac

 @defmac REAL_LIBGCC_SPEC
@@ -433,13 +378,7 @@
 @en @code{REAL_LIBGCC_SPEC} instead.  @code{REAL_LIBGCC_SPEC} tells the
 @en driver how to place a reference to @file{libgcc} on the link command
 @en line, but, unlike @code{LIBGCC_SPEC}, it is used unmodified.
-缺省情况下,如果@code{ENABLE_SHARED_LIBGCC}被定义,
-则@code{LIBGCC_SPEC}不直接被驱动程序使用,而是根据命令行标记@option{-static},
-@option{-shared}, @option{-static-libgcc}和@option{-shared-libgcc}的值,
-进行修改,从而引用@file{libgcc.a}的不同版本。在一些目标机上,这些修改并不合适,
-这样就可以定义@code{REAL_LIBGCC_SPEC}。
-@code{REAL_LIBGCC_SPEC}告诉驱动器如何将对@file{libgcc}的引用放到连接器命令行中,
-不过不像@code{LIBGCC_SPEC},它不经过修改,被直接使用。
+缺省情况下,如果@code{ENABLE_SHARED_LIBGCC}被定义,则@code{LIBGCC_SPEC}不直接被驱动程序使用,而是根据命令行标记@option{-static},
@option{-shared},
@option{-static-libgcc}和@option{-shared-libgcc}的值,进行修改,从而引用@file{libgcc.a}的不同版本。在一些目标机上,这些修改并不合适,这样就可以定义@code{REAL_LIBGCC_SPEC}。@code{REAL_LIBGCC_SPEC}告诉驱动器如何将对@file{libgcc}的引用放到连接器命令行中,不过不像@code{LIBGCC_SPEC},它不经过修改,被直接使用。
 @end defmac

 @defmac USE_LD_AS_NEEDED
@@ -448,10 +387,7 @@
 @en generated that uses --as-needed and the shared libgcc in place of the
 @en static exception handler library, when linking without any of
 @en @code{-static}, @code{-static-libgcc}, or @code{-shared-libgcc}.
-一个宏,用于控制在@code{REAL_LIBGCC_SPEC}中提到的对@code{LIBGCC_SPEC}的修改。
-如果非0,则会生成一个spec,当不使用任何@code{-static},
-@code{-static-libgcc}或@code{-shared-libgcc}来连接的时候,
-将使用?Cas-needed和静态异常处理库所在位置的共享libgcc。
+一个宏,用于控制在@code{REAL_LIBGCC_SPEC}中提到的对@code{LIBGCC_SPEC}的修改。如果非0,则会生成一个spec,当不使用任何@code{-static},
@code{-static-libgcc}或@code{-shared-libgcc}来连接的时候,将使用?Cas-needed和静态异常处理库所在位置的共享libgcc。
 @end defmac

 @defmac LINK_EH_SPEC
@@ -459,30 +395,25 @@
 @en When @code{USE_LD_AS_NEEDED} is zero or undefined, it also affects
 @en the modifications to @code{LIBGCC_SPEC} mentioned in
 @en @code{REAL_LIBGCC_SPEC}.
-如果定义,则该C字符串常量被增加到@code{LINK_SPEC}中。
-当@code{USE_LD_AS_NEEDED}为0或者未定义时,
-其还影响在@code{REAL_LIBGCC_SPEC}中提到的对@code{LIBGCC_SPEC}的修改。
+如果定义,则该C字符串常量被增加到@code{LINK_SPEC}中。当@code{USE_LD_AS_NEEDED}为0或者未定义时,其还影响在@code{REAL_LIBGCC_SPEC}中提到的对@code{LIBGCC_SPEC}的修改。
 @end defmac

 @defmac STARTFILE_SPEC
 @en Another C string constant used much like @code{LINK_SPEC}.  The
 @en difference between the two is that @code{STARTFILE_SPEC} is used at
 @en the very beginning of the command given to the linker.
-另一个C字符串常量,与@code{LINK_SPEC}的用法很相似。
-两者的不同之处是@code{STARTFILE_SPEC}用于传给连接器的命令的最开始处。
+另一个C字符串常量,与@code{LINK_SPEC}的用法很相似。两者的不同之处是@code{STARTFILE_SPEC}用于传给连接器的命令的最开始处。

 @en If this macro is not defined, a default is provided that loads the
 @en standard C startup file from the usual place.  See @file{gcc.c}.
-如果该宏没有被定义,则会提供一种缺省方式,
-从通常的地方来加载标准C启动(startup)文件。参见@file{gcc.c}。
+如果该宏没有被定义,则会提供一种缺省方式,从通常的地方来加载标准C启动(startup)文件。参见@file{gcc.c}。
 @end defmac

 @defmac ENDFILE_SPEC
 @en Another C string constant used much like @code{LINK_SPEC}.  The
 @en difference between the two is that @code{ENDFILE_SPEC} is used at
 @en the very end of the command given to the linker.
-另一个C字符串常量,与@code{LINK_SPEC}的用法很相似。
-两者的不同之处是@code{ENDFILE_SPEC}用于传给连接器的命令的最末尾处。
+另一个C字符串常量,与@code{LINK_SPEC}的用法很相似。两者的不同之处是@code{ENDFILE_SPEC}用于传给连接器的命令的最末尾处。

 @en Do not define this macro if it does not need to do anything.
 如果不需要做任何事情的话,则不要定义该宏。
@@ -496,18 +427,14 @@
 @en blanks that names one of the recognized thread models.  @code{%*}, the
 @en default value of this macro, will expand to the value of
 @en @code{thread_file} set in @file{config.gcc}.
-GCC @code{-v}将会打印GCC被配置使用的线程模式。然而,在有些平台上这是无法工作的,
-像AIX 4.3。对于这样的平台,将@code{THREAD_MODEL_SPEC}定义为没有空格的字符串来
-命名可识别的线程模式的名字。@code{%*}为该宏的缺省值,
-将扩展为在@file{config.gcc}中设置的@code{thread_file}的值。
+GCC @code{-v}将会打印GCC被配置使用的线程模式。然而,在有些平台上这是无法工作的,像AIX
4.3。对于这样的平台,将@code{THREAD_MODEL_SPEC}定义为没有空格的字符串来命名可识别的线程模式的名字。@code{%*}为该宏的缺省值,将扩展为在@file{config.gcc}中设置的@code{thread_file}的值。
 @end defmac

 @defmac SYSROOT_SUFFIX_SPEC
 @en Define this macro to add a suffix to the target sysroot when GCC is
 @en configured with a sysroot.  This will cause GCC to search for usr/lib,
 @en et al, within sysroot+suffix.
-定义该宏,当GCC使用sysroot被配置时,来为目标机的sysroot增加一个suffix。
-这将导致GCC在sysroot+suffix下查找usr/lib等。
+定义该宏,当GCC使用sysroot被配置时,来为目标机的sysroot增加一个suffix。这将导致GCC在sysroot+suffix下查找usr/lib等。
 @end defmac

 @defmac SYSROOT_HEADERS_SUFFIX_SPEC
@@ -515,23 +442,19 @@
 @en GCC is configured with a sysroot.  This will cause GCC to pass the
 @en updated sysroot+headers_suffix to CPP, causing it to search for
 @en usr/include, et al, within sysroot+headers_suffix.
-定义该宏,当GCC使用sysroot被配置时,来为目标机的sysroot增加一个headers_suffix。
-这将导致GCC将更新的sysroot+headers_suffix传给CPP,
-使其在sysroot+headers_suffix下查找usr/include等。
+定义该宏,当GCC使用sysroot被配置时,来为目标机的sysroot增加一个headers_suffix。这将导致GCC将更新的sysroot+headers_suffix传给CPP,使其在sysroot+headers_suffix下查找usr/include等。
 @end defmac

 @defmac EXTRA_SPECS
 @en Define this macro to provide additional specifications to put in the
 @en @file{specs} file that can be used in various specifications like
 @en @code{CC1_SPEC}.
-定义该宏,来提供放在@file{specs}文件中,
-可以被各种specification,像@code{CC1_SPEC},使用的额外的specification。
+定义该宏,来提供放在@file{specs}文件中,可以被各种specification,像@code{CC1_SPEC},使用的额外的specification。

 @en The definition should be an initializer for an array of structures,
 @en containing a string constant, that defines the specification name, and a
 @en string constant that provides the specification.
-定义应该为一个结构体数组的初始化值,其包含一个字符串常量,
-定义了specification的名字,以及一个字符串常量,提供相应的specification。
+定义应该为一个结构体数组的初始化值,其包含一个字符串常量,定义了specification的名字,以及一个字符串常量,提供相应的specification。

 @en Do not define this macro if it does not need to do anything.
 如果不需要做任何事情的话,则不要定义该宏。
@@ -540,16 +463,13 @@
 @en related targets, which have various @code{@dots{}_SPECS} which are similar
 @en to each other, and the maintainer would like one central place to keep
 @en these definitions.
-当一种体系结构包含多个相关的目标机,所具有的各种@code{@dots{}_SPECS}彼此很相似
-的时候,@code{EXTRA_SPECS}会很有用,维护者会希望有一个地方来集中保存这些定义。
+当一种体系结构包含多个相关的目标机,所具有的各种@code{@dots{}_SPECS}彼此很相似的时候,@code{EXTRA_SPECS}会很有用,维护者会希望有一个地方来集中保存这些定义。

 @en For example, the PowerPC System V.4 targets use @code{EXTRA_SPECS} to
 @en define either @code{_CALL_SYSV} when the System V calling sequence is
 @en used or @code{_CALL_AIX} when the older AIX-based calling sequence is
 @en used.
-例如,PowerPC System V.4的目标机使用@code{EXTRA_SPECS},
-在System V调用序列被使用时,来定义@code{_CALL_SYSV},
-在较老的基于AIX的调用序列被使用时,来定义@code{_CALL_AIX}。
+例如,PowerPC System V.4的目标机使用@code{EXTRA_SPECS},在System
V调用序列被使用时,来定义@code{_CALL_SYSV},在较老的基于AIX的调用序列被使用时,来定义@code{_CALL_AIX}。

 @en The @file{config/rs6000/rs6000.h} target file defines:
 @file{config/rs6000/rs6000.h}目标机文件这样定义:
@@ -589,8 +509,7 @@
 @en Define this macro if the driver program should find the library
 @en @file{libgcc.a}.  If you do not define this macro, the driver
program will pass
 @en the argument @option{-lgcc} to tell the linker to do the search.
-定义该宏,如果驱动程序应该找到库@file{libgcc.a}。
-如果没有定义该宏,则驱动程序将参数@option{-lgcc}传给连接器,告诉连接器来查找。
+定义该宏,如果驱动程序应该找到库@file{libgcc.a}。如果没有定义该宏,则驱动程序将参数@option{-lgcc}传给连接器,告诉连接器来查找。
 @end defmac

 @defmac LINK_GCC_C_SEQUENCE_SPEC
@@ -607,19 +526,14 @@
 @en line for invoking the linker and there is no other way to accomplish
 @en the effect you need.  Overriding this macro may be avoidable by overriding
 @en @code{LINK_GCC_C_SEQUENCE_SPEC} instead.
-一个C字符串常量,给出执行连接器所需的完整的命令行。当定义时,
-每次在@file{gcc.c}中对连接器命令行的修改,你都需要更新你的port。
-因此,只有当你需要完全重定义所调用的连接器的命令行,并且没有其他方式来完成时,
-才定义该宏。可以通过@code{LINK_GCC_C_SEQUENCE_SPEC}来替代该宏。
+一个C字符串常量,给出执行连接器所需的完整的命令行。当定义时,每次在@file{gcc.c}中对连接器命令行的修改,你都需要更新你的port。因此,只有当你需要完全重定义所调用的连接器的命令行,并且没有其他方式来完成时,才定义该宏。可以通过@code{LINK_GCC_C_SEQUENCE_SPEC}来替代该宏。
 @end defmac

 @defmac LINK_ELIMINATE_DUPLICATE_LDIRECTORIES
 @en A nonzero value causes @command{collect2} to remove duplicate
@option{-L@var{directory}} search
 @en directories from linking commands.  Do not give it a nonzero value if
 @en removing duplicate search directories changes the linker's semantics.
-一个非零值,
-使得@command{collect2}从连接命令中移除重复的@option{-L@var{directory}}搜索目录。
-如果移除重复的搜索目录会改变连接器的语法,则不要定义为非零。
+一个非零值,使得@command{collect2}从连接命令中移除重复的@option{-L@var{directory}}搜索目录。如果移除重复的搜索目录会改变连接器的语法,则不要定义为非零。
 @end defmac

 @defmac MULTILIB_DEFAULTS
@@ -627,25 +541,20 @@
 @en string to tell the driver program which options are defaults for this
 @en target and thus do not need to be handled specially when using
 @en @code{MULTILIB_OPTIONS}.
-定义该宏为字符串数组的初始化C表达式,用来告诉驱动器程序对于该目标机,
-哪些选项是缺省的,因此当使用@code{MULTILIB_OPTIONS}时,不需要单独处理。
+定义该宏为字符串数组的初始化C表达式,用来告诉驱动器程序对于该目标机,哪些选项是缺省的,因此当使用@code{MULTILIB_OPTIONS}时,不需要单独处理。

 @en Do not define this macro if @code{MULTILIB_OPTIONS} is not defined in
 @en the target makefile fragment or if none of the options listed in
 @en @code{MULTILIB_OPTIONS} are set by default.
 @en @xref{Target Fragment}.
-如果在target makefile片段中没有定义@code{MULTILIB_OPTIONS},
-或者如果在@code{MULTILIB_OPTIONS}中列出的选项中没有被设为缺省的,
-则不要定义该宏。@xref{Target Fragment}。
+如果在target 
makefile片段中没有定义@code{MULTILIB_OPTIONS},或者如果在@code{MULTILIB_OPTIONS}中列出的选项中没有被设为缺省的,则不要定义该宏。@xref{Target
Fragment}。
 @end defmac

 @defmac RELATIVE_PREFIX_NOT_LINKDIR
 @en Define this macro to tell @command{gcc} that it should only translate
 @en a @option{-B} prefix into a @option{-L} linker option if the prefix
 @en indicates an absolute file name.
-定义该宏来告诉@command{gcc},
-如果前缀指示了一个绝对的文件名,
-则其应该只将@option{-B}的前缀转换成@option{-L}连接器选项,
+定义该宏来告诉@command{gcc},如果前缀指示了一个绝对的文件名,则其应该只将@option{-B}的前缀转换成@option{-L}连接器选项。
 @end defmac

 @defmac MD_EXEC_PREFIX
@@ -654,10 +563,7 @@
 @en when the compiler is built as a cross
 @en compiler.  If you define @code{MD_EXEC_PREFIX}, then be sure to add it
 @en to the list of directories used to find the assembler in
@file{configure.in}.
-如果定义,该宏为一个可选前缀,其在@code{STANDARD_EXEC_PREFIX}之后进行尝试。
-当使用@option{-b}选项,或者编译器被构建为交叉编译器时,
-将不搜索@code{MD_EXEC_PREFIX}。如果你定义了@code{MD_EXEC_PREFIX},
-则要确保将其增加到@file{configure.in}中用于查找汇编器的目录列表中。
+如果定义,该宏为一个可选前缀,其在@code{STANDARD_EXEC_PREFIX}之后进行尝试。当使用@option{-b}选项,或者编译器被构建为交叉编译器时,将不搜索@code{MD_EXEC_PREFIX}。如果你定义了@code{MD_EXEC_PREFIX},则要确保将其增加到@file{configure.in}中用于查找汇编器的目录列表中。
 @end defmac

 @defmac STANDARD_STARTFILE_PREFIX
@@ -666,9 +572,7 @@
 @en try when searching for startup files such as @file{crt0.o}.
 @en @code{STANDARD_STARTFILE_PREFIX} is not searched when the compiler
 @en is built as a cross compiler.
-定义该宏为C字符串常量,
-如果你希望覆盖将@code{libdir}作为前缀来搜索起始文件@file{crt0.o}等的标准选择。
-当构建为交叉编译器时,@code{STANDARD_STARTFILE_PREFIX}不被搜索。
+定义该宏为C字符串常量,如果你希望覆盖将@code{libdir}作为前缀来搜索起始文件@file{crt0.o}等的标准选择。当构建为交叉编译器时,@code{STANDARD_STARTFILE_PREFIX}不被搜索。
 @end defmac

 @defmac STANDARD_STARTFILE_PREFIX_1
@@ -677,9 +581,7 @@
 @en when searching for startup files such as @file{crt0.o}.
 @en @code{STANDARD_STARTFILE_PREFIX_1} is not searched when the compiler
 @en is built as a cross compiler.
-定义该宏为C字符串常量,如果你希望覆盖在缺省前缀之后,
-将@code{/lib}作为前缀来搜索起始文件@file{crt0.o}等的标准选择。
-当构建为交叉编译器时,@code{STANDARD_STARTFILE_PREFIX_1}不被搜索。
+定义该宏为C字符串常量,如果你希望覆盖在缺省前缀之后,将@code{/lib}作为前缀来搜索起始文件@file{crt0.o}等的标准选择。当构建为交叉编译器时,@code{STANDARD_STARTFILE_PREFIX_1}不被搜索。
 @end defmac

 @defmac STANDARD_STARTFILE_PREFIX_2
@@ -688,26 +590,21 @@
 @en default prefix when searching for startup files such as @file{crt0.o}.
 @en @code{STANDARD_STARTFILE_PREFIX_2} is not searched when the compiler
 @en is built as a cross compiler.
-定义该宏为C字符串常量,如果你希望覆盖在缺省前缀之后,
-将@code{/lib}作为前缀来搜索起始文件@file{crt0.o}等的标准选择。
-当构建为交叉编译器时,@code{STANDARD_STARTFILE_PREFIX_2}不被搜索。
+定义该宏为C字符串常量,如果你希望覆盖在缺省前缀之后,将@code{/lib}作为前缀来搜索起始文件@file{crt0.o}等的标准选择。当构建为交叉编译器时,@code{STANDARD_STARTFILE_PREFIX_2}不被搜索。
 @end defmac

 @defmac MD_STARTFILE_PREFIX
 @en If defined, this macro supplies an additional prefix to try after the
 @en standard prefixes.  @code{MD_EXEC_PREFIX} is not searched when the
 @en compiler is built as a cross compiler.
-如果定义,该宏提供了额外的前缀,在标准前缀之后被尝试。
-当使用@option{-b}选项,或者编译器被构建为交叉编译器时,
-将不搜索@code{MD_EXEC_PREFIX}。
+如果定义,该宏提供了额外的前缀,在标准前缀之后被尝试。当使用@option{-b}选项,或者编译器被构建为交叉编译器时,将不搜索@code{MD_EXEC_PREFIX}。
 @end defmac

 @defmac MD_STARTFILE_PREFIX_1
 @en If defined, this macro supplies yet another prefix to try after the
 @en standard prefixes.  It is not searched when the compiler is built as a
 @en cross compiler.
-如果定义,该宏提供了另一个额外的前缀,在标准前缀之后被尝试。
-当使用@option{-b}选项,或者编译器被构建为交叉编译器时,其将不被搜索。
+如果定义,该宏提供了另一个额外的前缀,在标准前缀之后被尝试。当使用@option{-b}选项,或者编译器被构建为交叉编译器时,其将不被搜索。
 @end defmac

 @defmac INIT_ENVIRONMENT
@@ -715,8 +612,7 @@
 @en variables for programs called by the driver, such as the assembler and
 @en loader.  The driver passes the value of this macro to @code{putenv} to
 @en initialize the necessary environment variables.
-定义该宏为C字符串常量,如果你希望为驱动器调用的程序,例如汇编器和连接器,
-来设置的环境变量。驱动器将该宏的值传给@code{putenv}来初始化需要的环境变量。
+定义该宏为C字符串常量,如果你希望为驱动器调用的程序,例如汇编器和连接器,来设置的环境变量。驱动器将该宏的值传给@code{putenv}来初始化需要的环境变量。
 @end defmac

 @defmac LOCAL_INCLUDE_DIR
@@ -724,9 +620,7 @@
 @en standard choice of @file{/usr/local/include} as the default prefix to
 @en try when searching for local header files.  @code{LOCAL_INCLUDE_DIR}
 @en comes before @code{SYSTEM_INCLUDE_DIR} in the search order.
-定义该宏为C字符串常量,如果你希望覆写当尝试搜索局部头文件时,
-将@file{/usr/local/include}作为缺省前缀的标准选择。
-在搜索顺序中,@code{LOCAL_INCLUDE_DIR}位于@code{SYSTEM_INCLUDE_DIR}之前。
+定义该宏为C字符串常量,如果你希望覆写当尝试搜索局部头文件时,将@file{/usr/local/include}作为缺省前缀的标准选择。在搜索顺序中,@code{LOCAL_INCLUDE_DIR}位于@code{SYSTEM_INCLUDE_DIR}之前。

 @en Cross compilers do not search either @file{/usr/local/include} or its
 @en replacement.
@@ -738,9 +632,7 @@
 @en system-specific directory to search for header files before the standard
 @en directory.  @code{SYSTEM_INCLUDE_DIR} comes before
 @en @code{STANDARD_INCLUDE_DIR} in the search order.
-定义该宏作为C字符串常量,
-如果你希望指定一个系统特定的目录在标准目录之前来搜索头文件。
-在搜索顺序中,@code{SYSTEM_INCLUDE_DIR}位于@code{STANDARD_INCLUDE_DIR}之前。
+定义该宏作为C字符串常量,如果你希望指定一个系统特定的目录在标准目录之前来搜索头文件。在搜索顺序中,@code{SYSTEM_INCLUDE_DIR}位于@code{STANDARD_INCLUDE_DIR}之前。

 @en Cross compilers do not use this macro and do not search the directory
 @en specified.
@@ -751,8 +643,7 @@
 @en Define this macro as a C string constant if you wish to override the
 @en standard choice of @file{/usr/include} as the default prefix to
 @en try when searching for header files.
-定义该宏为C字符串常量,
-如果你希望覆写将@file{/usr/include}作为缺省前缀来尝试搜索头文件的标准选择。
+定义该宏为C字符串常量,如果你希望覆写将@file{/usr/include}作为缺省前缀来尝试搜索头文件的标准选择。

 @en Cross compilers ignore this macro and do not search either
 @en @file{/usr/include} or its replacement.
@@ -763,8 +654,7 @@
 @en The ``component'' corresponding to @code{STANDARD_INCLUDE_DIR}.
 @en See @code{INCLUDE_DEFAULTS}, below, for the description of components.
 @en If you do not define this macro, no component is used.
-“component”对应于@code{STANDARD_INCLUDE_DIR}。关于组件的描述,
-参见下面的@code{INCLUDE_DEFAULTS}。如果你没有定义该宏,则不使用组件。
+“component”对应于@code{STANDARD_INCLUDE_DIR}。关于组件的描述,参见下面的@code{INCLUDE_DEFAULTS}。如果你没有定义该宏,则不使用组件。
 @end defmac

 @defmac INCLUDE_DEFAULTS
@@ -776,8 +666,7 @@
 @en and @code{GCC_INCLUDE_DIR} are defined automatically by @file{Makefile},
 @en and specify private search areas for GCC@.  The directory
 @en @code{GPLUSPLUS_INCLUDE_DIR} is used only for C++ programs.
-定义该宏,如果你希望覆写include文件的全部缺省搜索路径。对于一个本地编译器,
-缺省搜索路径通常由@code{GCC_INCLUDE_DIR}, @code{LOCAL_INCLUDE_DIR},
+定义该宏,如果你希望覆写include文件的全部缺省搜索路径。对于一个本地编译器,缺省搜索路径通常由@code{GCC_INCLUDE_DIR},
@code{LOCAL_INCLUDE_DIR},
 @code{SYSTEM_INCLUDE_DIR}, @code{GPLUSPLUS_INCLUDE_DIR}和
 @code{STANDARD_INCLUDE_DIR}组成。另外,@code{GPLUSPLUS_INCLUDE_DIR}和
 @code{GCC_INCLUDE_DIR}由@file{Makefile}自动定义,并指定为GCC的私有搜索区域。
@@ -790,20 +679,14 @@
 @en and a flag showing that the includes in the directory don't need to be
 @en wrapped in @code{extern @samp{C}} when compiling C++.  Mark the end of
 @en the array with a null element.
-该定义为一个结构体数组的初始化值。
-每个数组元素具有四个元素:目录名(字符串常量),
-组件名(也是字符串常量),一个标志用来指示只用于C++,
-以及一个标志用来表示当编译C++时,对该目录下include进来的代码,
-不需要使用@code{extern @samp{C}}进行包裹。
-使用空元素来标记数组的结尾。
+该定义为一个结构体数组的初始化值。每个数组元素具有四个元素:目录名(字符串常量),组件名(也是字符串常量),一个标志用来指示只用于C++,以及一个标志用来表示当编译C++时,对该目录下include进来的代码,不需要使用@code{extern
@samp{C}}进行包裹。使用空元素来标记数组的结尾。

 @en The component name denotes what GNU package the include file is part of,
 @en if any, in all uppercase letters.  For example, it might be @samp{GCC}
 @en or @samp{BINUTILS}.  If the package is part of a vendor-supplied
 @en operating system, code the component name as @samp{0}.
 组件名指出了include文件属于什么GNU包,如果存在,则全部使用大写字母。
-例如,可能为@samp{GCC}或@samp{BINUTILS}。
-如果程序包是商家提供的操作系统的一部分,则将名字写为@samp{0}。
+例如,可能为@samp{GCC}或@samp{BINUTILS}。如果程序包是商家提供的操作系统的一部分,则将名字写为@samp{0}。

 @en For example, here is the definition used for VAX/VMS:
 例如,这是用于VAX/VMS的定义:
@@ -854,9 +737,7 @@
 用户使用@option{-B}指定的前缀。

 @item
-环境变量@code{GCC_EXEC_PREFIX},
-或者如果@code{GCC_EXEC_PREFIX}没有被设置并且编译器没有被安装到配置时的@var{prefix}处,
-则搜索编译器实际被安装的位置。
+环境变量@code{GCC_EXEC_PREFIX},或者如果@code{GCC_EXEC_PREFIX}没有被设置并且编译器没有被安装到配置时的@var{prefix}处,则搜索编译器实际被安装的位置。

 @item
 环境变量@code{COMPILER_PATH}指定的目录。
@@ -931,12 +812,10 @@
 环境变量@code{GCC_EXEC_PREFIX},或者基于工具链的安装位置被自动确定的值。

 @item
-由环境变量@code{LIBRARY_PATH}指定的目录(或者port特定的名字,只用于本地编译器,
-交叉编译器不使用)。
+由环境变量@code{LIBRARY_PATH}指定的目录(或者port特定的名字,只用于本地编译器,交叉编译器不使用)。

 @item
-宏@code{STANDARD_EXEC_PREFIX},但只当工具链被安装在配置的@var{prefix}处,
-或者为本地编译器。
+宏@code{STANDARD_EXEC_PREFIX},但只当工具链被安装在配置的@var{prefix}处,或者为本地编译器。

 @item
 位置@file{/usr/lib/gcc/},仅当是本地编译器。
@@ -953,17 +832,13 @@
 仅当为本地编译器,或者具有目标机系统根目录。

 @item
-宏@code{STANDARD_STARTFILE_PREFIX},带有任何sysroot的修改。
-如果该路径相关,则会加上@code{GCC_EXEC_PREFIX}前缀和机器后缀,
-或者@code{STANDARD_EXEC_PREFIX}和机器后缀。
+宏@code{STANDARD_STARTFILE_PREFIX},带有任何sysroot的修改。如果该路径相关,则会加上@code{GCC_EXEC_PREFIX}前缀和机器后缀,或者@code{STANDARD_EXEC_PREFIX}和机器后缀。

 @item
-宏@code{STANDARD_STARTFILE_PREFIX_1},仅当为本地编译器,
-或者具有目标机系统根目录。该宏的缺省值为@file{/lib/}。
+宏@code{STANDARD_STARTFILE_PREFIX_1},仅当为本地编译器,或者具有目标机系统根目录。该宏的缺省值为@file{/lib/}。

 @item
-宏@code{STANDARD_STARTFILE_PREFIX_2},仅当为本地编译器,
-或者具有目标机系统根目录。该宏的缺省值为@file{/usr/lib/}。
+宏@code{STANDARD_STARTFILE_PREFIX_2},仅当为本地编译器,或者具有目标机系统根目录。该宏的缺省值为@file{/usr/lib/}。
 @end enumerate

 @en @node Run-time Target
@@ -986,18 +861,13 @@
 @en calls this macro it provides a trailing semicolon, and since it has
 @en finished command line option processing your code can use those
 @en results freely.
-该类函数的宏扩展成一块代码,其定义了target CPU内建的预处理器宏和断言,
-使用函数@code{builtin_define}, @code{builtin_define_std}和
-@code{builtin_assert}。当前端调用该宏时,其提供一个尾部的分号,
-由于其已经结束了命令行选项处理,所以你的代码可以自由的使用那些结果。
+该类函数的宏扩展成一块代码,其定义了target CPU内建的预处理器宏和断言,使用函数@code{builtin_define},
@code{builtin_define_std}和@code{builtin_assert}。当前端调用该宏时,其提供一个尾部的分号,由于其已经结束了命令行选项处理,所以你的代码可以自由的使用那些结果。

 @en @code{builtin_assert} takes a string in the form you pass to the
 @en command-line option @option{-A}, such as @code{cpu=mips}, and creates
 @en the assertion.  @code{builtin_define} takes a string in the form
 @en accepted by option @option{-D} and unconditionally defines the macro.
-@code{builtin_assert}接受一个字符串,按照传给命令行选项@option{-A}的形式,
-例如@code{cpu=mips},并且创建一个断言。@code{builtin_define}接受一个字符串,
-按照传给命令行选项@option{-D}的形式,并且无条件的定义一个宏。
+@code{builtin_assert}接受一个字符串,按照传给命令行选项@option{-A}的形式,例如@code{cpu=mips},并且创建一个断言。@code{builtin_define}接受一个字符串,按照传给命令行选项@option{-D}的形式,并且无条件的定义一个宏。

 @en @code{builtin_define_std} takes a string representing the name of an
 @en object-like macro.  If it doesn't lie in the user's namespace,
@@ -1009,12 +879,7 @@
 @en and possibly @code{unix}; passing @code{_mips} defines @code{__mips},
 @en @code{__mips__} and possibly @code{_mips}, and passing @code{_ABI64}
 @en defines only @code{_ABI64}.
-@code{builtin_define_std}接受一个字符串,来表示对象的名字。
-如果其不在用户命名空间,则@code{builtin_define_std}无条件的定义它。否则,
-定义一个具有两个前导下划线的版本,和另一个具有两个前导和后缀的下划线的版本。
-例如传递@code{unix},将定义@code{__unix}, @code{__unix__}以及可能的@code{unix};
-传递@code{_mips},将定义@code{__mips}, @code{__mips__}和可能的@code{_mips},
-传递@code{_ABI64},将指定义@code{_ABI64}。
+@code{builtin_define_std}接受一个字符串,来表示对象的名字。如果其不在用户命名空间,则@code{builtin_define_std}无条件的定义它。否则,定义一个具有两个前导下划线的版本,和另一个具有两个前导和后缀的下划线的版本。例如传递@code{unix},将定义@code{__unix},
@code{__unix__}以及可能的@code{unix};传递@code{_mips},将定义@code{__mips},
@code{__mips__}和可能的@code{_mips},传递@code{_ABI64},将指定义@code{_ABI64}。

 @en You can also test for the C dialect being compiled.  The variable
 @en @code{c_language} is set to one of @code{clk_c}, @code{clk_cplusplus}
@@ -1025,11 +890,7 @@
 @en variable @code{flag_iso} can be used.  The function-like macro
 @en @code{preprocessing_trad_p()} can be used to check for traditional
 @en preprocessing.
-你还可以测试被编译的C方言。变量@code{c_language}被设为@code{clk_c},
-@code{clk_cplusplus}或者@code{clk_objective_c}。注意,如果我们在预处理汇编,
-则该变量将为@code{clk_c},不过类函数的宏@code{preprocessing_asm_p()}将返回真,
-所以你可能要先检查它。如果你需要检查严格的ANSI,可以使用变量@code{flag_iso}。
-类函数的宏@code{preprocessing_trad_p()}可以用来检查传统的预处理。
+你还可以测试被编译的C方言。变量@code{c_language}被设为@code{clk_c},
@code{clk_cplusplus}或者@code{clk_objective_c}。注意,如果我们在预处理汇编,则该变量将为@code{clk_c},不过类函数的宏@code{preprocessing_asm_p()}将返回真,所以你可能要先检查它。如果你需要检查严格的ANSI,可以使用变量@code{flag_iso}。类函数的宏@code{preprocessing_trad_p()}可以用来检查传统的预处理。
 @end defmac

 @defmac TARGET_OS_CPP_BUILTINS ()
@@ -1043,15 +904,13 @@
 @en and is used for the target object format.  @file{elfos.h} uses this
 @en macro to define @code{__ELF__}, so you probably do not need to define
 @en it yourself.
-类似于@code{TARGET_CPU_CPP_BUILTINS},不过该宏是可选的,用于target目标文件格式。
-@file{elfos.h}使用该宏来定义@code{__ELF__},所以你可能不需要自己定义。
+类似于@code{TARGET_CPU_CPP_BUILTINS},不过该宏是可选的,用于target目标文件格式。@file{elfos.h}使用该宏来定义@code{__ELF__},所以你可能不需要自己定义。
 @end defmac

 @deftypevar {extern int} target_flags
 @en This variable is declared in @file{options.h}, which is included before
 @en any target-specific headers.
-该变量在@file{options.h}中声明,其在任何target特定的头文件之前被包含进来。
-@end deftypevar
+该变量在@file{options.h}中声明,其在任何target特定的头文件之前被包含进来。@end deftypevar

 @deftypevr {Target Hook} int TARGET_DEFAULT_TARGET_FLAGS
 @en This variable specifies the initial value of @code{target_flags}.
@@ -1068,9 +927,7 @@
 @en (@pxref{Options}).  It has the opportunity to do some option-specific
 @en processing and should return true if the option is valid.  The default
 @en definition does nothing but return true.
-该宏当用户指定了在@file{.opt}定义文件(@pxref{Options})中描述的target特定选项
-时被调用。其可以做一些选项特定的处理,并且如果选项有效时应该返回真。
-缺省的定义不做任何事情,只是返回真。
+该宏当用户指定了在@file{.opt}定义文件(@pxref{Options})中描述的target特定选项时被调用。其可以做一些选项特定的处理,并且如果选项有效时应该返回真。缺省的定义不做任何事情,只是返回真。

 @en @var{code} specifies the @code{OPT_@var{name}} enumeration value
 @en associated with the selected option; @var{name} is just a rendering of
@@ -1080,12 +937,7 @@
 @en (@pxref{Option properties}), @var{value} is the numeric value of the
 @en argument.  Otherwise @var{value} is 1 if the positive form of the
 @en option was used and 0 if the ``no-'' form was.
-@var{code}指定了与选项相关的@code{OPT_@var{name}}枚举值;
-这里的@var{name}只是对选项名的重写,将非字母和数字的字符替换为下划线。
-@var{arg}指定了字符串参数,如果没有参数则为空。
-如果选项被标记为@code{UInteger}(@pxref{Option properties}),
-则@var{value}为参数的数值。否则@var{value}为1,如果使用了正的选项,
-为0如果使用了“no-”形式。
+@var{code}指定了与选项相关的@code{OPT_@var{name}}枚举值;这里的@var{name}只是对选项名的重写,将非字母和数字的字符替换为下划线。@var{arg}指定了字符串参数,如果没有参数则为空。如果选项被标记为@code{UInteger}(@pxref{Option
properties}),则@var{value}为参数的数值。否则@var{value}为1,如果使用了正的选项,为0如果使用了“no-”形式。
 @end deftypefn

 @deftypefn {Target Hook} bool TARGET_HANDLE_C_OPTION (size_t
@var{code}, const char *@var{arg}, int @var{value})
@@ -1095,17 +947,13 @@
 @en option-specific processing and should return true if the option is
 @en valid.  The arguments are like for @code{TARGET_HANDLE_OPTION}.  The
 @en default definition does nothing but return false.
-宏当用户指定了在@file{.opt}定义文件(参见“选项”)中描述的target特定的C语言家族
-的选项时被调用。其可以做一些选项特定的处理,并且如果选项有效时应该返回真。
-缺省的定义不做任何事情,只是返回假。
+宏当用户指定了在@file{.opt}定义文件(参见“选项”)中描述的target特定的C语言家族的选项时被调用。其可以做一些选项特定的处理,并且如果选项有效时应该返回真。缺省的定义不做任何事情,只是返回假。

 @en In general, you should use @code{TARGET_HANDLE_OPTION} to handle
 @en options.  However, if processing an option requires routines that are
 @en only available in the C (and related language) front ends, then you
 @en should use @code{TARGET_HANDLE_C_OPTION} instead.
-通常,你应该使用@code{TARGET_HANDLE_OPTION}来处理选项。然而,
-如果选项处理只需要在C(和相关语言)前端中有效时,
-你再使用@code{TARGET_HANDLE_C_OPTION}。
+通常,你应该使用@code{TARGET_HANDLE_OPTION}来处理选项。然而,如果选项处理只需要在C(和相关语言)前端中有效时,你再使用@code{TARGET_HANDLE_C_OPTION}。
 @end deftypefn

 @deftypefn {Target Hook} tree TARGET_OBJC_CONSTRUCT_STRING_OBJECT
(tree @var{string})
@@ -1124,8 +972,7 @@
 @en This macro is a C statement to print on @code{stderr} a string
 @en describing the particular machine description choice.  Every machine
 @en description should define @code{TARGET_VERSION}.  For example:
-该宏为C语句,用来在@code{stderr}上打印表示特定机器描述选择的字符串。
-每个机器描述都应该定义@code{TARGET_VERSION}。例如:
+该宏为C语句,用来在@code{stderr}上打印表示特定机器描述选择的字符串。每个机器描述都应该定义@code{TARGET_VERSION}。例如:

 @smallexample
 #ifdef MOTOROLA
@@ -1144,14 +991,11 @@
 @en @code{OVERRIDE_OPTIONS} to take account of this.  This macro, if
 @en defined, is executed once just after all the command options have been
 @en parsed.
-有时特定的命令选项组合在特定的target机器上没有意义。
-你可以定义该宏@code{OVERRIDE_OPTIONS}。
-如果定义,则在所有的命令选项被解析后执行。
+有时特定的命令选项组合在特定的target机器上没有意义。你可以定义该宏@code{OVERRIDE_OPTIONS}。如果定义,则在所有的命令选项被解析后执行。

 @en Don't use this macro to turn on various extra optimizations for
 @en @option{-O}.  That is what @code{OPTIMIZATION_OPTIONS} is for.
-不要使用该宏来打开@option{-O}额外的优化。
-使用@code{OPTIMIZATION_OPTIONS}来做这件事情。
+不要使用该宏来打开@option{-O}额外的优化。使用@code{OPTIMIZATION_OPTIONS}来做这件事情。

 If you need to do something whenever the optimization level is
 changed via the optimize attribute or pragma, see
@@ -1177,8 +1021,7 @@
 @en language frontends (C, Objective-C, C++, Objective-C++) and so can be
 @en used to alter option flag variables which only exist in those
 @en frontends.
-类似于@code{TARGET_OPTION_OVERRIDE}钩子,但只用于C语言的前端(C, Objective-C, C++,
-Objective-C++),所以可以用于修改只存在于那些前端中的选项标志变量。
+类似于@code{TARGET_OPTION_OVERRIDE}钩子,但只用于C语言的前端(C, Objective-C, C++,
Objective-C++),所以可以用于修改只存在于那些前端中的选项标志变量。
 @end defmac

 @deftypevr {Target Hook} {const struct default_options *}
TARGET_OPTION_OPTIMIZATION_TABLE
@@ -1208,16 +1051,14 @@
 @en @option{--target-help} on the command line.  It gives the target a
 @en chance to display extra information on the target specific command
 @en line options found in its @file{.opt} file.
-该钩子当用户在命令行中执行@option{--target-help}时被调用。
-使得target可以显示在其@file{.opt}文件中找到的机器特定的命令行选项信息。
+该钩子当用户在命令行中执行@option{--target-help}时被调用。使得target可以显示在其@file{.opt}文件中找到的机器特定的命令行选项信息。
 @end deftypefn

 @defmac CAN_DEBUG_WITHOUT_FP
 @en Define this macro if debugging can be performed even without a frame
 @en pointer.  If this macro is defined, GCC will turn on the
 @en @option{-fomit-frame-pointer} option whenever @option{-O} is specified.
-定义该宏,如果没有帧指针也可以进行调试。如果定义了该宏,
-则只要指定@option{-O},GCC便打开@option{-fomit-frame-pointer}选项。
+定义该宏,如果没有帧指针也可以进行调试。如果定义了该宏,则只要指定@option{-O},GCC便打开@option{-fomit-frame-pointer}选项。
 @end defmac

 @defmac SWITCHABLE_TARGET
@@ -1251,37 +1092,26 @@
 @en using statics to store the information is a bad idea, since GCC supports
 @en nested functions, so you can be halfway through encoding one function
 @en when another one comes along.
-如果target需要存储基于每个函数的信息,则GCC为此提供了一个宏和一些变量。
-注意,只是使用静态变量来保存信息是一个糟糕的想法,因为GCC支持嵌套函数,
-所以可能会在编码一个函数的中途遇到另一个。
+如果target需要存储基于每个函数的信息,则GCC为此提供了一个宏和一些变量。注意,只是使用静态变量来保存信息是一个糟糕的想法,因为GCC支持嵌套函数,所以可能会在编码一个函数的中途遇到另一个。

 @en GCC defines a data structure called @code{struct function} which
 @en contains all of the data specific to an individual function.  This
 @en structure contains a field called @code{machine} whose type is
 @en @code{struct machine_function *}, which can be used by targets to point
 @en to their own specific data.
-GCC定义了称为@code{struct function}的数据结构体,
-包含了特定于单个函数的所有数据。该结构体包含一个称为@code{machine}的域,
-其类型为@code{struct machine_function *},
-可以被target用于指向它们自己的特定数据。
+GCC定义了称为@code{struct
function}的数据结构体,包含了特定于单个函数的所有数据。该结构体包含一个称为@code{machine}的域,其类型为@code{struct
machine_function *},可以被target用于指向它们自己的特定数据。

 @en If a target needs per-function specific data it should define the type
 @en @code{struct machine_function} and also the macro @code{INIT_EXPANDERS}.
 @en This macro should be used to initialize the function pointer
 @en @code{init_machine_status}.  This pointer is explained below.
-如果一个target需要基于每个函数的特定数据,
-则应该定义类型@code{struct machine_function},
-以及宏@code{INIT_EXPANDERS}。
-该宏将被用于初始化函数指针@code{init_machine_status}。
-该指针将在下面说明。
+如果一个target需要基于每个函数的特定数据,则应该定义类型@code{struct
machine_function},以及宏@code{INIT_EXPANDERS}。该宏将被用于初始化函数指针@code{init_machine_status}。该指针将在下面说明。

 @en One typical use of per-function, target specific data is to create an
 @en RTX to hold the register containing the function's return address.  This
 @en RTX can then be used to implement the @code{__builtin_return_address}
 @en function, for level 0.
-一个典型的基于每个函数的target特定数据,
-是用于创建一个RTX来存放含有函数返回地址的寄存器。
-该RTX随后可以被用于实现@code{__builtin_return_address}函数。
+一个典型的基于每个函数的target特定数据,是用于创建一个RTX来存放含有函数返回地址的寄存器。该RTX随后可以被用于实现@code{__builtin_return_address}函数。

 @en Note---earlier implementations of GCC used a single data area to hold
 @en all of the per-function information.  Thus when processing of a nested
@@ -1292,21 +1122,14 @@
 @en the saving and restoring of the target specific information.  Since the
 @en single data area approach is no longer used, these pointers are no
 @en longer supported.
-注意,早期的GCC实现使用了单个数据区域来存放所有的基于每个函数的信息。
-因此当开始处理嵌套函数时,旧式的基于每个函数的数据不得不被压入栈中,
-并且当处理完成,还要出栈。
-GCC曾经提供名为@code{save_machine_status}和@code{restore_machine_status}
-函数指针来处理target特定信息的保存和恢复。
-由于单数据区域的方法不再被使用了,这些指针也不再被支持。
+注意,早期的GCC实现使用了单个数据区域来存放所有的基于每个函数的信息。因此当开始处理嵌套函数时,旧式的基于每个函数的数据不得不被压入栈中,并且当处理完成,还要出栈。GCC曾经提供名为@code{save_machine_status}和@code{restore_machine_status}函数指针来处理target特定信息的保存和恢复。由于单数据区域的方法不再被使用了,这些指针也不再被支持。

 @defmac INIT_EXPANDERS
 @en Macro called to initialize any target specific information.  This macro
 @en is called once per function, before generation of any RTL has begun.
 @en The intention of this macro is to allow the initialization of the
 @en function pointer @code{init_machine_status}.
-被调用的宏,用来初始化任何target特定信息。
-该宏在任何RTL生成开始之前,基于每个函数被调用一次。
-该宏的目的是允许函数指针@code{init_machine_status}的初始化。
+被调用的宏,用来初始化任何target特定信息。该宏在任何RTL生成开始之前,基于每个函数被调用一次。该宏的目的是允许函数指针@code{init_machine_status}的初始化。
 @end defmac

 @deftypevar {void (*)(struct function *)} init_machine_status
@@ -1315,15 +1138,12 @@
 @en target to perform any target specific initialization of the
 @en @code{struct function} structure.  It is intended that this would be
 @en used to initialize the @code{machine} of that structure.
-如果该函数指针非空,则会在函数编译开始之前,基于每个函数被调用一次,
-用于允许target来执行对@code{struct function}结构体的任何target特定初始化。
-它将被用于初始化那个结构体的@code{machine}域。
+如果该函数指针非空,则会在函数编译开始之前,基于每个函数被调用一次,用于允许target来执行对@code{struct
function}结构体的任何target特定初始化。它将被用于初始化那个结构体的@code{machine}域。

 @en @code{struct machine_function} structures are expected to be freed by GC@.
 @en Generally, any memory that they reference must be allocated by using
 @en GC allocation, including the structure itself.
-结构体@code{struct machine_function}将期望被GC来释放。通常,
-它们所引用的任何内存都必须使用@code{ggc_alloc}来分配,包括结构体本身。
+结构体@code{struct
machine_function}将期望被GC来释放。通常,它们所引用的任何内存都必须使用@code{ggc_alloc}来分配,包括结构体本身。
 @end deftypevar

 @en @node Storage Layout
@@ -1336,8 +1156,7 @@
 @en alignments measured in bits do not need to be constant.  They can be C
 @en expressions that refer to static variables, such as the
@code{target_flags}.
 @en @xref{Run-time Target}.
-注意该表格中的宏定义中,对于以bit为单位的大小或对齐,不需要为常量。
-它们可以为引用了静态变量的C表达式,例如@code{target_flags}。
+注意该表格中的宏定义中,对于以bit为单位的大小或对齐,不需要为常量。它们可以为引用了静态变量的C表达式,例如@code{target_flags}。
 @xref{Run-time Target}。

 @defmac BITS_BIG_ENDIAN
@@ -1347,14 +1166,11 @@
 @en bit.  If the machine has no bit-field instructions, then this must still
 @en be defined, but it doesn't matter which value it is defined to.  This
 @en macro need not be a constant.
-定义该宏的值为1,如果字节中的最高有效位具有最低编号;否则定义其值为0。
-这意味着bit-field指令从最高有效位计数。如果机器没有bit-field指令,
-则该宏也需要被定义,但定义什么值都无所谓。该宏不需要为一个常量。
+定义该宏的值为1,如果字节中的最高有效位具有最低编号;否则定义其值为0。这意味着bit-field指令从最高有效位计数。如果机器没有bit-field指令,则该宏也需要被定义,但定义什么值都无所谓。该宏不需要为一个常量。

 @en This macro does not affect the way structure fields are packed into
 @en bytes or words; that is controlled by @code{BYTES_BIG_ENDIAN}.
-该宏不影响结构体域被打包成字节或者字的方式;
-那是由@code{BYTES_BIG_ENDIAN}来控制的。
+该宏不影响结构体域被打包成字节或者字的方式;那是由@code{BYTES_BIG_ENDIAN}来控制的。
 @end defmac

 @defmac BYTES_BIG_ENDIAN
@@ -1369,9 +1185,7 @@
 @en memory locations and registers; GCC fundamentally assumes that the
 @en order of words in memory is the same as the order in registers.  This
 @en macro need not be a constant.
-定义该宏的值为1,如果在多字(multiword)对象中,最高有效字具有最低编号。
-这同时应用于内存位置和寄存器中;
-GCC从根本上假设在内存中的字的顺序与在寄存器中的一样。该宏不需要为一个常量。
+定义该宏的值为1,如果在多字(multiword)对象中,最高有效字具有最低编号。这同时应用于内存位置和寄存器中;GCC从根本上假设在内存中的字的顺序与在寄存器中的一样。该宏不需要为一个常量。
 @end defmac

 @defmac LIBGCC2_WORDS_BIG_ENDIAN
@@ -1379,9 +1193,7 @@
 @en constant value with the same meaning as @code{WORDS_BIG_ENDIAN},
which will be
 @en used only when compiling @file{libgcc2.c}.  Typically the value will be set
 @en based on preprocessor defines.
-定义该宏如果@code{WORDS_BIG_ENDIAN}不是常量。该宏必须为一个常量值,
-其与@code{WORDS_BIG_ENDIAN}的具有相同的含义,
-并只用于编译@file{libgcc2.c}的时候。通常该值会根据预处理器定义来设置。
+定义该宏如果@code{WORDS_BIG_ENDIAN}不是常量。该宏必须为一个常量值,其与@code{WORDS_BIG_ENDIAN}的具有相同的含义,并只用于编译@file{libgcc2.c}的时候。通常该值会根据预处理器定义来设置。
 @end defmac

 @defmac FLOAT_WORDS_BIG_ENDIAN
@@ -1389,8 +1201,7 @@
 @en @code{TFmode} floating point numbers are stored in memory with the word
 @en containing the sign bit at the lowest address; otherwise define it to
 @en have the value 0.  This macro need not be a constant.
-定义该宏值为1,如果@code{DFmode}, @code{XFmode}或@code{TFmode}浮点数被存储在
-内存中,并且包含符号位的字位于最低地址;否则值为0。该宏不需要为一个常量。
+定义该宏值为1,如果@code{DFmode},
@code{XFmode}或@code{TFmode}浮点数被存储在内存中,并且包含符号位的字位于最低地址;否则值为0。该宏不需要为一个常量。

 @en You need not define this macro if the ordering is the same as for
 @en multi-word integers.
@@ -1413,8 +1224,7 @@
 @en Maximum number of bits in a word.  If this is undefined, the default is
 @en @code{BITS_PER_WORD}.  Otherwise, it is the constant value that is the
 @en largest value that @code{BITS_PER_WORD} can have at run-time.
-字的最大位数。如果没有定义,缺省为@code{BITS_PER_WORD}。
-否则其为一个常量,为@code{BITS_PER_WORD}在运行时可以具有的最大值。
+字的最大位数。如果没有定义,缺省为@code{BITS_PER_WORD}。否则其为一个常量,为@code{BITS_PER_WORD}在运行时可以具有的最大值。
 @end defmac

 @defmac UNITS_PER_WORD
@@ -1427,8 +1237,7 @@
 @en Minimum number of units in a word.  If this is undefined, the default is
 @en @code{UNITS_PER_WORD}.  Otherwise, it is the constant value that is the
 @en smallest value that @code{UNITS_PER_WORD} can have at run-time.
-字中的最小存储单元数。如果没有定义,缺省为@code{UNITS_PER_WORD}。否则,
-其为一个常量,为@code{UNITS_PER_WORD}在运行时可以具有的最小值。
+字中的最小存储单元数。如果没有定义,缺省为@code{UNITS_PER_WORD}。否则,其为一个常量,为@code{UNITS_PER_WORD}在运行时可以具有的最小值。
 @end defmac

 @defmac UNITS_PER_SIMD_WORD (@var{mode})
@@ -1436,8 +1245,7 @@
 @en scalar mode @var{mode}.  The default is equal to @code{UNITS_PER_WORD},
 @en because the vectorizer can do some transformations even in absence of
 @en specialized @acronym{SIMD} hardware.
-向量化可以产生的向量的单元数。缺省等于@code{UNITS_PER_WORD},
-因为向量化可以在即使没有专门的@acronym{SIMD}硬件的情况下做一些转换。
+向量化可以产生的向量的单元数。缺省等于@code{UNITS_PER_WORD},因为向量化可以在即使没有专门的@acronym{SIMD}硬件的情况下做一些转换。
 @end defmac

 @defmac POINTER_SIZE
@@ -1445,9 +1253,7 @@
 @en width of @code{Pmode}.  If it is not equal to the width of @code{Pmode},
 @en you must define @code{POINTERS_EXTEND_UNSIGNED}.  If you do not specify
 @en a value the default is @code{BITS_PER_WORD}.
-指针的宽度,位数。必须指定不比@code{Pmode}宽的值。
-如果其不等于@code{Pmode}的宽度,则必须定义@code{POINTERS_EXTEND_UNSIGNED}。
-如果没有指定一个值,则缺省为@code{BITS_PER_WORD}。
+指针的宽度,位数。必须指定不比@code{Pmode}宽的值。如果其不等于@code{Pmode}的宽度,则必须定义@code{POINTERS_EXTEND_UNSIGNED}。如果没有指定一个值,则缺省为@code{BITS_PER_WORD}。
 @end defmac

 @defmac POINTERS_EXTEND_UNSIGNED
@@ -1457,10 +1263,7 @@
 @en should be sign-extended, and negative if some other sort of conversion
 @en is needed.  In the last case, the extension is done by the target's
 @en @code{ptr_extend} instruction.
-一个C表达式,用来确定指针应该如何从@code{ptr_mode}扩展为@code{Pmode}或者
-@code{word_mode}。如果指针应该被零扩展,则其比0大,如果应该被符号扩展则为0,
-如果需要其它转换方式则为负。对于最后一种情况,
-扩展通过target的@code{ptr_extend}指令来完成。
+一个C表达式,用来确定指针应该如何从@code{ptr_mode}扩展为@code{Pmode}或者@code{word_mode}。如果指针应该被零扩展,则其比0大,如果应该被符号扩展则为0,如果需要其它转换方式则为负。对于最后一种情况,扩展通过target的@code{ptr_extend}指令来完成。

 @en You need not define this macro if the @code{ptr_mode}, @code{Pmode}
 @en and @code{word_mode} are all the same width.
@@ -1472,8 +1275,7 @@
 @en is @var{type} and which has the specified mode and signedness is to be
 @en stored in a register.  This macro is only called when @var{type} is a
 @en scalar type.
-用来更新@var{m}和@var{unsignedp},当一个类型为@var{type}并且具有特定的机器模式
-的对象要被存储到寄存器中时。该宏只在@var{type}为一个标量类型时才被调用。
+用来更新@var{m}和@var{unsignedp},当一个类型为@var{type}并且具有特定的机器模式的对象要被存储到寄存器中时。该宏只在@var{type}为一个标量类型时才被调用。

 @en On most RISC machines, which only have operations that operate on a full
 @en register, define this macro to set @var{m} to @code{word_mode} if
@@ -1481,10 +1283,7 @@
 @en cases, only integer modes should be widened because wider-precision
 @en floating-point operations are usually more expensive than their narrower
 @en counterparts.
-在大多数RISC机器上,只有作用于在整个寄存器上的运算,
-定义该宏将@var{m}设为为@code{word_mode},
-如果@var{m}为一个比@code{BITS_PER_WORD}窄的整数模式。在大多数情况下,
-只有整数模式应该被加宽,因为宽精度的浮点运算通常比相应的窄精度的运算代价要更高。
+在大多数RISC机器上,只有作用于在整个寄存器上的运算,定义该宏将@var{m}设为为@code{word_mode},如果@var{m}为一个比@code{BITS_PER_WORD}窄的整数模式。在大多数情况下,只有整数模式应该被加宽,因为宽精度的浮点运算通常比相应的窄精度的运算代价要更高。

 @en For most machines, the macro definition does not change @var{unsignedp}.
 @en However, some machines, have instructions that preferentially handle
@@ -1492,10 +1291,7 @@
 @en the DEC Alpha, 32-bit loads from memory and 32-bit add instructions
 @en sign-extend the result to 64 bits.  On such machines, set
 @en @var{unsignedp} according to which kind of extension is more efficient.
-大多数机器,宏定义不改变@var{unsignedp}。然而,
-一些机器具有优先处理特定模式的有符号或者无符号的指令。例如,在DEC Alpha上,
-32位load和32位add指令会将结果有符号扩展为64位。在这样的机器上,
-根据扩展的类型来设置@var{unsignedp}会更加有效。
+大多数机器,宏定义不改变@var{unsignedp}。然而,一些机器具有优先处理特定模式的有符号或者无符号的指令。例如,在DEC
Alpha上,32位load和32位add指令会将结果有符号扩展为64位。在这样的机器上,根据扩展的类型来设置@var{unsignedp}会更加有效。

 @en Do not define this macro if it would never modify @var{m}.
 如果从来不会修改@var{m},则不要定义该宏。
@@ -1526,8 +1322,7 @@
 @en bits.  All stack parameters receive at least this much alignment
 @en regardless of data type.  On most machines, this is the same as the
 @en size of an integer.
-函数参数在栈上的对齐方式,位数。所有栈参数都接受这样的对齐,
-而不论数据类型是什么。在大多数机器上,这与整数的大小相同。
+函数参数在栈上的对齐方式,位数。所有栈参数都接受这样的对齐,而不论数据类型是什么。在大多数机器上,这与整数的大小相同。
 @end defmac

 @defmac STACK_BOUNDARY
@@ -1536,10 +1331,7 @@
 @en desired alignment (measured in bits).  This value is used as a default
 @en if @code{PREFERRED_STACK_BOUNDARY} is not defined.  On most machines,
 @en this should be the same as @code{PARM_BOUNDARY}.
-定义该宏为硬件要求的在该机器上的栈指针的最小对齐。定义为一个C表达式,
-为所要的对齐(位数)。该值作为缺省值使用,
-如果没有定义@code{PREFERRED_STACK_BOUNDARY}。在大多数机器上,
-这应该与@code{PARM_BOUNDARY}相同。
+定义该宏为硬件要求的在该机器上的栈指针的最小对齐。定义为一个C表达式,为所要的对齐(位数)。该值作为缺省值使用,如果没有定义@code{PREFERRED_STACK_BOUNDARY}。在大多数机器上,这应该与@code{PARM_BOUNDARY}相同。
 @end defmac

 @defmac PREFERRED_STACK_BOUNDARY
@@ -1548,9 +1340,7 @@
 @en is a C expression for the desired alignment (measured in bits).  This
 @en macro must evaluate to a value equal to or larger than
 @en @code{STACK_BOUNDARY}.
-定义该宏,如果你希望对栈指针维持一个特定的对齐,大于硬件要求的对齐。
-定义为一个C表达式,为所要的对齐(位数)。
-该宏必须等于或大于@code{STACK_BOUNDARY}。
+定义该宏,如果你希望对栈指针维持一个特定的对齐,大于硬件要求的对齐。定义为一个C表达式,为所要的对齐(位数)。该宏必须等于或大于@code{STACK_BOUNDARY}。
 @end defmac

 @defmac INCOMING_STACK_BOUNDARY
@@ -1568,8 +1358,7 @@
 @en Biggest alignment that any data type can require on this machine, in
 @en bits.  Note that this is not the biggest alignment that is supported,
 @en just the biggest alignment that, when violated, may cause a fault.
-该机器上任何数据类型可以需要的最大对齐位数。注意这不是所支持的最大对齐,
-而是如果违反该对齐则可能会造成错误。
+该机器上任何数据类型可以需要的最大对齐位数。注意这不是所支持的最大对齐,而是如果违反该对齐则可能会造成错误。
 @end defmac

 @defmac MALLOC_ABI_ALIGNMENT
@@ -1587,9 +1376,7 @@
 @en object that can be referenced in one operation, without disturbing any
 @en nearby object.  Normally, this is @code{BITS_PER_UNIT}, but may be larger
 @en on machines that don't have byte or half-word store operations.
-如果被定义,则为最小对齐位数,可以分给一个对象并且在一个操作中被应用,
-而不需要干扰任何附近的对象。通常为@code{BITS_PER_UNIT},
-但在没有字节或半字的存储运算的机器上可以更大些。
+如果被定义,则为最小对齐位数,可以分给一个对象并且在一个操作中被应用,而不需要干扰任何附近的对象。通常为@code{BITS_PER_UNIT},但在没有字节或半字的存储运算的机器上可以更大些。
 @end defmac

 @defmac BIGGEST_FIELD_ALIGNMENT
@@ -1597,9 +1384,7 @@
 @en machine, in bits.  If defined, this overrides @code{BIGGEST_ALIGNMENT} for
 @en structure and union fields only, unless the field alignment has been set
 @en by the @code{__attribute__ ((aligned (@var{n})))} construct.
-任何结构体或者联合体域在该机器上需要的最大对齐。如果被定义,
-这将只覆盖结构体和联合体的域的@code{BIGGEST_ALIGNMENT},
-除非域对齐已经通过@code{__attribute__ ((aligned (@var{n})))}设置。
+任何结构体或者联合体域在该机器上需要的最大对齐。如果被定义,这将只覆盖结构体和联合体的域的@code{BIGGEST_ALIGNMENT},除非域对齐已经通过@code{__attribute__
((aligned (@var{n})))}设置。
 @end defmac

 @defmac ADJUST_FIELD_ALIGN (@var{field}, @var{computed})
@@ -1609,9 +1394,7 @@
 @en alignment) is @var{computed}.  It overrides alignment only if the
 @en field alignment has not been set by the
 @en @code{__attribute__ ((aligned (@var{n})))} construct.
-一个表达式,为结构体域@var{field}的对齐方式,如果对齐方式是按照通常方式计算
-(包括应用@code{BIGGEST_ALIGNMENT}和@code{BIGGEST_FIELD_ALIGNMENT})。
-其只覆盖没有通过@code{__attribute__ ((aligned (@var{n})))}设置的域。
+一个表达式,为结构体域@var{field}的对齐方式,如果对齐方式是按照通常方式计算(包括应用@code{BIGGEST_ALIGNMENT}和@code{BIGGEST_FIELD_ALIGNMENT})。其只覆盖没有通过@code{__attribute__
((aligned (@var{n})))}设置的域。
 @end defmac

 @defmac MAX_STACK_ALIGNMENT
@@ -1631,19 +1414,14 @@
 @en Use this macro to limit the alignment which can be specified using the
 @en @code{__attribute__ ((aligned (@var{n})))} construct.  If not defined,
 @en the default value is @code{BIGGEST_ALIGNMENT}.
-由该机器的目标文件格式所支持的最大对齐。使用该宏来限制可以使用
-@code{__attribute__ ((aligned (@var{n})))}结构来指定的对齐。
-如果没有定义,则缺省值为@code{BIGGEST_ALIGNMENT}。
+由该机器的目标文件格式所支持的最大对齐。使用该宏来限制可以使用@code{__attribute__ ((aligned
(@var{n})))}结构来指定的对齐。如果没有定义,则缺省值为@code{BIGGEST_ALIGNMENT}。

 @en On systems that use ELF, the default (in @file{config/elfos.h}) is
 @en the largest supported 32-bit ELF section alignment representable on
 @en a 32-bit host e.g. @samp{(((unsigned HOST_WIDEST_INT) 1 << 28) * 8)}.
 @en On 32-bit ELF the largest supported section alignment in bits is
 @en @samp{(0x80000000 * 8)}, but this is not representable on 32-bit hosts.
-在使用ELF的系统上,缺省(在@file{config/elfos.h}中)为在32位host上可以表示的
-32位ELF section对齐,即@samp{(((unsigned HOST_WIDEST_INT) 1 << 28) * 8)}。
-在32位ELF上,最大支持的section对齐位数是@samp{(0x80000000 * 8)},
-但这在32位host上无法表示。
+在使用ELF的系统上,缺省(在@file{config/elfos.h}中)为在32位host上可以表示的32位ELF
section对齐,即@samp{(((unsigned HOST_WIDEST_INT) 1 << 28) *
8)}。在32位ELF上,最大支持的section对齐位数是@samp{(0x80000000 * 8)},但这在32位host上无法表示。
 @end defmac

 @defmac DATA_ALIGNMENT (@var{type}, @var{basic-align})
@@ -1651,9 +1429,7 @@
 @en the static store.  @var{type} is the data type, and @var{basic-align} is
 @en the alignment that the object would ordinarily have.  The value of this
 @en macro is used instead of that alignment to align the object.
-如果定义,则为一个C表达式,来计算在静态存储中的变量的对齐。
-@var{type}为数据类型,@var{basic-align}为对象通常具有的对齐。
-该宏的值被用于替代那个对齐,并应用的对象上。
+如果定义,则为一个C表达式,来计算在静态存储中的变量的对齐。@var{type}为数据类型,@var{basic-align}为对象通常具有的对齐。该宏的值被用于替代那个对齐,并应用的对象上。

 @en If this macro is not defined, then @var{basic-align} is used.
 如果该宏没有定义,则使用@var{basic-align}。
@@ -1663,8 +1439,7 @@
 @en make it all fit in fewer cache lines.  Another is to cause character
 @en arrays to be word-aligned so that @code{strcpy} calls that copy
 @en constants to character arrays can be done inline.
-该宏的一种用法是增加中等大小数据的对齐,使得可以放在最少的cache line中。
-另一种用法是使得字符数组按照字对齐,这样@code{strcpy}调用可以通过内联方式完成。
+该宏的一种用法是增加中等大小数据的对齐,使得可以放在最少的cache
line中。另一种用法是使得字符数组按照字对齐,这样@code{strcpy}调用可以通过内联方式完成。
 @end defmac

 @defmac CONSTANT_ALIGNMENT (@var{constant}, @var{basic-align})
@@ -1673,9 +1448,7 @@
 @en @var{basic-align} is the alignment that the object would ordinarily
 @en have.  The value of this macro is used instead of that alignment to
 @en align the object.
-如果定义,为一个C表达式,来计算放在内存中的常量的对齐。@var{constant}为常量,
-@var{basic-align}为该对象通常具有的对齐。该宏的值被用于替代那个对齐,
-并应用的对象上。
+如果定义,为一个C表达式,来计算放在内存中的常量的对齐。@var{constant}为常量,@var{basic-align}为该对象通常具有的对齐。该宏的值被用于替代那个对齐,并应用的对象上。

 @en If this macro is not defined, then @var{basic-align} is used.
 如果该宏没有定义,则使用@var{basic-align}。
@@ -1683,8 +1456,7 @@
 @en The typical use of this macro is to increase alignment for string
 @en constants to be word aligned so that @code{strcpy} calls that copy
 @en constants can be done inline.
-该宏的典型用法为增加字符串常量的对齐,使其为字对齐,
-这样@code{strcpy}调用可以通过内联方式完成。
+该宏的典型用法为增加字符串常量的对齐,使其为字对齐,这样@code{strcpy}调用可以通过内联方式完成。
 @end defmac

 @defmac LOCAL_ALIGNMENT (@var{type}, @var{basic-align})
@@ -1692,8 +1464,7 @@
 @en the local store.  @var{type} is the data type, and @var{basic-align} is
 @en the alignment that the object would ordinarily have.  The value of this
 @en macro is used instead of that alignment to align the object.
-如果定义,为一个C表达式,来计算在局部存储中的对象的对齐。@var{type}为数据类型,
-@var{basic-align}为对象通常的对齐。该宏的值被用于替代那个对齐,并应用的对象上。
+如果定义,为一个C表达式,来计算在局部存储中的对象的对齐。@var{type}为数据类型,@var{basic-align}为对象通常的对齐。该宏的值被用于替代那个对齐,并应用的对象上。

 @en If this macro is not defined, then @var{basic-align} is used.
 如果该宏没有定义,则使用@var{basic-align}。
@@ -1702,7 +1473,8 @@
 @en make it all fit in fewer cache lines.
 该宏的一种用法是增加中等大小数据的对齐,使得可以放在最少的cache line中。

-If the value of this macro has a type, it should be an unsigned type.
+@en If the value of this macro has a type, it should be an unsigned type.
+如果该宏的值有类型,它应该是无符号类型。
 @end defmac

 @defmac STACK_SLOT_ALIGNMENT (@var{type}, @var{mode}, @var{basic-align})
@@ -1756,8 +1528,7 @@
 @defmac STRUCTURE_SIZE_BOUNDARY
 @en Number of bits which any structure or union's size must be a multiple of.
 @en Each structure or union's size is rounded up to a multiple of this.
-任何结构体或联合体的大小必须为该位数的倍数。
-每个结构体或联合体的大小都将被舍入到该位数的一个倍数。
+任何结构体或联合体的大小必须为该位数的倍数。每个结构体或联合体的大小都将被舍入到该位数的一个倍数。

 @en If you do not define this macro, the default is the same as
 @en @code{BITS_PER_UNIT}.
@@ -1768,8 +1539,7 @@
 @en Define this macro to be the value 1 if instructions will fail to work
 @en if given data not on the nominal alignment.  If instructions will merely
 @en go slower in that case, define this macro as 0.
-定义该宏值为1,如果给定数据不在通常对齐方式上,则指令无法工作。
-如果对于这种情况指令只不过是变慢,则定义该宏为0。
+定义该宏值为1,如果给定数据不在通常对齐方式上,则指令无法工作。如果对于这种情况指令只不过是变慢,则定义该宏为0。
 @end defmac

 @defmac PCC_BITFIELD_TYPE_MATTERS
@@ -1782,16 +1552,13 @@
 @en structure, as if the structure really did contain an ordinary field of
 @en that type.  In addition, the bit-field is placed within the structure so
 @en that it would fit within such a field, not crossing a boundary for it.
-该行为是书写为命名位域(@code{int},@code{short}或其它整数类型)的类型被实施
-用于整个结构体的对齐,就好像结构体包含了一个该类型的普通的域。另外,
-位域放在结构体中,使得其将适合这样的域,而不会跨越边界。
+该行为是书写为命名位域(@code{int},@code{short}或其它整数类型)的类型被实施用于整个结构体的对齐,就好像结构体包含了一个该类型的普通的域。另外,位域放在结构体中,使得其将适合这样的域,而不会跨越边界。

 @en Thus, on most machines, a named bit-field whose type is written as
 @en @code{int} would not cross a four-byte boundary, and would force
 @en four-byte alignment for the whole structure.  (The alignment used may
 @en not be four bytes; it is controlled by the other alignment parameters.)
-这样,大多数机器上,书写为@code{int}的命名位域将不会跨越一个四字节的边界,
-并将使得整个结构体为四字节对齐。(可能不使用四字节对齐;其由其它对齐参数控制。)
+这样,大多数机器上,书写为@code{int}的命名位域将不会跨越一个四字节的边界,并将使得整个结构体为四字节对齐。(可能不使用四字节对齐;其由其它对齐参数控制。)

 @en An unnamed bit-field will not affect the alignment of the containing
 @en structure.
@@ -1805,9 +1572,7 @@
 @en bit-fields may cross more than one alignment boundary.  The compiler can
 @en support such references if there are @samp{insv}, @samp{extv}, and
 @en @samp{extzv} insns that can directly reference memory.
-注意如果该宏没有定义,或者其值为0,则一些位域可能跨越多于一个的对齐边界。
-编译器可以支持这种引用,如果有@samp{insv},
-@samp{extv}和@samp{extzv} insns可以直接引用内存。
+注意如果该宏没有定义,或者其值为0,则一些位域可能跨越多于一个的对齐边界。编译器可以支持这种引用,如果有@samp{insv},
@samp{extv}和@samp{extzv} insns可以直接引用内存。

 @en The other known way of making bit-fields work is to define
 @en @code{STRUCTURE_SIZE_BOUNDARY} as large as @code{BIGGEST_ALIGNMENT}.
@@ -1817,14 +1582,12 @@
 @en Unless the machine has bit-field instructions or you define
 @en @code{STRUCTURE_SIZE_BOUNDARY} that way, you must define
 @en @code{PCC_BITFIELD_TYPE_MATTERS} to have a nonzero value.
-除非机器具有位域指令或者你按照那种方式定义了@code{STRUCTURE_SIZE_BOUNDARY},
-否则你必须定义@code{PCC_BITFIELD_TYPE_MATTERS}具有非0值。
+除非机器具有位域指令或者你按照那种方式定义了@code{STRUCTURE_SIZE_BOUNDARY},否则你必须定义@code{PCC_BITFIELD_TYPE_MATTERS}具有非0值。

 @en If your aim is to make GCC use the same conventions for laying out
 @en bit-fields as are used by another compiler, here is how to investigate
 @en what the other compiler does.  Compile and run this program:
-如果你的目标是使得GCC使用与其它编译器相同的约定来布局位域,
-则这里有一种方式可以调查其它编译器是如何做的。编译运行该程序:
+如果你的目标是使得GCC使用与其它编译器相同的约定来布局位域,则这里有一种方式可以调查其它编译器是如何做的。编译运行该程序:

 @smallexample
 struct foo1
@@ -1867,9 +1630,7 @@
 @en whether unnamed bitfields affect the alignment of the containing
 @en structure.  The hook should return true if the structure should inherit
 @en the alignment requirements of an unnamed bitfield's type.
-当@code{PCC_BITFIELD_TYPE_MATTERS}为真,
-该钩子将确定未命名位域是否要影响包含它的结构体的对齐。
-钩子应该返回真,如果结构体应该继承未命名位域的类型所要求的对齐。
+当@code{PCC_BITFIELD_TYPE_MATTERS}为真,该钩子将确定未命名位域是否要影响包含它的结构体的对齐。钩子应该返回真,如果结构体应该继承未命名位域的类型所要求的对齐。
 @end deftypefn

 @deftypefn {Target Hook} bool TARGET_NARROW_VOLATILE_BITFIELD (void)
@@ -1891,8 +1652,7 @@
 @en mode, otherwise @var{mode} is VOIDmode.  @var{mode} is provided in the
 @en case where structures of one field would require the structure's mode to
 @en retain the field's mode.
-如果@var{field}为结构体中唯一的域,则@var{mode}为它的机器模式,
-否则@var{mode}为VOIDmode。
+如果@var{field}为结构体中唯一的域,则@var{mode}为它的机器模式,否则@var{mode}为VOIDmode。

 @en Normally, this is not needed.
 通常,不需要该宏。
@@ -1903,13 +1663,11 @@
 @en by @var{type} as a tree node) if the alignment computed in the usual
 @en way is @var{computed} and the alignment explicitly specified was
 @en @var{specified}.
-定义该宏为一个表达式,为一个类型(由作为树节点的@var{type}给定)的对齐,
-如果按照通常方式计算的对齐方式为@var{computed}并且显示指定的对齐方式为@var{specified}。
+定义该宏为一个表达式,为一个类型(由作为树节点的@var{type}给定)的对齐,如果按照通常方式计算的对齐方式为@var{computed}并且显示指定的对齐方式为@var{specified}。

 @en The default is to use @var{specified} if it is larger; otherwise, use
 @en the smaller of @var{computed} and @code{BIGGEST_ALIGNMENT}
-缺省是使用@var{specified},如果其更大;
-否则使用@var{computed}和@code{BIGGEST_ALIGNMENT}中较小的。
+缺省是使用@var{specified},如果其更大;否则使用@var{computed}和@code{BIGGEST_ALIGNMENT}中较小的。
 @end defmac

 @defmac MAX_FIXED_MODE_SIZE
@@ -1918,9 +1676,7 @@
 @en this size or smaller can be used for structures and unions with the
 @en appropriate sizes.  If this macro is undefined, @code{GET_MODE_BITSIZE
 @en (DImode)} is assumed.
-一个整数表达式,为实际应该被使用的最大的整数机器模式的位数。
-所有该大小或者更小一些的整数机器模式都可以用于结构体和联合体。
-如果哦没有定义该宏,则假设为@code{GET_MODE_BITSIZE (DImode)}。
+一个整数表达式,为实际应该被使用的最大的整数机器模式的位数。所有该大小或者更小一些的整数机器模式都可以用于结构体和联合体。如果哦没有定义该宏,则假设为@code{GET_MODE_BITSIZE
(DImode)}。
 @end defmac

 @defmac STACK_SAVEAREA_MODE (@var{save_level})
@@ -1930,30 +1686,26 @@
 @en @var{save_level} is one of @code{SAVE_BLOCK}, @code{SAVE_FUNCTION}, or
 @en @code{SAVE_NONLOCAL} and selects which of the three named patterns is
 @en having its mode specified.
-如果定义,则为一个@code{enum machine_mode}类型的表达式,
-指定名为@code{save_stack_@var{level}}的指令模式(@pxref{Standard Names})的save区域操作数的机器模式。
+如果定义,则为一个@code{enum
machine_mode}类型的表达式,指定名为@code{save_stack_@var{level}}的指令模式(@pxref{Standard
Names})的save区域操作数的机器模式。
 @var{save_level}为@code{SAVE_BLOCK},
@code{SAVE_FUNCTION}或@code{SAVE_NONLOCAL}中之一。

 @en You need not define this macro if it always returns @code{Pmode}.  You
 @en would most commonly define this macro if the
 @en @code{save_stack_@var{level}} patterns need to support both a 32- and a
 @en 64-bit mode.
-你不需要定义该宏,如果其总是返回@code{Pmode}。你通常将会定义该宏,
-如果@code{save_stack_@var{level}}指令模式需要同时支持32和64位机器模式。
+你不需要定义该宏,如果其总是返回@code{Pmode}。你通常将会定义该宏,如果@code{save_stack_@var{level}}指令模式需要同时支持32和64位机器模式。
 @end defmac

 @defmac STACK_SIZE_MODE
 @en If defined, an expression of type @code{enum machine_mode} that
 @en specifies the mode of the size increment operand of an
 @en @code{allocate_stack} named pattern (@pxref{Standard Names}).
-如果定义,为一个@code{enum machine_mode}类型的表达式,
-指定名为@code{allocate_stack}的指令模式(@pxref{Standard Names})的size increment操作数的机器模式。
+如果定义,为一个@code{enum
machine_mode}类型的表达式,指定名为@code{allocate_stack}的指令模式(@pxref{Standard
Names})的size increment操作数的机器模式。

 @en You need not define this macro if it always returns @code{word_mode}.
 @en You would most commonly define this macro if the @code{allocate_stack}
 @en pattern needs to support both a 32- and a 64-bit mode.
-你不需要定义该宏,如果其总是返回@code{word_mode}。你通常将会定义该宏,
-如果@code{allocate_stack}指令模式需要同时支持32和64位机器模式。
+你不需要定义该宏,如果其总是返回@code{word_mode}。你通常将会定义该宏,如果@code{allocate_stack}指令模式需要同时支持32和64位机器模式。
 @end defmac

 @deftypefn {Target Hook} {enum machine_mode}
TARGET_LIBGCC_CMP_RETURN_MODE (void)
@@ -1961,8 +1713,7 @@
 @en of compare instructions expanded to libgcc calls.  If not defined
 @en @code{word_mode} is returned which is the right choice for a majority of
 @en targets.
-该target钩子应该返回扩展为libgcc调用的比较指令的返回值的机器模式。
-如果没有定义,则返回@code{word_mode},其对于大多数target是正确的。
+该target钩子应该返回扩展为libgcc调用的比较指令的返回值的机器模式。如果没有定义,则返回@code{word_mode},其对于大多数target是正确的。
 @end deftypefn

 @deftypefn {Target Hook} {enum machine_mode}
TARGET_LIBGCC_SHIFT_COUNT_MODE (void)
@@ -1970,8 +1721,7 @@
 @en of shift instructions expanded to libgcc calls.  If not defined
 @en @code{word_mode} is returned which is the right choice for a majority of
 @en targets.
-该target钩子应该返回扩展为libgcc调用的移位指令的shift count操作数的机器模式。
-如果没有定义,则返回@code{word_mode},其对于大多数target是正确的。
+该target钩子应该返回扩展为libgcc调用的移位指令的shift
count操作数的机器模式。如果没有定义,则返回@code{word_mode},其对于大多数target是正确的。
 @end deftypefn

 @deftypefn {Target Hook} {enum machine_mode} TARGET_UNWIND_WORD_MODE (void)
@@ -1996,8 +1746,7 @@
 @en This macro should return true if floats with @var{size}
 @en bits do not have a NaN or infinity representation, but use the largest
 @en exponent for normal numbers instead.
-该宏应该返回真,如果具有@var{size}位数的浮点不具有NaN或无穷的表示,
-但是使用最大的普通数的指数来替代表示。
+该宏应该返回真,如果具有@var{size}位数的浮点不具有NaN或无穷的表示,但是使用最大的普通数的指数来替代表示。

 @en Defining this macro only affects the way @file{libgcc.a} emulates
 @en floating-point arithmetic.
@@ -2052,9 +1801,7 @@
 @en for use in copying SDmode values between memory and floating point
 @en registers whenever the function being expanded has any SDmode
 @en usage.
-该钩子在扩展为rtl之前被调用,允许target在扩展前执行额外的实例化或者分析。
-例如,rs6000port使用它来分配scratch栈槽,当被扩展的函数具有任何SDmode使用时,
-用于在内存和浮点寄存器之间复制SDmode值。
+该钩子在扩展为rtl之前被调用,允许target在扩展前执行额外的实例化或者分析。例如,rs6000port使用它来分配scratch栈槽,当被扩展的函数具有任何SDmode使用时,用于在内存和浮点寄存器之间复制SDmode值。
 @end deftypefn

 @deftypefn {Target Hook} void TARGET_INSTANTIATE_DECLS (void)
@@ -2156,8 +1903,7 @@
 @en A C expression for the size in bits of the C++ type @code{bool} and
 @en C99 type @code{_Bool} on the target machine.  If you don't define
 @en this, and you probably shouldn't, the default is @code{CHAR_TYPE_SIZE}.
-一个C表达式,为目标机器上C++类型@code{bool}和C99类型@code{_Bool}的位大小。
-如果没有定义,并且通常不会定义,缺省为@code{CHAR_TYPE_SIZE}。
+一个C表达式,为目标机器上C++类型@code{bool}和C99类型@code{_Bool}的位大小。如果没有定义,并且通常不会定义,缺省为@code{CHAR_TYPE_SIZE}。
 @end defmac

 @defmac FLOAT_TYPE_SIZE
@@ -3792,8 +3538,7 @@
 @en of the machine description constructs described in @ref{Define
 @en Constraints}.  This mechanism is obsolete.  New ports should not use
 @en it; old ports should convert to the new mechanism.
-机器特定的约束可以使用这些宏来定义,来替代在@ref{Define Constraints}中描述的机器描述结构。
-这种机制已经被废弃;旧的port应该转换为新的机制。
+机器特定的约束可以使用这些宏来定义,来替代在@ref{Define
Constraints}中描述的机器描述结构。这种机制已经被废弃;旧的port应该转换为新的机制。

 @defmac CONSTRAINT_LEN (@var{char}, @var{str})
 @en For the constraint at the start of @var{str}, which starts with the letter
@@ -3808,11 +3553,7 @@
 @en transitioning from a byzantine single-letter-constraint scheme: when you
 @en return a negative length for a constraint you want to re-use, genoutput
 @en will complain about every instance where it is used in the md file.
-对于起始于@var{str},其起始字母为@var{c}的约束,返回其长度。
-这允许你具有比单个字母更长的寄存器类别/常量/额外约束;
-你不需要定义该宏,如果你只用单个字母的约束。
-该宏的定义应该使用DEFAULT_CONSTRAINT_LEN,对于你不想特别处理的所有字符。
-在genoutput.c中有一些合理性检查,用来为md文件检查约束的长度。
+对于起始于@var{str},其起始字母为@var{c}的约束,返回其长度。这允许你具有比单个字母更长的寄存器类别/常量/额外约束;你不需要定义该宏,如果你只用单个字母的约束。该宏的定义应该使用DEFAULT_CONSTRAINT_LEN,对于你不想特别处理的所有字符。在genoutput.c中有一些合理性检查,用来为md文件检查约束的长度。
 @end defmac

 @defmac REG_CLASS_FROM_LETTER (@var{char})
@@ -3822,10 +3563,7 @@
 @en the value should be @code{NO_REGS}.  The register letter @samp{r},
 @en corresponding to class @code{GENERAL_REGS}, will not be passed
 @en to this macro; you do not need to handle it.
-一个C表达式,其为寄存器类别定义了机器相关的操作数约束字母。
-如果@var{char}为这样的字母,则值应该为对应的寄存器类别。否则,
-值应该为@code{NO_REGS}。寄存器字母@samp{r},对应于类别@code{GENERAL_REGS},
-将不被传给该宏;你不需要处理它。
+一个C表达式,其为寄存器类别定义了机器相关的操作数约束字母。如果@var{char}为这样的字母,则值应该为对应的寄存器类别。否则,值应该为@code{NO_REGS}。寄存器字母@samp{r},对应于类别@code{GENERAL_REGS},将不被传给该宏;你不需要处理它。
 @end defmac

 @defmac REG_CLASS_FROM_CONSTRAINT (@var{char}, @var{str})
@@ -3844,50 +3582,40 @@
 @en the appropriate range and return 1 if so, 0 otherwise.  If @var{c} is
 @en not one of those letters, the value should be 0 regardless of
 @en @var{value}.
-一个C表达式,其定义了机器相关操作数约束字母(@samp{I}, @samp{J}, @samp{K},
-@dots{} @samp{P}),指定了整数值的特定范围。如果@var{c}为那些字母中的,
-则表达式应该检查@var{value},一个整数,如果在合适的范围中则返回1,否则返回0。
-如果@var{c}不是那些字母中的,则值应该为0,而不管@var{value}是多少。
+一个C表达式,其定义了机器相关操作数约束字母(@samp{I}, @samp{J}, @samp{K}, @dots{}
@samp{P}),指定了整数值的特定范围。如果@var{c}为那些字母中的,则表达式应该检查@var{value},一个整数,如果在合适的范围中则返回1,否则返回0。如果@var{c}不是那些字母中的,则值应该为0,而不管@var{value}是多少。
 @end defmac

 @defmac CONST_OK_FOR_CONSTRAINT_P (@var{value}, @var{c}, @var{str})
 @en Like @code{CONST_OK_FOR_LETTER_P}, but you also get the constraint
 @en string passed in @var{str}, so that you can use suffixes to distinguish
 @en between different variants.
-类似@code{CONST_OK_FOR_LETTER_P},但是你还得到在@var{str}中传递的字符串,
-所以你可以使用后缀来区别不同的变种。
+类似@code{CONST_OK_FOR_LETTER_P},但是你还得到在@var{str}中传递的字符串,所以你可以使用后缀来区别不同的变种。
 @end defmac

 @defmac CONST_DOUBLE_OK_FOR_LETTER_P (@var{value}, @var{c})
 @en A C expression that defines the machine-dependent operand constraint
 @en letters that specify particular ranges of @code{const_double} values
 @en (@samp{G} or @samp{H}).
-一个C表达式,定义了机器相关操作数约束字母,
-指定了@code{const_double}值的特定范围(@samp{G}或@samp{H})。
+一个C表达式,定义了机器相关操作数约束字母,指定了@code{const_double}值的特定范围(@samp{G}或@samp{H})。

 @en If @var{c} is one of those letters, the expression should check that
 @en @var{value}, an RTX of code @code{const_double}, is in the appropriate
 @en range and return 1 if so, 0 otherwise.  If @var{c} is not one of those
 @en letters, the value should be 0 regardless of @var{value}.
-如果@var{c}为那些字母中的,则表达式应该检查@var{value},
-一个代码为@code{const_double}的RTX,如果在合适的范围中则返回1,否则返回0。
-如果@var{c}不是那些字母中的,则值应该为0,而不管@var{value}是多少。
+如果@var{c}为那些字母中的,则表达式应该检查@var{value},一个代码为@code{const_double}的RTX,如果在合适的范围中则返回1,否则返回0。如果@var{c}不是那些字母中的,则值应该为0,而不管@var{value}是多少。

 @en @code{const_double} is used for all floating-point constants and for
 @en @code{DImode} fixed-point constants.  A given letter can accept either
 @en or both kinds of values.  It can use @code{GET_MODE} to distinguish
 @en between these kinds.
-@code{const_double}用于所有的浮点常量和@code{DImode}定点常量。
-一个给定的字母可以接受一种或者这两种类型的值。
-其可以使用@code{GET_MODE}来区别这些类型。
+@code{const_double}用于所有的浮点常量和@code{DImode}定点常量。一个给定的字母可以接受一种或者这两种类型的值。其可以使用@code{GET_MODE}来区别这些类型。
 @end defmac

 @defmac CONST_DOUBLE_OK_FOR_CONSTRAINT_P (@var{value}, @var{c}, @var{str})
 @en Like @code{CONST_DOUBLE_OK_FOR_LETTER_P}, but you also get the constraint
 @en string passed in @var{str}, so that you can use suffixes to distinguish
 @en between different variants.
-类似@code{CONST_DOUBLE_OK_FOR_LETTER_P},但是你还得到在@var{str}中传递的字符串,
-所以你可以使用后缀来区别不同的变种。
+类似@code{CONST_DOUBLE_OK_FOR_LETTER_P},但是你还得到在@var{str}中传递的字符串,所以你可以使用后缀来区别不同的变种。
 @end defmac

 @defmac EXTRA_CONSTRAINT (@var{value}, @var{c})
@@ -3897,19 +3625,14 @@
 @en elsewhere defined and not matched by @code{REG_CLASS_FROM_LETTER} /
 @en @code{REG_CLASS_FROM_CONSTRAINT}
 @en may be used.  Normally this macro will not be defined.
-一个C表达式,定义了可选的机器相关约束字母,
-其可以用于为target机器隔离特定类型的操作数,通常为内存引用。
-任何没有在其它地方定义并且不被
-@code{REG_CLASS_FROM_LETTER} / REG_CLASS_FROM_CONSTRAINT匹配的字母都可以使用。
-通常该宏将不被定义。
+一个C表达式,定义了可选的机器相关约束字母,其可以用于为target机器隔离特定类型的操作数,通常为内存引用。
+任何没有在其它地方定义并且不被@code{REG_CLASS_FROM_LETTER} /
REG_CLASS_FROM_CONSTRAINT匹配的字母都可以使用。通常该宏将不被定义。

 @en If it is required for a particular target machine, it should return 1
 @en if @var{value} corresponds to the operand type represented by the
 @en constraint letter @var{c}.  If @var{c} is not defined as an extra
 @en constraint, the value returned should be 0 regardless of @var{value}.
-如果对于特定的target机器需要该宏,则应该返回1,
-如果@var{value}对应于由约束字母@var{c}表示的操作数类型。
-如果@var{c}没有作为extra约束定义,则值应该为0,而不管@var{value}是多少。
+如果对于特定的target机器需要该宏,则应该返回1,如果@var{value}对应于由约束字母@var{c}表示的操作数类型。如果@var{c}没有作为extra约束定义,则值应该为0,而不管@var{value}是多少。

 @en For example, on the ROMP, load instructions cannot have their output
 @en in r0 if the memory reference contains a symbolic address.  Constraint
@@ -3918,28 +3641,21 @@
 @en a @samp{Q} constraint on the input and @samp{r} on the output.  The next
 @en alternative specifies @samp{m} on the input and a register class that
 @en does not include r0 on the output.
-例如,则ROMP上,加载指令不能将它们的输出放在r0中,
-如果内存引用包含了一个符号地址。
-约束字母@samp{Q}被定义来表示不包含符号地址的内存地址。
-一个可选项使用@samp{Q}约束在输入上并且@samp{r}在输出上来指定。
-下一个可选项指定了@samp{m}在输入上并且不包含r0的寄存器类别在输出上。
+例如,则ROMP上,加载指令不能将它们的输出放在r0中,如果内存引用包含了一个符号地址。约束字母@samp{Q}被定义来表示不包含符号地址的内存地址。一个可选项使用@samp{Q}约束在输入上并且@samp{r}在输出上来指定。下一个可选项指定了@samp{m}在输入上并且不包含r0的寄存器类别在输出上。
 @end defmac

 @defmac EXTRA_CONSTRAINT_STR (@var{value}, @var{c}, @var{str})
 @en Like @code{EXTRA_CONSTRAINT}, but you also get the constraint string passed
 @en in @var{str}, so that you can use suffixes to distinguish between different
 @en variants.
-类似@code{EXTRA_CONSTRAINT},但是你还得到在@var{str}中传递的字符串,
-所以你可以使用后缀来区别不同的变种。
+类似@code{EXTRA_CONSTRAINT},但是你还得到在@var{str}中传递的字符串,所以你可以使用后缀来区别不同的变种。
 @end defmac

 @defmac EXTRA_MEMORY_CONSTRAINT (@var{c}, @var{str})
 @en A C expression that defines the optional machine-dependent constraint
 @en letters, amongst those accepted by @code{EXTRA_CONSTRAINT}, that should
 @en be treated like memory constraints by the reload pass.
-一个C表达式,定义了可选的机器相关约束字母,
-在那些由@code{EXTRA_CONSTRAINT}接受的字母中,
-其应该被重载过程作为内存约束来对待。
+一个C表达式,定义了可选的机器相关约束字母,在那些由@code{EXTRA_CONSTRAINT}接受的字母中,其应该被重载过程作为内存约束来对待。

 @en It should return 1 if the operand type represented by the constraint
 @en at the start of @var{str}, the first letter of which is the letter @var{c},
@@ -3947,9 +3663,7 @@
 @en all those whose address is simply a base register.  This allows the reload
 @en pass to reload an operand, if it does not directly correspond to
the operand
 @en type of @var{c}, by copying its address into a base register.
-其应该返回1,如果由@var{str}起始,并且第一个字母为@var{c}的约束所表示的操作数
-类型所包含的所有内存引用为简单的基址寄存器。这允许重载过程来重载操作数,
-如果其不直接对应于操作数类型@var{c},通过将其地址复制到基址寄存器中。
+其应该返回1,如果由@var{str}起始,并且第一个字母为@var{c}的约束所表示的操作数类型所包含的所有内存引用为简单的基址寄存器。这允许重载过程来重载操作数,如果其不直接对应于操作数类型@var{c},通过将其地址复制到基址寄存器中。

 @en For example, on the S/390, some instructions do not accept arbitrary
 @en memory references, but only those that do not make use of an index
@@ -3960,12 +3674,7 @@
 @en reload pass knows it can be reloaded by copying the memory address
 @en into a base register if required.  This is analogous to the way
 @en an @samp{o} constraint can handle any memory operand.
-例如,在S/390上,一些指令不接受任意的内存引用,只接受那些不使用索引寄存器的。
-约束字母@samp{Q}被通过@code{EXTRA_CONSTRAINT}定义,来表示这种类型的内存地址。
-如果字母@samp{Q}被标记为@code{EXTRA_MEMORY_CONSTRAINT},
-则一个@samp{Q}常量可以处理任何内存操作数,
-因为重载过程知道其可以通过将内存地址复制到基址寄存器中如果需要的话。
-这类似于可以处理任何内存操作数的@samp{o}约束的方式。
+例如,在S/390上,一些指令不接受任意的内存引用,只接受那些不使用索引寄存器的。约束字母@samp{Q}被通过@code{EXTRA_CONSTRAINT}定义,来表示这种类型的内存地址。如果字母@samp{Q}被标记为@code{EXTRA_MEMORY_CONSTRAINT},则一个@samp{Q}常量可以处理任何内存操作数,因为重载过程知道其可以通过将内存地址复制到基址寄存器中如果需要的话。这类似于可以处理任何内存操作数的@samp{o}约束的方式。
 @end defmac

 @defmac EXTRA_ADDRESS_CONSTRAINT (@var{c}, @var{str})
@@ -3973,9 +3682,7 @@
 @en letters, amongst those accepted by @code{EXTRA_CONSTRAINT} /
 @en @code{EXTRA_CONSTRAINT_STR}, that should
 @en be treated like address constraints by the reload pass.
-一个C表达式,定义了可选的机器相关约束字母,在那些由
-@code{EXTRA_CONSTRAINT} / @code{EXTRA_CONSTRAINT_STR}接受的字母中,
-其应该被重载过程作为地址约束来对待。
+一个C表达式,定义了可选的机器相关约束字母,在那些由@code{EXTRA_CONSTRAINT} /
@code{EXTRA_CONSTRAINT_STR}接受的字母中,其应该被重载过程作为地址约束来对待。

 @en It should return 1 if the operand type represented by the constraint
 @en at the start of @var{str}, which starts with the letter @var{c}, comprises
@@ -3983,15 +3690,12 @@
 @en all those that consist of just a base register.  This allows the reload
 @en pass to reload an operand, if it does not directly correspond to
the operand
 @en type of @var{str}, by copying it into a base register.
-其应该返回1,如果由@var{str}起始,并且第一个字母为@var{c}的约束所表示的操作数
-类型所包含的所有内存引用为简单的基址寄存器。这允许重载过程来重载操作数,
-如果其不直接对应于操作数类型@var{str},通过将其地址复制到基址寄存器中。
+其应该返回1,如果由@var{str}起始,并且第一个字母为@var{c}的约束所表示的操作数类型所包含的所有内存引用为简单的基址寄存器。这允许重载过程来重载操作数,如果其不直接对应于操作数类型@var{str},通过将其地址复制到基址寄存器中。

 @en Any constraint marked as @code{EXTRA_ADDRESS_CONSTRAINT} can only
 @en be used with the @code{address_operand} predicate.  It is treated
 @en analogously to the @samp{p} constraint.
-标记为@code{EXTRA_ADDRESS_CONSTRAINT}的约束只能与@code{address_operand}断言
-一起使用。其类似于@samp{p}约束。
+标记为@code{EXTRA_ADDRESS_CONSTRAINT}的约束只能与@code{address_operand}断言一起使用。其类似于@samp{p}约束。
 @end defmac

 @en @node Stack and Calling
@@ -4040,16 +3744,14 @@
 @en When we say, ``define this macro if @dots{}'', it means that the
 @en compiler checks this macro only with @code{#ifdef} so the precise
 @en definition used does not matter.
-当我们说“定义该宏,如果@dots{}”,这意味着编译器只是使用@code{#ifdef}来检查该宏,
-所以具体定义的值并没有关系。
+当我们说“定义该宏,如果@dots{}”,这意味着编译器只是使用@code{#ifdef}来检查该宏,所以具体定义的值并没有关系。
 @end defmac

 @defmac STACK_PUSH_CODE
 @en This macro defines the operation used when something is pushed
 @en on the stack.  In RTL, a push operation will be
 @en @code{(set (mem (STACK_PUSH_CODE (reg sp))) @dots{})}
-该宏定义了当压栈所使用的操作。对于RTL形式,
-压栈操作将为@code{(set (mem (STACK_PUSH_CODE (reg sp))) @dots{})}。
+该宏定义了当压栈所使用的操作。对于RTL形式,压栈操作将为@code{(set (mem (STACK_PUSH_CODE (reg
sp))) @dots{})}。

 @en The choices are @code{PRE_DEC}, @code{POST_DEC}, @code{PRE_INC},
 @en and @code{POST_INC}.  Which of these is correct depends on
@@ -4057,14 +3759,12 @@
 @en to the last item on the stack or whether it points to the
 @en space for the next item on the stack.
 可选择的方式为@code{PRE_DEC}, @code{POST_DEC}, @code{PRE_INC}和@code{POST_INC}。
-使用哪一个是正确的,取决于栈的方向和栈指针是否指向栈中的最后一项,
-还是指向之后的空间。
+使用哪一个是正确的,取决于栈的方向和栈指针是否指向栈中的最后一项,还是指向之后的空间。

 @en The default is @code{PRE_DEC} when @code{STACK_GROWS_DOWNWARD} is
 @en defined, which is almost always right, and @code{PRE_INC} otherwise,
 @en which is often wrong.
-缺省为@code{PRE_DEC},当@code{STACK_GROWS_DOWNWARD}被定义时,
-这大多情况下都是正确,否则为@code{PRE_INC},这经常是错误的。
+缺省为@code{PRE_DEC},当@code{STACK_GROWS_DOWNWARD}被定义时,这大多情况下都是正确,否则为@code{PRE_INC},这经常是错误的。
 @end defmac

 @defmac FRAME_GROWS_DOWNWARD
@@ -4087,9 +3787,7 @@
 @en subtracting the first slot's length from @code{STARTING_FRAME_OFFSET}.
 @en Otherwise, it is found by adding the length of the first slot to the
 @en value @code{STARTING_FRAME_OFFSET}.
-如果@code{FRAME_GROWS_DOWNWARD},则通过从@code{STARTING_FRAME_OFFSET}减去第一个
-栈槽的长度来查找下一个栈槽的偏移量。否则,通过从@code{STARTING_FRAME_OFFSET}
-加上第一个栈槽的长度来查找。
+如果@code{FRAME_GROWS_DOWNWARD},则通过从@code{STARTING_FRAME_OFFSET}减去第一个栈槽的长度来查找下一个栈槽的偏移量。否则,通过从@code{STARTING_FRAME_OFFSET}加上第一个栈槽的长度来查找。
 @c i'm not sure if the above is still correct.. had to change it to get
 @c rid of an overfull.  --mew 2feb93
 @end defmac
@@ -4103,17 +3801,14 @@
 @en is a register save block following the local block that doesn't require
 @en alignment to @code{STACK_BOUNDARY}, it may be beneficial to disable
 @en stack alignment and do it in the backend.
-在一些port上,@code{STARTING_FRAME_OFFSET}为非0,
-或者在局部块之后有一块寄存器保存区域,其不需要对齐到@code{STACK_BOUNDARY},
-这样禁止栈对齐并且在后端实现可能会更好。
+在一些port上,@code{STARTING_FRAME_OFFSET}为非0,或者在局部块之后有一块寄存器保存区域,其不需要对齐到@code{STACK_BOUNDARY},这样禁止栈对齐并且在后端实现可能会更好。
 @end defmac

 @defmac STACK_POINTER_OFFSET
 @en Offset from the stack pointer register to the first location at which
 @en outgoing arguments are placed.  If not specified, the default value of
 @en zero is used.  This is the proper value for most machines.
-从栈指针寄存器到第一个输出的参数所放在的位置的偏移量。
-如果没有指定,则缺省值0被使用。这对于大多数机器都合适。
+从栈指针寄存器到第一个输出的参数所放在的位置的偏移量。如果没有指定,则缺省值0被使用。这对于大多数机器都合适。

 @en If @code{ARGS_GROW_DOWNWARD}, this is the offset to the location above
 @en the first location at which outgoing arguments are placed.
@@ -4125,8 +3820,7 @@
 @en Offset from the argument pointer register to the first argument's
 @en address.  On some machines it may depend on the data type of the
 @en function.
-参数指针寄存器到第一个参数的地址的偏移量。在一些机器上,
-其可能依赖于函数的数据类型。
+参数指针寄存器到第一个参数的地址的偏移量。在一些机器上,其可能依赖于函数的数据类型。

 @en If @code{ARGS_GROW_DOWNWARD}, this is the offset to the location above
 @en the first argument's address.
@@ -4141,8 +3835,7 @@
 @en The default value for this macro is @code{STACK_POINTER_OFFSET} plus the
 @en length of the outgoing arguments.  The default is correct for most
 @en machines.  See @file{function.c} for details.
-该宏的缺省值为@code{STACK_POINTER_OFFSET}加上输出参数的长度。
-缺省值对于大多数机器是正确的。详情参见@file{function.c}。
+该宏的缺省值为@code{STACK_POINTER_OFFSET}加上输出参数的长度。缺省值对于大多数机器是正确的。详情参见@file{function.c}。
 @end defmac

 @defmac INITIAL_FRAME_ADDRESS_RTX
@@ -4152,11 +3845,7 @@
 @en default value will be used.  Define this macro in order to make
frame pointer
 @en elimination work in the presence of @code{__builtin_frame_address
(count)} and
 @en @code{__builtin_return_address (count)} for @code{count} not equal to zero.
-一个C表达式,其值为RTL,表示初始栈帧的地址。
-该地址被传给@code{RETURN_ADDR_RTX}和@code{DYNAMIC_CHAIN_ADDRESS}。
-如果你没有定义该宏,则一个合理的缺省值将被使用。定义该宏,
-可以使帧指针消除在@code{__builtin_frame_address (count)}和
-@code{__builtin_return_address (count)}不等于0的情况下工作。
+一个C表达式,其值为RTL,表示初始栈帧的地址。该地址被传给@code{RETURN_ADDR_RTX}和@code{DYNAMIC_CHAIN_ADDRESS}。如果你没有定义该宏,则一个合理的缺省值将被使用。定义该宏,可以使帧指针消除在@code{__builtin_frame_address
(count)}和@code{__builtin_return_address (count)}不等于0的情况下工作。
 @end defmac

 @defmac DYNAMIC_CHAIN_ADDRESS (@var{frameaddr})
@@ -4164,14 +3853,12 @@
 @en frame where the pointer to the caller's frame is stored.  Assume that
 @en @var{frameaddr} is an RTL expression for the address of the stack frame
 @en itself.
-一个C表达式,其值为RTL,表示栈帧中的地址,指向被存储的调用者的帧。
-假设@var{frameaddr}为一个栈帧本身的地址的RTL表达式。
+一个C表达式,其值为RTL,表示栈帧中的地址,指向被存储的调用者的帧。假设@var{frameaddr}为一个栈帧本身的地址的RTL表达式。

 @en If you don't define this macro, the default is to return the value
 @en of @var{frameaddr}---that is, the stack frame address is also the
 @en address of the stack word that points to the previous frame.
-如果你没有定义该宏,则缺省为返回@var{frameaddr}的值――也就是说,
-栈帧地址也是指向之前帧的地址。
+如果你没有定义该宏,则缺省为返回@var{frameaddr}的值――也就是说,栈帧地址也是指向之前帧的地址。
 @end defmac

 @defmac SETUP_FRAME_ADDRESSES
@@ -4180,9 +3867,7 @@
 @en on the SPARC, we must flush all of the register windows to the stack
 @en before we can access arbitrary stack frames.  You will seldom need to
 @en define this macro.
-如果定义,为一个C表达式,其产生机器特定的代码来建立栈,使得可以访问任意的帧。
-例如,在SPARC上,我们必须刷新栈的所有寄存器窗口,在我们可以访问任意栈帧之前。
-你很少会需要定义该宏。
+如果定义,为一个C表达式,其产生机器特定的代码来建立栈,使得可以访问任意的帧。例如,在SPARC上,我们必须刷新栈的所有寄存器窗口,在我们可以访问任意栈帧之前。你很少会需要定义该宏。
 @end defmac

 @deftypefn {Target Hook} rtx TARGET_BUILTIN_SETJMP_FRAME_VALUE (void)
@@ -4191,10 +3876,7 @@
 @en The default value, @code{virtual_stack_vars_rtx}, is correct for most
 @en machines.  One reason you may need to define this target hook is if
 @en @code{hard_frame_pointer_rtx} is the appropriate value on your machine.
-该target钩子应该返回一个rtx,用于将当前帧的地址存储到内建的@code{setjmp}缓存中。
-缺省值,@code{virtual_stack_vars_rtx},对于大多数机器是正确的。
-一种你可能需要定义该target钩子的原因是,
-如果@code{hard_frame_pointer_rtx}在你的机器上是合适的值。
+该target钩子应该返回一个rtx,用于将当前帧的地址存储到内建的@code{setjmp}缓存中。缺省值,@code{virtual_stack_vars_rtx},对于大多数机器是正确的。一种你可能需要定义该target钩子的原因是,如果@code{hard_frame_pointer_rtx}在你的机器上是合适的值。
 @end deftypefn

 @defmac FRAME_ADDR_RTX (@var{frameaddr})
@@ -4203,9 +3885,7 @@
 @en of the current frame.  This is used for __builtin_frame_address.
 @en You need only define this macro if the frame address is not the same
 @en as the frame pointer.  Most machines do not need to define it.
-一个C表达式,其值为RTL,表示当前帧的帧地址。@var{frameaddr}为当前帧的帧指针。
-这用于__builtin_frame_address。你只有当帧地址与帧指针不同的时候才需要定义该宏。
-大多数机器不需要定义该宏。
+一个C表达式,其值为RTL,表示当前帧的帧地址。@var{frameaddr}为当前帧的帧指针。这用于__builtin_frame_address。你只有当帧地址与帧指针不同的时候才需要定义该宏。大多数机器不需要定义该宏。
 @end defmac

 @defmac RETURN_ADDR_RTX (@var{count}, @var{frameaddr})
@@ -4232,9 +3912,7 @@
 @en prologue.  This RTL is either a @code{REG}, indicating that the return
 @en value is saved in @samp{REG}, or a @code{MEM} representing a location in
 @en the stack.
-一个C表达式,其值为RTL,表示在任何函数的起始处,在序言之前,
-流入的返回地址的位置。该RTL或者为一个@code{REG},
-指示返回地址保存在@samp{REG}中,或者一个@code{MEM}表示位于栈中。
+一个C表达式,其值为RTL,表示在任何函数的起始处,在序言之前,流入的返回地址的位置。该RTL或者为一个@code{REG},指示返回地址保存在@samp{REG}中,或者一个@code{MEM}表示位于栈中。

 @en You only need to define this macro if you want to support call frame
 @en debugging information like that provided by DWARF 2.
@@ -4242,8 +3920,7 @@

 @en If this RTL is a @code{REG}, you should also define
 @en @code{DWARF_FRAME_RETURN_COLUMN} to @code{DWARF_FRAME_REGNUM (REGNO)}.
-如果该RTL为一个@code{REG},
-你还要定义@code{DWARF_FRAME_RETURN_COLUMN}为@code{DWARF_FRAME_REGNUM (REGNO)}。
+如果该RTL为一个@code{REG},你还要定义@code{DWARF_FRAME_RETURN_COLUMN}为@code{DWARF_FRAME_REGNUM
(REGNO)}。
 @end defmac

 @defmac DWARF_ALT_FRAME_RETURN_COLUMN
@@ -4251,16 +3928,13 @@
 @en number that may be used as an alternative return column.  The column
 @en must not correspond to any gcc hard register (that is, it must not
 @en be in the range of @code{DWARF_FRAME_REGNUM}).
-一个C表达式,其值为一个整数,给出了DWARF2的列号,可以用作替代的返回列。
-column必须不对应于任何gcc硬件寄存器(也就是说,
-其必须不在@code{DWARF_FRAME_REGNUM}的范围中)。
+一个C表达式,其值为一个整数,给出了DWARF2的列号,可以用作替代的返回列。column必须不对应于任何gcc硬件寄存器(也就是说,其必须不在@code{DWARF_FRAME_REGNUM}的范围中)。

 @en This macro can be useful if @code{DWARF_FRAME_RETURN_COLUMN} is set to a
 @en general register, but an alternative column needs to be used for signal
 @en frames.  Some targets have also used different frame return columns
 @en over time.
-该宏当被设为一个通用寄存器,但是候选的column需要用于signal帧的时候会很有用。
-一些target还使用了不同的帧返回列。
+该宏当被设为一个通用寄存器,但是候选的column需要用于signal帧的时候会很有用。一些target还使用了不同的帧返回列。
 @end defmac

 @defmac DWARF_ZERO_REG
@@ -4269,17 +3943,14 @@
 @en only be defined if the target has an architected zero register, and
 @en someone decided it was a good idea to use that register number to
 @en terminate the stack backtrace.  New ports should avoid this.
-一个C表达式,其值为一个整数,给出了DWARF2寄存器编号,其被认为总是具有值0。
-这应该只当target的体系结构中具有一个0寄存器并且认为使用寄存器编号来确定栈的
-回溯是一个好主意的时候才被定义。新的part应该避免该宏。
+一个C表达式,其值为一个整数,给出了DWARF2寄存器编号,其被认为总是具有值0。这应该只当target的体系结构中具有一个0寄存器并且认为使用寄存器编号来确定栈的回溯是一个好主意的时候才被定义。新的part应该避免该宏。
 @end defmac

 @deftypefn {Target Hook} void TARGET_DWARF_HANDLE_FRAME_UNSPEC (const
char *@var{label}, rtx @var{pattern}, int @var{index})
 @en This target hook allows the backend to emit frame-related insns that
 @en contain UNSPECs or UNSPEC_VOLATILEs.  The DWARF 2 call frame debugging
 @en info engine will invoke it on insns of the form
-该target钩子允许后端生成帧相关的insn,其包含了UNSPECs或UNSPEC_VOLATILEs。
-DWARF2调用帧调试信息引擎将会按照如下的形式来调用它
+该target钩子允许后端生成帧相关的insn,其包含了UNSPECs或UNSPEC_VOLATILEs。DWARF2调用帧调试信息引擎将会按照如下的形式来调用它
 @smallexample
 (set (reg) (unspec [@dots{}] UNSPEC_INDEX))
 @end smallexample
@@ -4302,9 +3973,7 @@
 @en frame at the beginning of any function, before the prologue.  The top of
 @en the frame is defined to be the value of the stack pointer in the
 @en previous frame, just before the call instruction.
-一个C表达式,其值为一个整数,给出了偏移字节数,
-从栈指针寄存器到任何函数的起始处,序言之前的栈帧的顶部。
-帧的顶部被定义为之前帧的栈指针的值,就在call指令之前。
+一个C表达式,其值为一个整数,给出了偏移字节数,从栈指针寄存器到任何函数的起始处,序言之前的栈帧的顶部。帧的顶部被定义为之前帧的栈指针的值,就在call指令之前。

 @en You only need to define this macro if you want to support call frame
 @en debugging information like that provided by DWARF 2.
@@ -4317,9 +3986,7 @@
 @en final value should coincide with that calculated by
 @en @code{INCOMING_FRAME_SP_OFFSET}.  Which is unfortunately not usable
 @en during virtual register instantiation.
-一个C表达式,其值为一个整数,给出了偏移字节数,从参数指针到规范化帧地址(cfa)。
-最终的值应该与通过@code{INCOMING_FRAME_SP_OFFSET}所计算的一致。
-不幸的是这在虚寄存器实例化的时候不可用。
+一个C表达式,其值为一个整数,给出了偏移字节数,从参数指针到规范化帧地址(cfa)。最终的值应该与通过@code{INCOMING_FRAME_SP_OFFSET}所计算的一致。不幸的是这在虚寄存器实例化的时候不可用。

 @en The default value for this macro is
 @en @code{FIRST_PARM_OFFSET (fundecl) + crtl->args.pretend_args_size},
@@ -4327,14 +3994,12 @@
 @en immediately before the stack frame.  Note that this is not the case on
 @en some targets that save registers into the caller's frame, such as SPARC
 @en and rs6000, and so such targets need to define this macro.
-该宏的缺省值为@code{FIRST_PARM_OFFSET (fundecl)},其对于大多数机器是正确的;
-总的来说,参数在栈帧之前被找到。注意有些情况不是这样的,一些target将寄存器保存在调用者的帧中,像SPARC和rs6000,这样的target就不需要定义该宏。
+该宏的缺省值为@code{FIRST_PARM_OFFSET
(fundecl)},其对于大多数机器是正确的;总的来说,参数在栈帧之前被找到。注意有些情况不是这样的,一些target将寄存器保存在调用者的帧中,像SPARC和rs6000,这样的target就不需要定义该宏。

 @en You only need to define this macro if the default is incorrect, and you
 @en want to support call frame debugging information like that provided by
 @en DWARF 2.
-你只有当缺省是不正确的时候,
-以及你想支持像DWARF2提供的那样的帧调试信息时才需要定义该宏。
+你只有当缺省是不正确的时候,以及你想支持像DWARF2提供的那样的帧调试信息时才需要定义该宏。
 @end defmac

 @defmac FRAME_POINTER_CFA_OFFSET (@var{fundecl})
@@ -4342,9 +4007,7 @@
 @en in bytes from the frame pointer to the canonical frame address (cfa).
 @en The final value should coincide with that calculated by
 @en @code{INCOMING_FRAME_SP_OFFSET}.
-如果被定义,则为一个C表达式,其值为一个整数,给出了偏移字节数,
-从帧指针到规范化帧地址(cfa)。
-最终的值应该与通过@code{INCOMING_FRAME_SP_OFFSET}所计算的一致。
+如果被定义,则为一个C表达式,其值为一个整数,给出了偏移字节数,从帧指针到规范化帧地址(cfa)。最终的值应该与通过@code{INCOMING_FRAME_SP_OFFSET}所计算的一致。

 @en Normally the CFA is calculated as an offset from the argument pointer,
 @en via @code{ARG_POINTER_CFA_OFFSET}, but if the argument pointer is
@@ -4353,10 +4016,7 @@
 @en based on the frame pointer instead of the argument pointer.  Only one
 @en of @code{FRAME_POINTER_CFA_OFFSET} and @code{ARG_POINTER_CFA_OFFSET}
 @en should be defined.
-通常CFA被作为参数指针的偏移量来计算,通过@code{ARG_POINTER_CFA_OFFSET},
-但是如果参数指针是一个变量,这就不太可能了。如果该宏被定义,
-它暗示了虚寄存器实例化应该基于帧指针而不是参数指针。
-@code{FRAME_POINTER_CFA_OFFSET}和@code{ARG_POINTER_CFA_OFFSET}只有一个应该被定义。
+通常CFA被作为参数指针的偏移量来计算,通过@code{ARG_POINTER_CFA_OFFSET},但是如果参数指针是一个变量,这就不太可能了。如果该宏被定义,它暗示了虚寄存器实例化应该基于帧指针而不是参数指针。@code{FRAME_POINTER_CFA_OFFSET}和@code{ARG_POINTER_CFA_OFFSET}只有一个应该被定义。
 @end defmac

 @defmac CFA_FRAME_BASE_OFFSET (@var{fundecl})
@@ -4364,9 +4024,7 @@
 @en in bytes from the canonical frame address (cfa) to the frame base used
 @en in DWARF 2 debug information.  The default is zero.  A different value
 @en may reduce the size of debug information on some ports.
-如果定义,则为一个C表达式,其值为一个整数,给出了偏移字节数,
-从规范化帧地址(cfa)到DWARF2调试信息使用的frame base。缺省为0。
-不同的值可以在一些port上减少调试信息的大小。
+如果定义,则为一个C表达式,其值为一个整数,给出了偏移字节数,从规范化帧地址(cfa)到DWARF2调试信息使用的frame
base。缺省为0。不同的值可以在一些port上减少调试信息的大小。
 @end defmac

 @en @node Exception Handling
@@ -4379,18 +4037,14 @@
 @en A C expression whose value is the @var{N}th register number used for
 @en data by exception handlers, or @code{INVALID_REGNUM} if fewer than
 @en @var{N} registers are usable.
-一个C表达式,其值为第@var{N}个寄存器的编号,用于异常处理的数据,
-或者为@code{INVALID_REGNUM},如果小于@var{N}个寄存器可用。
+一个C表达式,其值为第@var{N}个寄存器的编号,用于异常处理的数据,或者为@code{INVALID_REGNUM},如果小于@var{N}个寄存器可用。

 @en The exception handling library routines communicate with the exception
 @en handlers via a set of agreed upon registers.  Ideally these registers
 @en should be call-clobbered; it is possible to use call-saved registers,
 @en but may negatively impact code size.  The target must support at least
 @en 2 data registers, but should define 4 if there are enough free registers.
-异常处理库程序与异常处理者通过一套协定好的寄存器来通讯。理想的,
-这些寄存器应该为调用破坏的;可以使用调用保存的寄存器,
-但可能会对代码大小产生负影响。target必须支持至少两个数据寄存器,
-但如果有足够的可用的寄存器,则应该定义为4。
+异常处理库程序与异常处理者通过一套协定好的寄存器来通讯。理想的,这些寄存器应该为调用破坏的;可以使用调用保存的寄存器,但可能会对代码大小产生负影响。target必须支持至少两个数据寄存器,但如果有足够的可用的寄存器,则应该定义为4。

 @en You must define this macro if you want to support call frame exception
 @en handling like that provided by DWARF 2.
@@ -4402,8 +4056,7 @@
 @en to store a stack adjustment to be applied before function return.
 @en This is used to unwind the stack to an exception handler's call frame.
 @en It will be assigned zero on code paths that return normally.
-一个C表达式,其值为RTL,表示一个位置,用来存储栈调整,在函数返回前应用。
-这用于unwind栈到一个异常处理的调用帧中。其将被赋予0在通常的返回代码路径上。
+一个C表达式,其值为RTL,表示一个位置,用来存储栈调整,在函数返回前应用。这用于unwind栈到一个异常处理的调用帧中。其将被赋予0在通常的返回代码路径上。

 @en Typically this is a call-clobbered hard register that is otherwise
 @en untouched by the epilogue, but could also be a stack slot.
@@ -4415,17 +4068,14 @@
 @en stack location to be restored in place.  Otherwise, you must define
 @en this macro if you want to support call frame exception handling like
 @en that provided by DWARF 2.
-不要定义该宏,如果栈指针在调用帧本身通过序言和尾声来保存和恢复时;
-这种情况下,异常处理库函数将更新栈位置并保存。否则,你必须定义该宏,
-如果你想支持调用帧异常处理,就像DWARF2提供的那样。
+不要定义该宏,如果栈指针在调用帧本身通过序言和尾声来保存和恢复时;这种情况下,异常处理库函数将更新栈位置并保存。否则,你必须定义该宏,如果你想支持调用帧异常处理,就像DWARF2提供的那样。
 @end defmac

 @defmac EH_RETURN_HANDLER_RTX
 @en A C expression whose value is RTL representing a location in which
 @en to store the address of an exception handler to which we should
 @en return.  It will not be assigned on code paths that return normally.
-一个C表达式,其值为一个RTL,表示一个位置,用来存储我们应该返回的异常处理的地址。
-其在通常的返回的代码路径上将不被赋值。
+一个C表达式,其值为一个RTL,表示一个位置,用来存储我们应该返回的异常处理的地址。其在通常的返回的代码路径上将不被赋值。

 @en Typically this is the location in the call frame at which the normal
 @en return address is stored.  For targets that return by popping an
@@ -4434,16 +4084,12 @@
 @en frame.  If defined, @code{EH_RETURN_STACKADJ_RTX} will have already
 @en been assigned, so it may be used to calculate the location of the
 @en target call frame.
-通常这是在调用帧中通常返回地址存储的位置。对于通过在栈中弹出地址的target,
-这可以为一个内存地址,就在target调用帧的下面,而不是在当前调用帧中。
-如果被定义,@code{EH_RETURN_STACKADJ_RTX}将已经被赋值,
-所以其可以用于计算target调用帧的位置。
+通常这是在调用帧中通常返回地址存储的位置。对于通过在栈中弹出地址的target,这可以为一个内存地址,就在target调用帧的下面,而不是在当前调用帧中。如果被定义,@code{EH_RETURN_STACKADJ_RTX}将已经被赋值,所以其可以用于计算target调用帧的位置。

 @en Some targets have more complex requirements than storing to an
 @en address calculable during initial code generation.  In that case
 @en the @code{eh_return} instruction pattern should be used instead.
-一些target具有更加复杂的要求,比在初始化代码生成阶段存储到地址中。
-这种情况下,要替代的使用@code{eh_return}指令模式。
+一些target具有更加复杂的要求,比在初始化代码生成阶段存储到地址中。这种情况下,要替代的使用@code{eh_return}指令模式。

 @en If you want to support call frame exception handling, you must
 @en define either this macro or the @code{eh_return} instruction pattern.
@@ -4455,8 +4101,7 @@
 @en to add it to the exception handler address before it is searched in the
 @en exception handling tables, and to subtract it again from the address before
 @en using it to return to the exception handler.
-如果定义,则为一个整数值的C表达式,并会为此生成rtl来加上异常处理地址,
-在其在异常处理表中搜索之前,并且再减去它,在用它来返回到异常处理之前。
+如果定义,则为一个整数值的C表达式,并会为此生成rtl来加上异常处理地址,在其在异常处理表中搜索之前,并且再减去它,在用它来返回到异常处理之前。
 @end defmac

 @defmac ASM_PREFERRED_EH_DATA_FORMAT (@var{code}, @var{global})
@@ -4464,16 +4109,13 @@
 @en handling sections.  If at all possible, this should be defined such
 @en that the exception handling section will not require dynamic relocations,
 @en and so may be read-only.
-该宏选择在异常处理section中嵌入的指针的解码。如果尽可能,该宏应该被定义,
-这样异常处理section将不会要求进行动态重定位,并可以为只读的。
+该宏选择在异常处理section中嵌入的指针的解码。如果尽可能,该宏应该被定义,这样异常处理section将不会要求进行动态重定位,并可以为只读的。

 @en @var{code} is 0 for data, 1 for code labels, 2 for function pointers.
 @en @var{global} is true if the symbol may be affected by dynamic relocations.
 @en The macro should return a combination of the @code{DW_EH_PE_*} defines
 @en as found in @file{dwarf2.h}.
-@var{code}为0,对于数据,1对于代码标号,2对于函数指针。
-@var{global}为真,如果符号可以由动态重定位影响。
-宏应该返回在@file{dwarf2.h}中可以找到的@code{DW_EH_PE_*}的组合。
+@var{code}为0,对于数据,1对于代码标号,2对于函数指针。@var{global}为真,如果符号可以由动态重定位影响。宏应该返回在@file{dwarf2.h}中可以找到的@code{DW_EH_PE_*}的组合。

 @en If this macro is not defined, pointers will not be encoded but
 @en represented directly.
@@ -4485,24 +4127,19 @@
 @en to represent the encoding chosen by @code{ASM_PREFERRED_EH_DATA_FORMAT}.
 @en Generic code takes care of pc-relative and indirect encodings; this must
 @en be defined if the target uses text-relative or data-relative encodings.
-该宏允许target生成特定的magic,
-用于表示@code{ASM_PREFERRED_EH_DATA_FORMAT}选择的encoding。
-通常代码考虑pc-relative和indirect解码;
-如果target使用text-relative或者data-relative解码,则必须定义该宏。
+该宏允许target生成特定的magic,用于表示@code{ASM_PREFERRED_EH_DATA_FORMAT}选择的encoding。通常代码考虑pc-relative和indirect解码;如果target使用text-relative或者data-relative解码,则必须定义该宏。

 @en This is a C statement that branches to @var{done} if the format was
 @en handled.  @var{encoding} is the format chosen, @var{size} is the number
 @en of bytes that the format occupies, @var{addr} is the @code{SYMBOL_REF}
 @en to be emitted.
-这是一个C语句,如果格式被处理,则执行分支跳转。@var{encoding}为选择的格式,
-@var{size}为格式占用的字节数,@var{addr}为生成的@code{SYMBOL_REF}。
+这是一个C语句,如果格式被处理,则执行分支跳转。@var{encoding}为选择的格式,@var{size}为格式占用的字节数,@var{addr}为生成的@code{SYMBOL_REF}。
 @end defmac

 @defmac MD_UNWIND_SUPPORT
 @en A string specifying a file to be #include'd in unwind-dw2.c.  The file
 @en so included typically defines @code{MD_FALLBACK_FRAME_STATE_FOR}.
-一个字符串,指定了文件在unwind-dw2.c中被#include包含进来。
-被包含进来的文件通常定义了@code{MD_FALLBACK_FRAME_STATE_FOR}。
+一个字符串,指定了文件在unwind-dw2.c中被#include包含进来。被包含进来的文件通常定义了@code{MD_FALLBACK_FRAME_STATE_FOR}。
 @end defmac

 @defmac MD_FALLBACK_FRAME_STATE_FOR (@var{context}, @var{fs})
@@ -4510,8 +4147,7 @@
 @en code to the call-frame unwinder for use when there is no unwind data
 @en available.  The most common reason to implement this macro is to unwind
 @en through signal frames.
-该宏允许target增加CPU和操作系统特定代码到call-frame unwinder,
-用于当没有unwind数据可用时。最常见的原因是实现该宏来通过signal帧来unwind。
+该宏允许target增加CPU和操作系统特定代码到call-frame
unwinder,用于当没有unwind数据可用时。最常见的原因是实现该宏来通过signal帧来unwind。

 @en This macro is called from @code{uw_frame_state_for} in
 @en @file{unwind-dw2.c}, @file{unwind-dw2-xtensa.c} and
@@ -4522,25 +4158,18 @@
 @en save addresses should be updated in @var{fs} and the macro should
 @en evaluate to @code{_URC_NO_REASON}.  If the frame cannot be decoded,
 @en the macro should evaluate to @code{_URC_END_OF_STACK}.
-该宏由@file{unwind-dw2.c}, @file{unwind-dw2-xtensa.c}和@file{unwind-ia64.c}中的
-@code{uw_frame_state_for}调用。@var{context}为一个@code{_Unwind_Context};
-@var{fs}为一个@code{_Unwind_FrameState}。检查@code{context->ra}来得到被执行的
-代码的地址,检查@code{context->cfa}来得到栈指针的值。如果帧可以被解码,
-则寄存器保存地址应该在@var{fs}中更新,并且宏应该求值为@code{_URC_NO_REASON}。
-如果帧不能被解码,则宏应该求解为@code{_URC_END_OF_STACK}。
+该宏由@file{unwind-dw2.c},
@file{unwind-dw2-xtensa.c}和@file{unwind-ia64.c}中的@code{uw_frame_state_for}调用。@var{context}为一个@code{_Unwind_Context};@var{fs}为一个@code{_Unwind_FrameState}。检查@code{context->ra}来得到被执行的代码的地址,检查@code{context->cfa}来得到栈指针的值。如果帧可以被解码,则寄存器保存地址应该在@var{fs}中更新,并且宏应该求值为@code{_URC_NO_REASON}。如果帧不能被解码,则宏应该求解为@code{_URC_END_OF_STACK}。

 @en For proper signal handling in Java this macro is accompanied by
 @en @code{MAKE_THROW_FRAME}, defined in
@file{libjava/include/*-signal.h} headers.
-对于java中合适的信号处理,该宏通过@code{MAKE_THROW_FRAME}来应用,
-在@file{libjava/include/*-signal.h}中定义。
+对于java中合适的信号处理,该宏通过@code{MAKE_THROW_FRAME}来应用,在@file{libjava/include/*-signal.h}中定义。
 @end defmac

 @defmac MD_HANDLE_UNWABI (@var{context}, @var{fs})
 @en This macro allows the target to add operating system specific code to the
 @en call-frame unwinder to handle the IA-64 @code{.unwabi} unwinding directive,
 @en usually used for signal or interrupt frames.
-该宏允许target增加操作系统特定的代码到调用帧unwinder,
-来处理IA-64 @code{.unwabi} unwinding伪指令,通常用于signal或者interrrupt帧。
+该宏允许target增加操作系统特定的代码到调用帧unwinder,来处理IA-64 @code{.unwabi}
unwinding伪指令,通常用于signal或者interrrupt帧。

 @en This macro is called from @code{uw_update_context} in @file{unwind-ia64.c}.
 @en @var{context} is an @code{_Unwind_Context};
@@ -4548,18 +4177,14 @@
 @en for the abi and context in the @code{.unwabi} directive.  If the
 @en @code{.unwabi} directive can be handled, the register save addresses should
 @en be updated in @var{fs}.
-该宏由@file{unwind-ia64.c}中的@code{uw_update_context}调用。
-@var{context}为一个@code{_Unwind_Context};
-@var{fs}为一个@code{_Unwind_FrameState}。检查@code{fs->unwabi}来得到abi。
-如果@code{.unwabi}伪指令可以被处理,则寄存器保存地址应该在@var{fs}中更新。
+该宏由@file{unwind-ia64.c}中的@code{uw_update_context}调用。@var{context}为一个@code{_Unwind_Context};@var{fs}为一个@code{_Unwind_FrameState}。检查@code{fs->unwabi}来得到abi。如果@code{.unwabi}伪指令可以被处理,则寄存器保存地址应该在@var{fs}中更新。
 @end defmac

 @defmac TARGET_USES_WEAK_UNWIND_INFO
 @en A C expression that evaluates to true if the target requires unwind
 @en info to be given comdat linkage.  Define it to be @code{1} if comdat
 @en linkage is necessary.  The default is @code{0}.
-一个C表达式,计算为真,如果target需要unwind info给定comdat linkage。
-定义其为@code{1},如果comdat linkage有必要。缺省为@code{0}。
+一个C表达式,计算为真,如果target需要unwind info给定comdat
linkage。定义其为@code{1},如果comdat linkage有必要。缺省为@code{0}。
 @end defmac

 @en @node Stack Checking
@@ -4570,8 +4195,7 @@
 @en GCC will check that stack references are within the boundaries of the
 @en stack, if the option @option{-fstack-check} is specified, in one of
 @en three ways:
-GCC将检查栈引用是否位于栈的边界里,如果指定了@option{-fstack-check},
-使用三种方式的之一:
+GCC将检查栈引用是否位于栈的边界里,如果指定了@option{-fstack-check},使用三种方式的之一:

 @enumerate
 @item
@@ -4579,9 +4203,7 @@
 @en will assume that you have arranged for full stack checking to be done
 @en at appropriate places in the configuration files.  GCC will not do
 @en other special processing.
-如果@code{STACK_CHECK_BUILTIN}宏的值为非0,
-则GCC将假设你已经安排了在配置文件的合适的地方进行栈检查,例如,
-在TARGET_ASM_FUNCTION_PROLOGUE中。GCC将不再做其它特殊的处理。
+如果@code{STACK_CHECK_BUILTIN}宏的值为非0,则GCC将假设你已经安排了在配置文件的合适的地方进行栈检查,例如,在TARGET_ASM_FUNCTION_PROLOGUE中。GCC将不再做其它特殊的处理。

 @item
 If @code{STACK_CHECK_BUILTIN} is zero and the value of the
@@ -4595,8 +4217,7 @@
 @item
 @en If neither of the above are true, GCC will generate code to periodically
 @en ``probe'' the stack pointer using the values of the macros defined below.
-如果上面两种方式都不是,则GCC将生成代码来周期的“探测”栈指针,
-使用下面定义的宏的值。
+如果上面两种方式都不是,则GCC将生成代码来周期的“探测”栈指针,使用下面定义的宏的值。
 @end enumerate

 If neither STACK_CHECK_BUILTIN nor STACK_CHECK_STATIC_BUILTIN is defined,
@@ -4610,9 +4231,7 @@
 is required by the ABI of your machine or if you would like to do stack
 checking in some more efficient way than the generic approach.  The default
 value of this macro is zero.
-一个非0值,如果栈检查按照机器相关的方式通过配置文件来完成。
-你应该定义该宏,如果栈检查被你的机器的ABI要求,
-或者你想让栈检查使用比GCC可移植方式更有效的方法。该宏的缺省值为0。
+一个非0值,如果栈检查按照机器相关的方式通过配置文件来完成。你应该定义该宏,如果栈检查被你的机器的ABI要求,或者你想让栈检查使用比GCC可移植方式更有效的方法。该宏的缺省值为0。
 @end defmac

 @defmac STACK_CHECK_STATIC_BUILTIN
@@ -4658,10 +4277,7 @@
 @en checking will not be reliable and GCC will issue a warning.  The
 @en default is chosen so that GCC only generates one instruction on most
 @en systems.  You should normally not change the default value of this macro.
-一个栈帧的最大大小,以字节为单位。
-GCC将生成探测指令在非叶子函数来确保栈中至少这么多大小的字节是可用的。
-如果一个栈帧大于该大小,则栈检查将不可靠并且GCC将产生一个警告。缺省值被选择,
-使得GCC只生成一条指令,在大多数系统上。你通常不应该修改该宏的缺省值。
+一个栈帧的最大大小,以字节为单位。GCC将生成探测指令在非叶子函数来确保栈中至少这么多大小的字节是可用的。如果一个栈帧大于该大小,则栈检查将不可靠并且GCC将产生一个警告。缺省值被选择,使得GCC只生成一条指令,在大多数系统上。你通常不应该修改该宏的缺省值。
 @end defmac

 @defmac STACK_CHECK_FIXED_FRAME_SIZE
@@ -4670,9 +4286,7 @@
 @en space for any callee-saved registers, temporaries and user variables.
 @en You need only specify an upper bound for this amount and will normally
 @en use the default of four words.
-GCC使用该值来生成上面的警告消息。其表示函数使用的固定的帧数量,
-不包括用于任何被调用者保存的寄存器,临时变量和用户变量的空间。
-你只需要指定该数量的上界并且通常使用缺省值,4个字。
+GCC使用该值来生成上面的警告消息。其表示函数使用的固定的帧数量,不包括用于任何被调用者保存的寄存器,临时变量和用户变量的空间。你只需要指定该数量的上界并且通常使用缺省值,4个字。
 @end defmac

 @defmac STACK_CHECK_MAX_VAR_SIZE
@@ -4681,8 +4295,7 @@
 @en @option{-fstack-check}.
 @en GCC computed the default from the values of the above macros and you will
 @en normally not need to override that default.
-为当用户指定@option{-fstack-check}时,GCC将在栈帧的固定域放入的对象的最大大小,
-以字节为单位。GCC根据上面的宏来计算缺省值并且你通常不需要覆盖缺省值。
+为当用户指定@option{-fstack-check}时,GCC将在栈帧的固定域放入的对象的最大大小,以字节为单位。GCC根据上面的宏来计算缺省值并且你通常不需要覆盖缺省值。
 @end defmac

 @need 2000
@@ -4699,8 +4312,7 @@
 @en The register number of the stack pointer register, which must also be a
 @en fixed register according to @code{FIXED_REGISTERS}.  On most machines,
 @en the hardware determines which register this is.
-栈指针寄存器的寄存器编号,其还必须为一个@code{FIXED_REGISTERS}中的固定寄存器。
-在大多数机器上,硬件决定了这是哪个寄存器。
+栈指针寄存器的寄存器编号,其还必须为一个@code{FIXED_REGISTERS}中的固定寄存器。在大多数机器上,硬件决定了这是哪个寄存器。
 @end defmac

 @defmac FRAME_POINTER_REGNUM
@@ -4708,9 +4320,7 @@
 @en access automatic variables in the stack frame.  On some machines, the
 @en hardware determines which register this is.  On other machines, you can
 @en choose any register you wish for this purpose.
-帧指针寄存器的寄存器编号,其用于访问在栈帧中的自动变量。
-在一些机器上,硬件决定了这是哪个寄存器。
-在其它机器上,你可以选择任意寄存器来达到该目的。
+帧指针寄存器的寄存器编号,其用于访问在栈帧中的自动变量。在一些机器上,硬件决定了这是哪个寄存器。在其它机器上,你可以选择任意寄存器来达到该目的。
 @end defmac

 @defmac HARD_FRAME_POINTER_REGNUM
@@ -4722,11 +4332,7 @@
 @en be used internally until the offset is known, and define
 @en @code{HARD_FRAME_POINTER_REGNUM} to be the actual hard register number
 @en used for the frame pointer.
-在一些机器上,帧指针和自动变量的起始处之间的偏移量直到寄存器分配进行完之后才知道
-(例如,因为保存寄存器位于这两个位置之间)。这些机器上,
-定义@code{FRAME_POINTER_REGNUM}为一个特定的固定寄存器的编号,在内部使用,
-直到位移已知,并且定义@code{HARD_FRAME_POINTER_REGNUM}为实际的硬件寄存器,
-用于帧指针。
+在一些机器上,帧指针和自动变量的起始处之间的偏移量直到寄存器分配进行完之后才知道(例如,因为保存寄存器位于这两个位置之间)。这些机器上,定义@code{FRAME_POINTER_REGNUM}为一个特定的固定寄存器的编号,在内部使用,直到位移已知,并且定义@code{HARD_FRAME_POINTER_REGNUM}为实际的硬件寄存器,用于帧指针。

 @en You should define this macro only in the very rare circumstances when it
 @en is not possible to calculate the offset between the frame pointer and
@@ -4735,11 +4341,7 @@
 @en definition of @code{ELIMINABLE_REGS} how to eliminate
 @en @code{FRAME_POINTER_REGNUM} into either @code{HARD_FRAME_POINTER_REGNUM}
 @en or @code{STACK_POINTER_REGNUM}.
-你只需要在非常少见的情况下定义该宏,当不可能计算帧指针和自动变量的偏移时,
-并且直到寄存器分配完成。当该宏被定义,
-你必须还要在你的@code{ELIMINABLE_REGS}的定义中指示如果消除
-@code{FRAME_POINTER_REGNUM}为@code{HARD_FRAME_POINTER_REGNUM}或者
-@code{STACK_POINTER_REGNUM}。
+你只需要在非常少见的情况下定义该宏,当不可能计算帧指针和自动变量的偏移时,并且直到寄存器分配完成。当该宏被定义,你必须还要在你的@code{ELIMINABLE_REGS}的定义中指示如果消除@code{FRAME_POINTER_REGNUM}为@code{HARD_FRAME_POINTER_REGNUM}或者@code{STACK_POINTER_REGNUM}。

 @en Do not define this macro if it would be the same as
 @en @code{FRAME_POINTER_REGNUM}.
@@ -4755,11 +4357,7 @@
 @en pointer register, then you must mark it as a fixed register according to
 @en @code{FIXED_REGISTERS}, or arrange to be able to eliminate it
 @en (@pxref{Elimination}).
-arg指针寄存器的寄存器编号,其用于访问函数的参数列表。在大多数机器上,
-这与帧指针寄存器相同。在一些机器上,硬件决定了其为那个寄存器。在其它机器上,
-你可以选择任意的寄存器。如果这与帧指针寄存器不同,
-则你必须标记其为一个固定寄存器,
-根据@code{FIXED_REGISTERS}或者设法能够消除它(@pxref{Elimination})。
+arg指针寄存器的寄存器编号,其用于访问函数的参数列表。在大多数机器上,这与帧指针寄存器相同。在一些机器上,硬件决定了其为那个寄存器。在其它机器上,你可以选择任意的寄存器。如果这与帧指针寄存器不同,则你必须标记其为一个固定寄存器,根据@code{FIXED_REGISTERS}或者设法能够消除它(@pxref{Elimination})。
 @end defmac

 @defmac HARD_FRAME_POINTER_IS_FRAME_POINTER
@@ -4785,10 +4383,7 @@
 @en pointer or stack pointer or argument pointer.  This register can be defined
 @en to point to the return address on the stack, and then be converted by
 @en @code{ELIMINABLE_REGS} into either the frame pointer or stack pointer.
-返回地址指针寄存器的寄存器编号,其用于访问栈中当前函数的返回地址。
-在一些机器上,返回地址不在帧指针或栈指针或参数指针的固定偏移处。
-该寄存器被定义指向栈中的返回地址,
-并且然后通过@code{ELIMINABLE_REGS}转换为帧指针或者栈指针。
+返回地址指针寄存器的寄存器编号,其用于访问栈中当前函数的返回地址。在一些机器上,返回地址不在帧指针或栈指针或参数指针的固定偏移处。该寄存器被定义指向栈中的返回地址,并且然后通过@code{ELIMINABLE_REGS}转换为帧指针或者栈指针。

 @en Do not define this macro unless there is no other way to get the return
 @en address from the stack.
@@ -4803,10 +4398,7 @@
 @en number as seen by the calling function is @code{STATIC_CHAIN_REGNUM}.  If
 @en these registers are the same, @code{STATIC_CHAIN_INCOMING_REGNUM} need
 @en not be defined.
-用于传递函数static链指针的寄存器编号。如果寄存器窗口被使用,
-则寄存器编号由被调用函数所看到是@code{STATIC_CHAIN_INCOMING_REGNUM},
-而由调用者函数看到的是@code{STATIC_CHAIN_REGNUM}。如果这些寄存器是相同的,
-则不需要定义@code{STATIC_CHAIN_INCOMING_REGNUM}。
+用于传递函数static链指针的寄存器编号。如果寄存器窗口被使用,则寄存器编号由被调用函数所看到是@code{STATIC_CHAIN_INCOMING_REGNUM},而由调用者函数看到的是@code{STATIC_CHAIN_REGNUM}。如果这些寄存器是相同的,则不需要定义@code{STATIC_CHAIN_INCOMING_REGNUM}。

 @en The static chain register need not be a fixed register.
 静态链寄存器不需要为一个固定寄存器。
@@ -4843,8 +4435,7 @@
 @en This macro specifies the maximum number of hard registers that can be
 @en saved in a call frame.  This is used to size data structures used in
 @en DWARF2 exception handling.
-该宏指定了可以在一个调用帧中被保存的硬件寄存器的最大数。
-这用于DWARF2异常处理中的size数据结构体。
+该宏指定了可以在一个调用帧中被保存的硬件寄存器的最大数。这用于DWARF2异常处理中的size数据结构体。

 @en Prior to GCC 3.0, this macro was needed in order to establish a stable
 @en exception handling ABI in the face of adding new hard registers for ISA
@@ -4875,8 +4466,7 @@
 @en is different than the internal representation for unwind column.
 @en Given a dwarf register, this macro should return the internal unwind
 @en column number to use instead.
-定义该宏,如果target对于dwarf寄存器的表示与对于unwind column的内部表示不相同。
-给定一个dwarf寄存器,该宏应该返回替代使用的内部unwind column编号。
+定义该宏,如果target对于dwarf寄存器的表示与对于unwind
column的内部表示不相同。给定一个dwarf寄存器,该宏应该返回替代使用的内部unwind column编号。

 @en See the PowerPC's SPE target for an example.
 例子参见PowerPC's SPE target。
@@ -4888,9 +4478,7 @@
 @en debug info sections.  Given a GCC hard register number, this macro
 @en should return the .eh_frame register number.  The default is
 @en @code{DBX_REGISTER_NUMBER (@var{regno})}.
-定义该宏,如果target对于用在.eh_frame或者.debug_frame的dwarf寄存器的表示与用在
-其它调试信息section中的不同。给定一个GCC硬件寄存器编号,该宏应该返回.eh_frame
-寄存器编号。缺省为@code{DBX_REGISTER_NUMBER (@var{regno})}。
+定义该宏,如果target对于用在.eh_frame或者.debug_frame的dwarf寄存器的表示与用在其它调试信息section中的不同。给定一个GCC硬件寄存器编号,该宏应该返回.eh_frame寄存器编号。缺省为@code{DBX_REGISTER_NUMBER
(@var{regno})}。
 @end defmac

 @defmac DWARF2_FRAME_REG_OUT (@var{regno}, @var{for_eh})
@@ -4899,10 +4487,7 @@
 @en should be output in .debug_frame (@code{@var{for_eh}} is zero) and
 @en .eh_frame (@code{@var{for_eh}} is nonzero).  The default is to
 @en return @code{@var{regno}}.
-定义该宏来影射在调用帧信息中存放的寄存器编号,
-其为GCC使用@code{DWARF_FRAME_REGNUM}来搜集的应该放在.debug_frame
-(@code{@var{for_eh}}为0)和.eh_frame(@code{@var{for_eh}}为非0)中的寄存器。
-缺省为返回@code{@var{regno}}。
+定义该宏来影射在调用帧信息中存放的寄存器编号,其为GCC使用@code{DWARF_FRAME_REGNUM}来搜集的应该放在.debug_frame(@code{@var{for_eh}}为0)和.eh_frame(@code{@var{for_eh}}为非0)中的寄存器。缺省为返回@code{@var{regno}}。
 @end defmac

 @en @node Elimination
@@ -4946,18 +4531,13 @@
 @en the function prologue.  The value would be computed from information
 @en such as the result of @code{get_frame_size ()} and the tables of
 @en registers @code{regs_ever_live} and @code{call_used_regs}.
-一条C语句,用来紧接着函数序言之后,
-将帧指针和栈指针值的差存储在@var{depth-var}中。
-该值应该通过像@code{get_frame_size ()}这样的结果信息以及寄存器表
-@code{regs_ever_live}和@code{call_used_regs}中被计算。
+一条C语句,用来紧接着函数序言之后,将帧指针和栈指针值的差存储在@var{depth-var}中。该值应该通过像@code{get_frame_size
()}这样的结果信息以及寄存器表@code{regs_ever_live}和@code{call_used_regs}中被计算。

 @en If @code{ELIMINABLE_REGS} is defined, this macro will be not be used and
 @en need not be defined.  Otherwise, it must be defined even if
 @en @code{TARGET_FRAME_POINTER_REQUIRED} always returns true; in that
 @en case, you may set @var{depth-var} to anything.
-如果@code{ELIMINABLE_REGS}被定义,则该宏将不被使用并不需要被定义。
-否则,其必须被定义,即使@code{FRAME_POINTER_REQUIRED}被定义为总是为真;
-这这种情况下,你可以设置@var{depth-var}为任何值。
+如果@code{ELIMINABLE_REGS}被定义,则该宏将不被使用并不需要被定义。否则,其必须被定义,即使@code{FRAME_POINTER_REQUIRED}被定义为总是为真;这这种情况下,你可以设置@var{depth-var}为任何值。
 @end defmac

 @defmac ELIMINABLE_REGS
@@ -4965,8 +4545,7 @@
 @en eliminate unneeded registers that point into the stack frame.  If it is not
 @en defined, the only elimination attempted by the compiler is to replace
 @en references to the frame pointer with references to the stack pointer.
-如果被定义,则该宏指定了一个寄存器双对的表,用于消除不需要的指向栈帧的寄存器。
-如果没有被定义,则编译器唯一尝试去做的消除是将对帧指针的引用替换为对栈指针的引用。
+如果被定义,则该宏指定了一个寄存器双对的表,用于消除不需要的指向栈帧的寄存器。如果没有被定义,则编译器唯一尝试去做的消除是将对帧指针的引用替换为对栈指针的引用。

 @en The definition of this macro is a list of structure initializations, each
 @en of which specifies an original and replacement register.
@@ -4977,9 +4556,7 @@
 @en must be used for the argument pointer.  This register can be eliminated by
 @en replacing it with either the frame pointer or the argument pointer,
 @en depending on whether or not the frame pointer has been eliminated.
-在一些机器上,参数指针的位置直到编译结束时才知道。这种情况下,
-一个单独的硬件寄存器必须用于参数指针。
-该寄存器可以通过替换为帧指针或者参数指针来消除,这取决于帧指针是否已经被消除。
+在一些机器上,参数指针的位置直到编译结束时才知道。这种情况下,一个单独的硬件寄存器必须用于参数指针。该寄存器可以通过替换为帧指针或者参数指针来消除,这取决于帧指针是否已经被消除。

 @en In this case, you might specify:
 这种情况下,你可能会指定:
@@ -5012,9 +4589,7 @@
 @en specifies the initial difference between the specified pair of
 @en registers.  This macro must be defined if @code{ELIMINABLE_REGS} is
 @en defined.
-该宏类似于@code{INITIAL_FRAME_POINTER_OFFSET}。
-其指定了被指定的寄存器双对的初始差。该宏必须被定义,
-如果@code{ELIMINABLE_REGS}被定义。
+该宏类似于@code{INITIAL_FRAME_POINTER_OFFSET}。其指定了被指定的寄存器双对的初始差。该宏必须被定义,如果@code{ELIMINABLE_REGS}被定义。
 @end defmac

 @en @node Stack Arguments
@@ -5027,8 +4602,7 @@
 @en The macros in this section control how arguments are passed
 @en on the stack.  See the following section for other macros that
 @en control passing certain arguments in registers.
-该节的宏控制如何在栈上传递参数。关于控制在寄存器中传递特定参数的其它宏,
-参见后续的章节。
+该节的宏控制如何在栈上传递参数。关于控制在寄存器中传递特定参数的其它宏,参见后续的章节。

 @deftypefn {Target Hook} bool TARGET_PROMOTE_PROTOTYPES (const_tree
@var{fntype})
 @en This target hook returns @code{true} if an argument declared in a
@@ -5036,10 +4610,7 @@
 @en passed as an @code{int}.  In addition to avoiding errors in certain
 @en cases of mismatch, it also makes for better code on certain machines.
 @en The default is to not promote prototypes.
-该target钩子返回@code{true},如果在函数原型中声明的一个参数,
-为整型的并且比@code{int}小,应该作为@code{int}来传递。
-除了能够避免一些不匹配的错误以外,其还能在特定机器上生成更好的代码。
-缺省为不提升原型。
+该target钩子返回@code{true},如果在函数原型中声明的一个参数,为整型的并且比@code{int}小,应该作为@code{int}来传递。除了能够避免一些不匹配的错误以外,其还能在特定机器上生成更好的代码。缺省为不提升原型。
 @end deftypefn

 @defmac PUSH_ARGS
@@ -5049,9 +4620,7 @@
 @en That directs GCC to use an alternate strategy: to
 @en allocate the entire argument block and then store the arguments into
 @en it.  When @code{PUSH_ARGS} is nonzero, @code{PUSH_ROUNDING} must
be defined too.
-一个C表达式。如果非0,则将使用push insn来传递输出参数。
-如果target机器不具有push指令,则设置其为0。这将指示GCC使用替代的策略:
-分配整个参数块然后将参数存进去。当@code{PUSH_ARGS}为非0时,
+一个C表达式。如果非0,则将使用push
insn来传递输出参数。如果target机器不具有push指令,则设置其为0。这将指示GCC使用替代的策略:分配整个参数块然后将参数存进去。当@code{PUSH_ARGS}为非0时,
 @code{PUSH_ROUNDING}也必须被定义。
 @end defmac

@@ -5060,9 +4629,7 @@
 @en last to first, rather than from first to last.  If this macro is not
 @en defined, it defaults to @code{PUSH_ARGS} on targets where the stack
 @en and args grow in opposite directions, and 0 otherwise.
-一个C表达式。如果非0,则函数参数将按照从最后一个到第一个的顺序来求值,
-而不是从第一个到最后一个。如果该宏没被定义,其缺省为@code{PUSH_ARGS},
-在栈和args按照相反的顺序进行增长的target上,否则为0。
+一个C表达式。如果非0,则函数参数将按照从最后一个到第一个的顺序来求值,而不是从第一个到最后一个。如果该宏没被定义,其缺省为@code{PUSH_ARGS},在栈和args按照相反的顺序进行增长的target上,否则为0。
 @end defmac

 @defmac PUSH_ROUNDING (@var{npushed})
@@ -5081,8 +4648,7 @@
 @en will suffice.  But on other machines, instructions that appear
 @en to push one byte actually push two bytes in an attempt to maintain
 @en alignment.  Then the definition should be
-便可以满足。但是在其它机器上,指令压入一个字节时,
-而为了保持对齐实际压入了两个字节。则定义应该为
+便可以满足。但是在其它机器上,指令压入一个字节时,而为了保持对齐实际压入了两个字节。则定义应该为

 @smallexample
 #define PUSH_ROUNDING(BYTES) (((BYTES) + 1) & ~1)
@@ -5098,9 +4664,7 @@
 @en @code{current_function_outgoing_args_size}.  No space will be pushed
 @en onto the stack for each call; instead, the function prologue should
 @en increase the stack frame size by this amount.
-一个C表达式。如果非0,则为输出参数中将被计算并放进变量
-@code{current_function_outgoing_args_size}所需要的空间最大数目。
-对于每个调用,将不会有空间被压入栈中;替代的,函数序言应该增加栈帧的大小。
+一个C表达式。如果非0,则为输出参数中将被计算并放进变量@code{current_function_outgoing_args_size}所需要的空间最大数目。对于每个调用,将不会有空间被压入栈中;替代的,函数序言应该增加栈帧的大小。

 @en Setting both @code{PUSH_ARGS} and @code{ACCUMULATE_OUTGOING_ARGS}
 @en is not proper.
@@ -5111,22 +4675,19 @@
 @en Define this macro if functions should assume that stack space has been
 @en allocated for arguments even when their values are passed in
 @en registers.
-定义该宏,如果函数应该假设参数的栈空间已经被分配,
-即使它们的值是在寄存器中被传递的。
+定义该宏,如果函数应该假设参数的栈空间已经被分配,即使它们的值是在寄存器中被传递的。

 @en The value of this macro is the size, in bytes, of the area reserved for
 @en arguments passed in registers for the function represented by @var{fndecl},
 @en which can be zero if GCC is calling a library function.
 @en The argument @var{fndecl} can be the FUNCTION_DECL, or the type itself
 @en of the function.
-该宏的值是一个@var{fndecl}表示的函数在寄存器中传递的参数的保留空间的大小,
-字节为单位,其可以为0如果GCC在调用一个库函数。
+该宏的值是一个@var{fndecl}表示的函数在寄存器中传递的参数的保留空间的大小,字节为单位,其可以为0如果GCC在调用一个库函数。

 @en This space can be allocated by the caller, or be a part of the
 @en machine-dependent stack frame: @code{OUTGOING_REG_PARM_STACK_SPACE} says
 @en which.
-该空间可以被调用者分配,或者为机器相关的栈帧的一部分:
-这由@code{OUTGOING_REG_PARM_STACK_SPACE}决定。
+该空间可以被调用者分配,或者为机器相关的栈帧的一部分:这由@code{OUTGOING_REG_PARM_STACK_SPACE}决定。
 @end defmac
 @c above is overfull.  not sure what to do.  --mew 5feb93  did
 @c something, not sure if it looks good.  --mew 10feb93
@@ -5150,16 +4711,13 @@
 @en stack parameters don't skip the area specified by it.
 @c i changed this, makes more sens and it should have taken care of the
 @c overfull.. not as specific, tho.  --mew 5feb93
-定义该宏,如果@code{REG_PARM_STACK_SPACE}被定义,
-但是栈参数不跳过其所指定的区域。
+定义该宏,如果@code{REG_PARM_STACK_SPACE}被定义,但是栈参数不跳过其所指定的区域。

 @en Normally, when a parameter is not passed in registers, it is placed on the
 @en stack beyond the @code{REG_PARM_STACK_SPACE} area.  Defining this macro
 @en suppresses this behavior and causes the parameter to be passed on the
 @en stack in its natural location.
-通常,当一个参数没有在寄存器中传递时,
-其被放在@code{REG_PARM_STACK_SPACE}区域之外的栈上。
-定义该宏来抑制这种行为并使得在栈上传递的参数按照它的自然位置。
+通常,当一个参数没有在寄存器中传递时,其被放在@code{REG_PARM_STACK_SPACE}区域之外的栈上。定义该宏来抑制这种行为并使得在栈上传递的参数按照它的自然位置。
 @end defmac

 @deftypefn {Target Hook} int TARGET_RETURN_POPS_ARGS (tree
@var{fundecl}, tree @var{funtype}, int @var{size})
@@ -5204,8 +4762,7 @@
 @en A C expression that should indicate the number of bytes a call sequence
 @en pops off the stack.  It is added to the value of @code{RETURN_POPS_ARGS}
 @en when compiling a function call.
-一个C表达式,指示一个调用序列从栈中弹出的字节数目。
-其被加到@code{RETURN_POPS_ARGS}的值中,当编译一个函数调用时。
+一个C表达式,指示一个调用序列从栈中弹出的字节数目。其被加到@code{RETURN_POPS_ARGS}的值中,当编译一个函数调用时。

 @en @var{cum} is the variable in which all arguments to the called function
 @en have been accumulated.
@@ -5216,9 +4773,7 @@
 @en that have been passed to the function.  Since this is a property of the
 @en call site, not of the called function, @code{RETURN_POPS_ARGS} is not
 @en appropriate.
-在特定的体系结构上,例如SH5,一个调用蹦床被用于弹出栈上特定的寄存器,
-根据被传递给函数的参数。因为这是调用方的属性,而不是被调用函数的,
-所以@code{RETURN_POPS_ARGS}不太适合。
+在特定的体系结构上,例如SH5,一个调用蹦床被用于弹出栈上特定的寄存器,根据被传递给函数的参数。因为这是调用方的属性,而不是被调用函数的,所以@code{RETURN_POPS_ARGS}不太适合。
 @end defmac

 @en @node Register Arguments
@@ -5231,8 +4786,7 @@
 @en This section describes the macros which let you control how various
 @en types of arguments are passed in registers or how they are arranged in
 @en the stack.
-这节描述了让你控制不同类型的参数如何在寄存器中传递,
-或者它们如何被安排在栈中的宏。
+这节描述了让你控制不同类型的参数如何在寄存器中传递,或者它们如何被安排在栈中的宏。

 @defmac FUNCTION_ARG (@var{cum}, @var{mode}, @var{type}, @var{named})
 ― Macro: FUNCTION_ARG (cum, mode, type, named)
@@ -5248,17 +4802,12 @@
 @en correspond to @samp{@dots{}} in the called function's prototype.
 @en @var{type} can be an incomplete type if a syntax error has previously
 @en occurred.
-参数为@var{cum},其总结了所有之前的参数;@var{mode},参数的机器模式;
-@var{type},参数的数据类型,作为一个树节点或者0如果不知道(这发生于C支持库的
-函数);@var{named},其为1对于普通参数,0对于无名参数,
-对应于在被调用函数原型中的@samp{@dots{}}。@var{type}可以为一个不完全类型,
-如果之前产生了语法错误。
+参数为@var{cum},其总结了所有之前的参数;@var{mode},参数的机器模式;@var{type},参数的数据类型,作为一个树节点或者0如果不知道(这发生于C支持库的函数);@var{named},其为1对于普通参数,0对于无名参数,对应于在被调用函数原型中的@samp{@dots{}}。@var{type}可以为一个不完全类型,如果之前产生了语法错误。

 @en The value of the expression is usually either a @code{reg} RTX for the
 @en hard register in which to pass the argument, or zero to pass the
 @en argument on the stack.
-表达式的值通常为一个在其中传递参数的硬件寄存器的@code{reg} RTX,或者0,
-在栈上传递参数。
+表达式的值通常为一个在其中传递参数的硬件寄存器的@code{reg} RTX,或者0,在栈上传递参数。

 @en For machines like the VAX and 68000, where normally all arguments are
 @en pushed, zero suffices as a definition.
@@ -5277,29 +4826,20 @@
 @en As a special exception the first @code{expr_list} in the @code{parallel}
 @en RTX may have a first operand of zero.  This indicates that the entire
 @en argument is also stored on the stack.
-表达式的值也可以为一个@code{parallel} RTX。这用于当参数在多个位置传递的时候。
-@code{parallel}的机器模式应该为整个参数的机器模式。
-@code{parallel}保存了任意数目的@code{expr_list}对;
-每一个描述了该部分参数在哪里传递,
-@code{reg} RTX的机器模式指示了该部分的参数有多大。
-@code{expr_list}的第二个操作数为一个const_int,
-其给出了该部分起始处与整个参数的偏移字节数。作为一个特例,
-@code{parallel} RTX中的第一个@code{expr_list}的第一个操作数可以为0。
+表达式的值也可以为一个@code{parallel}
RTX。这用于当参数在多个位置传递的时候。@code{parallel}的机器模式应该为整个参数的机器模式。@code{parallel}保存了任意数目的@code{expr_list}对;每一个描述了该部分参数在哪里传递,@code{reg}
RTX的机器模式指示了该部分的参数有多大。@code{expr_list}的第二个操作数为一个const_int,其给出了该部分起始处与整个参数的偏移字节数。作为一个特例,@code{parallel}
RTX中的第一个@code{expr_list}的第一个操作数可以为0。
 这意味着整个参数也在栈中存储。

 @en The last time this macro is called, it is called with @code{MODE ==
 @en VOIDmode}, and its result is passed to the @code{call} or @code{call_value}
 @en pattern as operands 2 and 3 respectively.
-该宏最后一次被调用的时候,@code{MODE == VOIDmode},
-并且结果被传递给@code{call}或者@code{call_value}指令模式,分别作为其操作数2和3。
+该宏最后一次被调用的时候,@code{MODE ==
VOIDmode},并且结果被传递给@code{call}或者@code{call_value}指令模式,分别作为其操作数2和3。

 @cindex @file{stdarg.h} and register arguments
 @en The usual way to make the ISO library @file{stdarg.h} work on a machine
 @en where some arguments are usually passed in registers, is to cause
 @en nameless arguments to be passed on the stack instead.  This is done
 @en by making @code{FUNCTION_ARG} return 0 whenever @var{named} is 0.
-通常使ISO库@file{stdarg.h}在一些参数在寄存器中传递的机器上工作的方法,
-是使无名参数在栈上传递。这通过使@code{FUNCTION_ARG}当@var{named}为0时返回0来实现。
+通常使ISO库@file{stdarg.h}在一些参数在寄存器中传递的机器上工作的方法,是使无名参数在栈上传递。这通过使@code{FUNCTION_ARG}当@var{named}为0时返回0来实现。

 @en @cindex @code{TARGET_MUST_PASS_IN_STACK}, and @code{FUNCTION_ARG}
 @en @cindex @code{REG_PARM_STACK_SPACE}, and @code{FUNCTION_ARG}
@@ -5310,10 +4850,7 @@
 @en argument, the compiler will abort.  If @code{REG_PARM_STACK_SPACE} is
 @en defined, the argument will be computed in the stack and then loaded into
 @en a register.
-你可以在该宏的定义中,使用钩子@code{targetm.calls.must_pass_in_stack}来确定该
-参数是否为一个必须在栈中传递的类型。如果@code{REG_PARM_STACK_SPACE}没有定义并且
-@code{FUNCTION_ARG}对于这样的参数返回非0,则编译器会abort。
-如果@code{REG_PARM_STACK_SPACE}被定义,则参数会在栈中计算并且然后加载到寄存器中。
+你可以在该宏的定义中,使用钩子@code{targetm.calls.must_pass_in_stack}来确定该参数是否为一个必须在栈中传递的类型。如果@code{REG_PARM_STACK_SPACE}没有定义并且@code{FUNCTION_ARG}对于这样的参数返回非0,则编译器会abort。如果@code{REG_PARM_STACK_SPACE}被定义,则参数会在栈中计算并且然后加载到寄存器中。
 @end defmac

 @deftypefn {Target Hook} bool TARGET_MUST_PASS_IN_STACK (enum
machine_mode @var{mode}, const_tree @var{type})
@@ -5321,8 +4858,7 @@
 @en solely in registers.  The file @file{expr.h} defines a
 @en definition that is usually appropriate, refer to @file{expr.h}
for additional
 @en documentation.
-该target钩子应该返回@code{true},如果我们不应该只在寄存器中传递@var{type}。
-文件@file{expr.h}中有一个定义,其通常是合适的,更多的文档请参考@file{expr.h}。
+该target钩子应该返回@code{true},如果我们不应该只在寄存器中传递@var{type}。文件@file{expr.h}中有一个定义,其通常是合适的,更多的文档请参考@file{expr.h}。
 @end deftypefn

 @defmac FUNCTION_INCOMING_ARG (@var{cum}, @var{mode}, @var{type}, @var{named})
@@ -5330,16 +4866,13 @@
 @en that the register in which a function sees an arguments is not
 @en necessarily the same as the one in which the caller passed the
 @en argument.
-定义该宏,如果target机器具有“寄存器窗口”,
-这样函数看到的参数寄存器没有必要与调用者传递参数的寄存器相同。
+定义该宏,如果target机器具有“寄存器窗口”,这样函数看到的参数寄存器没有必要与调用者传递参数的寄存器相同。

 @en For such machines, @code{FUNCTION_ARG} computes the register in which
 @en the caller passes the value, and @code{FUNCTION_INCOMING_ARG} should
 @en be defined in a similar fashion to tell the function being called
 @en where the arguments will arrive.
-对于这样的机器,@code{FUNCTION_ARG}计算调用者传递值的寄存器,
-@code{FUNCTION_INCOMING_ARG}应该按照类似的方式定义,
-来告诉被调用的函数参数在哪里到来。
+对于这样的机器,@code{FUNCTION_ARG}计算调用者传递值的寄存器,@code{FUNCTION_INCOMING_ARG}应该按照类似的方式定义,来告诉被调用的函数参数在哪里到来。

 @en If @code{FUNCTION_INCOMING_ARG} is not defined, @code{FUNCTION_ARG}
 @en serves both purposes.
@@ -5351,8 +4884,7 @@
 @en argument that must be put in registers.  The value must be zero for
 @en arguments that are passed entirely in registers or that are entirely
 @en pushed on the stack.
-该target钩子返回在参数的起始处必须被放入寄存器的字节数。
-值必须为0对于参数全部放在寄存器中或者全部压入栈中。
+该target钩子返回在参数的起始处必须被放入寄存器的字节数。值必须为0对于参数全部放在寄存器中或者全部压入栈中。

 @en On some machines, certain arguments must be passed partially in
 @en registers and partially in memory.  On these machines, typically the
@@ -5361,17 +4893,12 @@
 @en structure) crosses that boundary, its first few words must be passed
 @en in registers and the rest must be pushed.  This macro tells the
 @en compiler when this occurs, and how many bytes should go in registers.
-一些机器上,特定的参数必须部分在寄存器中传递并且部分在内存中传递。
-在这些机器上,通常参数的起始一些字在寄存器中传递,其余的在栈上。
-如果一个多字的参数(@code{double}或者结构体)跨越了边界,
-则其起始的一些字必须在寄存器中传递并且剩余的被压栈。
-该宏告诉编译器这种情况什么时候发生,以及多少字节应该在寄存器中。
+一些机器上,特定的参数必须部分在寄存器中传递并且部分在内存中传递。在这些机器上,通常参数的起始一些字在寄存器中传递,其余的在栈上。如果一个多字的参数(@code{double}或者结构体)跨越了边界,则其起始的一些字必须在寄存器中传递并且剩余的被压栈。该宏告诉编译器这种情况什么时候发生,以及多少字节应该在寄存器中。

 @en @code{FUNCTION_ARG} for these arguments should return the first
 @en register to be used by the caller for this argument; likewise
 @en @code{FUNCTION_INCOMING_ARG}, for the called function.
-@code{FUNCTION_ARG}对于这些参数应该返回第一个寄存器,被调用者用于该参数;
-通常@code{FUNCTION_INCOMING_ARG}用于被调用的函数。
+@code{FUNCTION_ARG}对于这些参数应该返回第一个寄存器,被调用者用于该参数;通常@code{FUNCTION_INCOMING_ARG}用于被调用的函数。
 @end deftypefn

 @deftypefn {Target Hook} bool TARGET_PASS_BY_REFERENCE
(CUMULATIVE_ARGS *@var{cum}, enum machine_mode @var{mode}, const_tree
@var{type}, bool @var{named})
@@ -5379,15 +4906,13 @@
 @en position indicated by @var{cum} should be passed by reference.  This
 @en predicate is queried after target independent reasons for being
 @en passed by reference, such as @code{TREE_ADDRESSABLE (type)}.
-该target钩子应该返回@code{true},
-如果@var{cum}所指示的位置的参数应该按照引用的方式来传递。
+该target钩子应该返回@code{true},如果@var{cum}所指示的位置的参数应该按照引用的方式来传递。

 @en If the hook returns true, a copy of that argument is made in memory and a
 @en pointer to the argument is passed instead of the argument itself.
 @en The pointer is passed in whatever way is appropriate for passing a pointer
 @en to that type.
-如果钩子返回真,则参数的副本在内存中产生并且指向参数的指针被替代参数本身来传递。
-指针按照传递该类型的指针的方式来传递。
+如果钩子返回真,则参数的副本在内存中产生并且指向参数的指针被替代参数本身来传递。指针按照传递该类型的指针的方式来传递。
 @end deftypefn

 @deftypefn {Target Hook} bool TARGET_CALLEE_COPIES (CUMULATIVE_ARGS
*@var{cum}, enum machine_mode @var{mode}, const_tree @var{type}, bool
@var{named})
@@ -5395,8 +4920,7 @@
 @en known to be passed by reference.  The hook should return true if the
 @en function argument should be copied by the callee instead of copied
 @en by the caller.
-由该钩子的参数所描述的函数的参数已知为通过引用来传递的。钩子应该返回真,
-如果函数参数应该由被调用者复制,而不是调用者。
+由该钩子的参数所描述的函数的参数已知为通过引用来传递的。钩子应该返回真,如果函数参数应该由被调用者复制,而不是调用者。

 @en For any argument for which the hook returns true, if it can be
 @en determined that the argument is not modified, then a copy need
@@ -5412,9 +4936,7 @@
 @en @code{FUNCTION_ARG} and other related values.  For some target machines,
 @en the type @code{int} suffices and can hold the number of bytes of
 @en argument so far.
-一个C类型,用来声明一个变量,
-被用作@code{FUNCTION_ARG}的第一个参数以及其它相关的值。对于一些target机器,
-类型@code{int}可以满足并且目前可以保持参数的字节数。
+一个C类型,用来声明一个变量,被用作@code{FUNCTION_ARG}的第一个参数以及其它相关的值。对于一些target机器,类型@code{int}可以满足并且目前可以保持参数的字节数。

 @en There is no need to record in @code{CUMULATIVE_ARGS} anything about the
 @en arguments that have been passed on the stack.  The compiler has other
@@ -9135,16 +8657,14 @@
 @en If defined, a C expression whose value is a string, including spacing,
 @en containing the assembler operation to identify the following data as
 @en initialized, writable small data.
-如果定义,则为一个C表达式,值为一个字符串,包括空格,
-其包含了标识后续的数据为初始化的,可写的小数据的汇编操作。
+如果定义,则为一个C表达式,值为一个字符串,包括空格,其包含了标识后续的数据为初始化的,可写的小数据的汇编操作。
 @end defmac

 @defmac READONLY_DATA_SECTION_ASM_OP
 @en A C expression whose value is a string, including spacing, containing the
 @en assembler operation to identify the following data as read-only initialized
 @en data.
-一个C表达式,值为一个字符串,包括空格,
-其包含了标识后续的数据为只读的初始化数据的汇编操作。
+一个C表达式,值为一个字符串,包括空格,其包含了标识后续的数据为只读的初始化数据的汇编操作。
 @end defmac

 @defmac BSS_SECTION_ASM_OP
@@ -9158,22 +8678,21 @@
 如果定义,则为一个C表达式,值为一个字符串,包括空格,
 其包含了标识后续的数据为未初始化的,global数据的汇编操作。如果没有定义,
 并且@code{ASM_OUTPUT_BSS}和@code{ASM_OUTPUT_ALIGNED_BSS}也都没有定义,
-则为初始化的global数据将被输出在data section,如果使用了@option{-fno-common},
-否则将使用@code{ASM_OUTPUT_COMMON}。
+则为初始化的global数据将被输出在data
section,如果使用了@option{-fno-common},否则将使用@code{ASM_OUTPUT_COMMON}。
 @end defmac

 @defmac SBSS_SECTION_ASM_OP
 @en If defined, a C expression whose value is a string, including spacing,
 @en containing the assembler operation to identify the following data as
 @en uninitialized, writable small data.
-如果定义,则为一个C表达式,值为一个字符串,包括空格,
-其包含了标识后续的数据为未初始化的,可写的小数据的汇编操作。
+如果定义,则为一个C表达式,值为一个字符串,包括空格,其包含了标识后续的数据为未初始化的,可写的小数据的汇编操作。
 @end defmac

 @defmac TLS_COMMON_ASM_OP
-If defined, a C expression whose value is a string containing the
-assembler operation to identify the following data as thread-local
-common data.  The default is @code{".tls_common"}.
+@en If defined, a C expression whose value is a string containing the
+@en assembler operation to identify the following data as thread-local
+@en common data.  The default is @code{".tls_common"}.
+如果定义,则为一个C表达式,值为一个字符串,包含用来验证接下来的数据是线形局部共有的汇编操作。缺省值是 @code{".tls_common"}。
 @end defmac

 @defmac TLS_SECTION_ASM_FLAG
Index: gnu.texi
===================================================================
--- gnu.texi    (revision 368)
+++ gnu.texi    (revision 374)
@@ -5,15 +5,17 @@
 @node GNU Project
 @unnumbered The GNU Project and GNU/Linux

-The GNU Project was launched in 1984 to develop a complete Unix-like
-operating system which is free software: the GNU system.  (GNU is a
-recursive acronym for ``GNU's Not Unix''; it is pronounced
-``guh-NEW''@.)  Variants of the GNU operating system, which use the
-kernel Linux, are now widely used; though these systems are often
-referred to as ``Linux'', they are more accurately called GNU/Linux
-systems.
+@en The GNU Project was launched in 1984 to develop a complete Unix-like
+@en operating system which is free software: the GNU system.  (GNU is a
+@en recursive acronym for ``GNU's Not Unix''; it is pronounced
+@en ``guh-NEW''@.)  Variants of the GNU operating system, which use the
+@en kernel Linux, are now widely used; though these systems are often
+@en referred to as ``Linux'', they are more accurately called GNU/Linux
+@en systems.
+GNU 项目开始于 1984 年,以开发一个完整的类 Unix 操作系统自由软件,这个系统则是 GNU 系统。( GNU 是
``GNU's Not Unix'' 的递归缩写;它的发音是 ``ugh-NEW''@)。很多 GNU 操作系统的变体都使用 linux
内核,并正被广泛地使用着。虽然这些系统通常被称为 ``Linux'' ,但更准确地说它们应该叫 GNU/Linux 系统。

-For more information, see:
+@en For more information, see:
+更多详细信息见:
 @smallexample
 @uref{http://www.gnu.org/}
 @uref{http://www.gnu.org/gnu/linux-and-gnu.html}

Other related posts: