From mboxrd@z Thu Jan 1 00:00:00 1970 From: John Reiser To: binutils@sourceware.cygnus.com Cc: Alan Modra Subject: Re: optionally postpone assignment of Common Date: Tue, 25 Sep 2001 21:13:00 -0000 Message-id: <3BB1564A.690B67F@BitWagon.com> References: <3B98EE77.3022801D@BitWagon.com> <3BB0D3AC.16552408@BitWagon.com> <20010926114341.Q3143@bubble.sa.bigpond.net.au> X-SW-Source: 2001-09/msg00459.html Hi Alan and binutils, Using --no-define-common can save space, and can help prevent selecting an impostor when many dynamic modules have special search rules for symbol resolution. Index: ld.texinfo =================================================================== RCS file: /cvs/src/src/ld/ld.texinfo,v retrieving revision 1.51 diff -u -r1.51 ld.texinfo --- ld.texinfo 2001/09/24 18:35:08 1.51 +++ ld.texinfo 2001/09/26 03:59:04 @@ -950,6 +950,24 @@ symbol is defined, the first file listed is the location of the definition. The remaining files contain references to the symbol. +@cindex common allocation +@kindex --no-define-common +@item --no-define-common +This option inhibits the assignment of addresses to common symbols. +The script command @code{INHIBIT_COMMON_ALLOCATION} has the same effect. +@xref{Miscellaneous Commands}. + +The @samp{--no-define-common} option allows decoupling +the decision to assign addresses to Common symbols from the choice +of the output file type; otherwise a non-Relocatable output type +forces assigning addresses to Common symbols. +Using @samp{--no-define-common} allows Common symbols that are referenced +from a shared library to be assigned addresses only in the main program. +This eliminates the unused duplicate space in the shared library, +and also prevents any possible confusion over resolving to the wrong +duplicate when there are many dynamic modules with specialized search +paths for runtime symbol resolution. + @cindex symbols, from command line @kindex --defsym @var{symbol}=@var{exp} @item --defsym @var{symbol}=@var{expression} @@ -2310,6 +2328,13 @@ This command has the same effect as the @samp{-d} command-line option: to make @code{ld} assign space to common symbols even if a relocatable output file is specified (@samp{-r}). + +@item INHIBIT_COMMON_ALLOCATION +@kindex INHIBIT_COMMON_ALLOCATION +@cindex common allocation in linker script +This command has the same effect as the @samp{--no-define-common} +command-line option: to make @code{ld} omit the assignment of addresses +to common symbols even for a non-relocatable output file. @item NOCROSSREFS(@var{section} @var{section} @dots{}) @kindex NOCROSSREFS(@var{sections}) -- John Reiser, jreiser@BitWagon.com