首先感谢 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> He that is giddy thinks the world turns round. -- William Shakespeare, "The Taming of the Shrew" 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}æ¥è¿žæŽ¥çš„时候, -将使用–as-neededå’Œé™æ€å¼‚常处ç†åº“所在ä½ç½®çš„共享libgcc。 +一个å®ï¼Œç”¨äºŽæŽ§åˆ¶åœ¨@code{REAL_LIBGCC_SPEC}ä¸æ到的对@code{LIBGCC_SPEC}的修改。如果éž0,则会生æˆä¸€ä¸ªspec,当ä¸ä½¿ç”¨ä»»ä½•@code{-static}, @code{-static-libgcc}或@code{-shared-libgcc}æ¥è¿žæŽ¥çš„时候,将使用–as-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}