Summary: We now use a standard fixup type applying the pc-relative address of constant address space variables, and we have the GlobalAddress lowering code add the required 4 byte offset to the global address rather than doing it as part of the fixup. This refactoring will make it easier to use the same code for global address space variables and also simplifies the code. Re-commit this after fixing a bug where we were trying to use a reference to a Triple object that had already been destroyed. Reviewers: arsenm, kzhuravl Subscribers: arsenm, kzhuravl, llvm-commits Differential Revision: http://reviews.llvm.org/D21154 llvm-svn: 272705
48 lines
1.5 KiB
C++
48 lines
1.5 KiB
C++
//===-- AMDGPUELFObjectWriter.cpp - AMDGPU ELF Writer ----------------------==//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
/// \file
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "AMDGPUMCTargetDesc.h"
|
|
#include "llvm/MC/MCELFObjectWriter.h"
|
|
#include "llvm/MC/MCFixup.h"
|
|
|
|
using namespace llvm;
|
|
|
|
namespace {
|
|
|
|
class AMDGPUELFObjectWriter : public MCELFObjectTargetWriter {
|
|
public:
|
|
AMDGPUELFObjectWriter(bool Is64Bit, bool HasRelocationAddend);
|
|
protected:
|
|
unsigned getRelocType(MCContext &Ctx, const MCValue &Target,
|
|
const MCFixup &Fixup, bool IsPCRel) const override {
|
|
return Fixup.getKind();
|
|
}
|
|
|
|
};
|
|
|
|
|
|
} // End anonymous namespace
|
|
|
|
AMDGPUELFObjectWriter::AMDGPUELFObjectWriter(bool Is64Bit,
|
|
bool HasRelocationAddend)
|
|
: MCELFObjectTargetWriter(Is64Bit,
|
|
ELF::ELFOSABI_AMDGPU_HSA,
|
|
ELF::EM_AMDGPU,
|
|
HasRelocationAddend) { }
|
|
|
|
|
|
MCObjectWriter *llvm::createAMDGPUELFObjectWriter(bool Is64Bit,
|
|
bool HasRelocationAddend,
|
|
raw_pwrite_stream &OS) {
|
|
MCELFObjectTargetWriter *MOTW =
|
|
new AMDGPUELFObjectWriter(Is64Bit, HasRelocationAddend);
|
|
return createELFObjectWriter(MOTW, OS, true);
|
|
}
|