DLL Programmer's Guide for TNS/R Systems

Finding Symbol Definitions
DLL Programmers Guide for TNS/R Systems522203-002
4-12
C++ Considerations: Globalized (Gblzd) Symbols
of the loadfile itself. That range comprises the loadfile’s LibList, the loadfiles that those
loadfiles re-export , and so on.
C++ Considerations:
Globalized (Gblzd) Symbols
Constructs in the C++ language can generate symbols that might have multiple
definitions (for example, one in every compilation unit that includes a particular header
file). The compiler marks these symbols so that the linker can recognize them and pick
one definition for use throughout the resulting loadfile. The linker also marks them so
that the loader can recognize them and pick one definition for use throughout the
process.
Here are a few of the situations that give rise to such symbols:
Functions declared inline for which the compiler defines an out-of-line procedure
Elaborations of template functions or classes
Compiler-generated variable names used to identify types for run-time type
checking, including throw and catch of exceptions
The compiler generates these symbols as needed; programmer's cannot explicitly
define them in source.
For correct function of the C++ program and libraries, it is important that a single
definition be used throughout the process. For example, an exception can be thrown
and caught in different loadfiles only if they agree on the exception class type.
These special symbols are called globalized symbols, often abbreviated gblzd. The
overloading of the term "globalized" arises because these symbols unconditionally
have globalized semantics: the loader picks one definition for this symbol and binds all
references to it. It does so regardless of the import control for the referencing loadfile.
One must carefully distinguish the term "globalized symbols" (these symbols that
automatically get special treatment) from "globalized import" (selected by the user at
link time).
These gblzd symbols reside in a separate symbol table in PIC loadfiles.
On TNS/R systems, gblzd symbols are treated slightly differently from ordinary
symbols in a loadfile with globalized import: when traversing the loadList of the
Table 4-1. Import Control Summary
Option Range Sequence
-b globalized loadList of the program load sequence
-b semi_globalized loadList of the program current loadfile followed by
load sequence
-b localized within the loadfile’s loadList load sequence