ld: improve linker script section

The example version script in the manual currently suggests:
	extern "C++" { "int f(int, double)"; }

But a C++ function like that doesn't encode the return type into the
mangled  name, so when the linker demangles things, it ends up with
"f(int, double)"  and so it never matches.

The example also lacks a trailing semicolon after the brace, so the
linker always complains about a syntax error in the file.

While the language section documents the possibilities, it isn't clear
as to which is the default language.  So explicitly state that the C
language is the default.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
This commit is contained in:
Mike Frysinger 2010-07-20 19:25:42 +00:00
parent c6f46ca0a4
commit bb1515f254
2 changed files with 9 additions and 3 deletions

View File

@ -1,3 +1,8 @@
2010-07-20 Mike Frysinger <vapier@gentoo.org>
* ld.texinfo (VERSION): Remove "int" from example script and add ";".
Declare the default language as C.
2010-07-17 Alan Modra <amodra@gmail.com>
* ldlang.c (lang_check_section_addresses): Catch overlap for

View File

@ -4910,8 +4910,8 @@ VERS_2.0 @{
bar1; bar2;
extern "C++" @{
ns::*;
"int f(int, double)";
@}
"f(int, double)";
@};
@} VERS_1.2;
@end smallexample
@ -5036,7 +5036,8 @@ VERSION extern "lang" @{ version-script-commands @}
The supported @samp{lang}s are @samp{C}, @samp{C++}, and @samp{Java}.
The linker will iterate over the list of symbols at the link time and
demangle them according to @samp{lang} before matching them to the
patterns specified in @samp{version-script-commands}.
patterns specified in @samp{version-script-commands}. The default
@samp{lang} is @samp{C}.
Demangled names may contains spaces and other special characters. As
described above, you can use a glob pattern to match demangled names,