mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 04:32:44 +01:00
06b207a9f5
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
36 lines
1.1 KiB
C++
36 lines
1.1 KiB
C++
//===- PPCTargetStreamer.h - PPC Target Streamer ----------------*- C++ -*-===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_LIB_TARGET_POWERPC_PPCTARGETSTREAMER_H
|
|
#define LLVM_LIB_TARGET_POWERPC_PPCTARGETSTREAMER_H
|
|
|
|
#include "llvm/ADT/StringRef.h"
|
|
#include "llvm/MC/MCStreamer.h"
|
|
|
|
namespace llvm {
|
|
|
|
class MCExpr;
|
|
class MCSymbol;
|
|
class MCSymbolELF;
|
|
|
|
class PPCTargetStreamer : public MCTargetStreamer {
|
|
public:
|
|
PPCTargetStreamer(MCStreamer &S);
|
|
~PPCTargetStreamer() override;
|
|
|
|
virtual void emitTCEntry(const MCSymbol &S,
|
|
MCSymbolRefExpr::VariantKind Kind) = 0;
|
|
virtual void emitMachine(StringRef CPU) = 0;
|
|
virtual void emitAbiVersion(int AbiVersion) = 0;
|
|
virtual void emitLocalEntry(MCSymbolELF *S, const MCExpr *LocalOffset) = 0;
|
|
};
|
|
|
|
} // end namespace llvm
|
|
|
|
#endif // LLVM_LIB_TARGET_POWERPC_PPCTARGETSTREAMER_H
|