mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-24 12:29:33 +00:00
[X86][ELF] Correct relocation for DWARF TLS references
Previously we had only Linux using DTPOFF for these; all X86 ELF targets should. Fixes a side issue mentioned in PR21077. Differential Revision: http://reviews.llvm.org/D8011 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231130 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
4549d733da
commit
1f8fa31e5d
@ -40,7 +40,7 @@ static std::unique_ptr<TargetLoweringObjectFile> createTLOF(const Triple &TT) {
|
||||
if (TT.isOSLinux())
|
||||
return make_unique<X86LinuxTargetObjectFile>();
|
||||
if (TT.isOSBinFormatELF())
|
||||
return make_unique<TargetLoweringObjectFileELF>();
|
||||
return make_unique<X86ELFTargetObjectFile>();
|
||||
if (TT.isKnownWindowsMSVCEnvironment())
|
||||
return make_unique<X86WindowsTargetObjectFile>();
|
||||
if (TT.isOSBinFormatCOFF())
|
||||
|
@ -62,18 +62,17 @@ const MCExpr *X86_64MachoTargetObjectFile::getIndirectSymViaGOTPCRel(
|
||||
return MCBinaryExpr::CreateAdd(Res, Off, getContext());
|
||||
}
|
||||
|
||||
const MCExpr *X86ELFTargetObjectFile::getDebugThreadLocalSymbol(
|
||||
const MCSymbol *Sym) const {
|
||||
return MCSymbolRefExpr::Create(Sym, MCSymbolRefExpr::VK_DTPOFF, getContext());
|
||||
}
|
||||
|
||||
void
|
||||
X86LinuxTargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &TM) {
|
||||
TargetLoweringObjectFileELF::Initialize(Ctx, TM);
|
||||
InitializeELF(TM.Options.UseInitArray);
|
||||
}
|
||||
|
||||
const MCExpr *
|
||||
X86LinuxTargetObjectFile::getDebugThreadLocalSymbol(
|
||||
const MCSymbol *Sym) const {
|
||||
return MCSymbolRefExpr::Create(Sym, MCSymbolRefExpr::VK_DTPOFF, getContext());
|
||||
}
|
||||
|
||||
const MCExpr *X86WindowsTargetObjectFile::getExecutableRelativeSymbol(
|
||||
const ConstantExpr *CE, Mangler &Mang, const TargetMachine &TM) const {
|
||||
// We are looking for the difference of two symbols, need a subtraction
|
||||
|
@ -38,15 +38,19 @@ namespace llvm {
|
||||
int64_t Offset) const override;
|
||||
};
|
||||
|
||||
/// X86LinuxTargetObjectFile - This implementation is used for linux x86
|
||||
/// and x86-64.
|
||||
class X86LinuxTargetObjectFile : public TargetLoweringObjectFileELF {
|
||||
void Initialize(MCContext &Ctx, const TargetMachine &TM) override;
|
||||
|
||||
/// \brief This implemenatation is used for X86 ELF targets that don't
|
||||
/// have a further specialization.
|
||||
class X86ELFTargetObjectFile : public TargetLoweringObjectFileELF {
|
||||
/// \brief Describe a TLS variable address within debug info.
|
||||
const MCExpr *getDebugThreadLocalSymbol(const MCSymbol *Sym) const override;
|
||||
};
|
||||
|
||||
/// X86LinuxTargetObjectFile - This implementation is used for linux x86
|
||||
/// and x86-64.
|
||||
class X86LinuxTargetObjectFile : public X86ELFTargetObjectFile {
|
||||
void Initialize(MCContext &Ctx, const TargetMachine &TM) override;
|
||||
};
|
||||
|
||||
/// \brief This implementation is used for Windows targets on x86 and x86-64.
|
||||
class X86WindowsTargetObjectFile : public TargetLoweringObjectFileCOFF {
|
||||
const MCExpr *
|
||||
|
@ -7,6 +7,12 @@
|
||||
; RUN: llc %s -o - -filetype=asm -O0 -mtriple=x86_64-unknown-linux-gnu -split-dwarf=Enable \
|
||||
; RUN: | FileCheck --check-prefix=CHECK --check-prefix=FISSION %s
|
||||
|
||||
; RUN: llc %s -o - -filetype=asm -O0 -mtriple=x86_64-scei-ps4 \
|
||||
; RUN: | FileCheck --check-prefix=CHECK --check-prefix=SINGLE --check-prefix=SINGLE-64 %s
|
||||
|
||||
; RUN: llc %s -o - -filetype=asm -O0 -mtriple=x86_64-unknown-freebsd \
|
||||
; RUN: | FileCheck --check-prefix=CHECK --check-prefix=SINGLE --check-prefix=SINGLE-64 %s
|
||||
|
||||
; FIXME: add relocation and DWARF expression support to llvm-dwarfdump & use
|
||||
; that here instead of raw assembly printing
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user