Emulating TLS#
For targets whose psABI does not provide Thread Local Storage via specific relocations and instruction sequences, an emulation layer is used. A set of target hooks allows this emulation layer to be configured for the requirements of a particular target. For instance the psABI may in fact specify TLS support in terms of an emulation layer.
The emulation layer works by creating a control object for every TLS object. To access the TLS object, a lookup function is provided which, when given the address of the control object, will return the address of the current thread’s instance of the TLS object.
-
const char *TARGET_EMUTLS_GET_ADDRESS#
Contains the name of the helper function that uses a TLS control object to locate a TLS instance. The default causes libgcc’s emulated TLS helper function to be used.
-
const char *TARGET_EMUTLS_REGISTER_COMMON#
Contains the name of the helper function that should be used at program startup to register TLS objects that are implicitly initialized to zero. If this is
NULL, all TLS objects will have explicit initializers. The default causes libgcc’s emulated TLS registration function to be used.
-
const char *TARGET_EMUTLS_VAR_SECTION#
Contains the name of the section in which TLS control variables should be placed. The default of
NULLallows these to be placed in any section.
-
const char *TARGET_EMUTLS_TMPL_SECTION#
Contains the name of the section in which TLS initializers should be placed. The default of
NULLallows these to be placed in any section.
-
const char *TARGET_EMUTLS_VAR_PREFIX#
Contains the prefix to be prepended to TLS control variable names. The default of
NULLuses a target-specific prefix.
-
const char *TARGET_EMUTLS_TMPL_PREFIX#
Contains the prefix to be prepended to TLS initializer objects. The default of
NULLuses a target-specific prefix.
-
tree TARGET_EMUTLS_VAR_FIELDS(tree type, tree *name)#
Specifies a function that generates the FIELD_DECLs for a TLS control object type.
typeis the RECORD_TYPE the fields are for andnameshould be filled with the structure tag, if the default of__emutls_objectis unsuitable. The default creates a type suitable for libgcc’s emulated TLS function.
-
tree TARGET_EMUTLS_VAR_INIT(tree var, tree decl, tree tmpl_addr)#
Specifies a function that generates the CONSTRUCTOR to initialize a TLS control object.
varis the TLS control object,declis the TLS object andtmpl_addris the address of the initializer. The default initializes libgcc’s emulated TLS control object.
-
bool TARGET_EMUTLS_VAR_ALIGN_FIXED#
Specifies whether the alignment of TLS control variable objects is fixed and should not be increased as some backends may do to optimize single objects. The default is false.
-
bool TARGET_EMUTLS_DEBUG_FORM_TLS_ADDRESS#
Specifies whether a DWARF
DW_OP_form_tls_addresslocation descriptor may be used to describe emulated TLS control objects.