Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
R
riscv-gcc-1
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lvzhengyang
riscv-gcc-1
Commits
7a81cf7f
Commit
7a81cf7f
authored
May 21, 2001
by
Jason Merrill
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add vague linkage node
From-SVN: r42389
parent
1a6025b4
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
78 additions
and
17 deletions
+78
-17
gcc/extend.texi
+78
-17
No files found.
gcc/extend.texi
View file @
7a81cf7f
...
...
@@ -3876,6 +3876,7 @@ Predefined Macros,cpp.info,The C Preprocessor}).
* Min and Max:: C++ Minimum and maximum operators.
* Volatiles:: What constitutes an access to a volatile object.
* Restricted Pointers:: C99 restricted pointers and references.
* Vague Linkage:: Where G++ puts inlines, vtables and such.
* C++ Interface:: You can use a single C++ header file for both
declarations and definitions.
* Template Instantiation:: Methods for ensuring that exactly one copy of
...
...
@@ -4063,6 +4064,83 @@ ignored in function definition matching. This means you only need to
specify @code{__restrict__} in a function definition, rather than
in a function prototype as well.
@node Vague Linkage
@section Vague Linkage
@cindex vague linkage
There are several constructs in C++ which require space in the object
file but are not clearly tied to a single translation unit. We say that
these constructs have ``vague linkage''. Typically such constructs are
emitted wherever they are needed, though sometimes we can be more
clever.
@table @asis
@item Inline Functions
Inline functions are typically defined in a header file which can be
included in many different compilations. Hopefully they can usually be
inlined, but sometimes an out-of-line copy is necessary, if the address
of the function is taken or if inlining fails. In general, we emit an
out-of-line copy in all translation units where one is needed. As an
exception, we only emit inline virtual functions with the vtable, since
it will always require a copy.
Local static variables and string constants used in an inline function
are also considered to have vague linkage, since they must be shared
between all inlined and out-of-line instances of the function.
@item VTables
@cindex vtable
C++ virtual functions are implemented in most compilers using a lookup
table, known as a vtable. The vtable contains pointers to the virtual
functions provided by a class, and each object of the class contains a
pointer to its vtable (or vtables, in some multiple-inheritance
situations). If the class declares any non-inline, non-pure virtual
functions, the first one is chosen as the ``key method'' for the class,
and the vtable is only emitted in the translation unit where the key
method is defined.
@emph{Note:} If the chosen key method is later defined as inline, the
vtable will still be emitted in every translation unit which defines it.
Make sure that any inline virtuals are declared inline in the class
body, even if they are not defined there.
@item type_info objects
@cindex type_info
@cindex RTTI
C++ requires information about types to be written out in order to
implement @samp{dynamic_cast}, @samp{typeid} and exception handling.
For polymorphic classes (classes with virtual functions), the type_info
object is written out along with the vtable so that @samp{dynamic_cast}
can determine the dynamic type of a class object at runtime. For all
other types, we write out the type_info object when it is used: when
applying @samp{typeid} to an expression, throwing an object, or
referring to a type in a catch clause or exception specification.
@item Template Instantiations
Most everything in this section also applies to template instantiations,
but there are other options as well.
@xref{Template Instantiation,,Where'
s
the
Template
?}.
@
end
table
When
used
with
GNU
ld
version
2.8
or
later
on
an
ELF
system
such
as
Linux
/
GNU
or
Solaris
2
,
or
on
Microsoft
Windows
,
duplicate
copies
of
these
constructs
will
be
discarded
at
link
time
.
This
is
known
as
COMDAT
support
.
On
targets
that
don
't support COMDAT, but do support weak symbols, GCC
will use them. This way one copy will override all the others, but
the unused copies will still take up space in the executable.
For targets which do not support either COMDAT or weak symbols,
most entities with vague linkage will be emitted as local symbols to
avoid duplicate definition errors from the linker. This will not happen
for local statics in inlines, however, as having multiple copies will
almost certainly break things.
@xref{C++ Interface,,Declarations and Definitions in One Header}, for
another way to control placement of these constructs.
@node C++ Interface
@section Declarations and Definitions in One Header
...
...
@@ -4426,23 +4504,6 @@ Some_Class B __attribute__ ((init_priority (543)));
Note
that
the
particular
values
of
@
var
{
priority
}
do
not
matter
;
only
their
relative
ordering
.
@
item
com_interface
@
cindex
com_interface
attribute
@
c
This
is
based
on
:
1
)
grepping
the
code
,
@
c
2
)
http
://
gcc
.
gnu
.
org
/
ml
/
gcc
-
bugs
/
1999
-
08
n
/
msg01212
.
html
@
c
3
)
http
://
gcc
.
gnu
.
org
/
ml
/
gcc
-
bugs
/
1999
-
08
n
/
msg01215
.
html
@
c
and
4
)
a
lot
of
guesswork
.
You
can
tell
I
don
't use COM. -pme 21Dec00
This type attribute takes no parameters, and marks a class or struct as an
interface for communication via COM; the class will support the COM ABI
rather than the full C++ ABI. Currently this means that RTTI is not possible
with the resulting class heirarchy. The virtual pointer table will be
changed to be COM-compliant. Also, all classes and structs derived from one
marked with this attribute are implicitly marked with the same attribute;
thus, only the base class in a COM hierarchy needs @code{com_interface}.
@
item
java_interface
@
cindex
java_interface
attribute
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment