HomePhabricator

[AIX][TLS] Generate 32-bit general-dynamic access code sequence

Authored by nemanjai on Mar 4 2021, 6:07 AM.

Description

[AIX][TLS] Generate 32-bit general-dynamic access code sequence

Adds support for the TLS general dynamic access model to
assembly files on AIX 32-bit.

To generate the correct code sequence when accessing a TLS variable
v, we first create two TOC entry nodes, one for the variable offset, one
for the region handle. These nodes are followed by a PPCISD::TLSGD_AIX
node (new node introduced by this patch).
The PPCISD::TLSGD_AIX node (TLSGDAIX pseudo instruction) is
expanded to 2 copies (to put the variable offset and region handle in
the right registers) and a call to __tls_get_addr.

This patch also changes the way TC entries are generated in asm files.
If the generated TC entry is for the region handle of a TLS variable,
we add the @m relocation and the . prefix to the entry name.
For example:

L..C0:
  .tc .v[TC],v[TL]@m -> region handle
L..C1:
  .tc v[TC],v[TL] -> variable offset

Reviewed By: nemanjai, sfertile

Differential Revision: https://reviews.llvm.org/D97948

Details