Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/llvm/lib/Target/Mips/MCTargetDesc/MipsWinCOFFObjectWriter.cpp
213845 views
1
//===- MipsWinCOFFObjectWriter.cpp------------------------------*- C++ -*-===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===---------------------------------------------------------------------===//
8
9
#include "MCTargetDesc/MipsFixupKinds.h"
10
#include "MCTargetDesc/MipsMCTargetDesc.h"
11
#include "llvm/BinaryFormat/COFF.h"
12
#include "llvm/MC/MCContext.h"
13
#include "llvm/MC/MCWinCOFFObjectWriter.h"
14
15
using namespace llvm;
16
17
namespace {
18
19
class MipsWinCOFFObjectWriter : public MCWinCOFFObjectTargetWriter {
20
public:
21
MipsWinCOFFObjectWriter();
22
23
unsigned getRelocType(MCContext &Ctx, const MCValue &Target,
24
const MCFixup &Fixup, bool IsCrossSection,
25
const MCAsmBackend &MAB) const override;
26
};
27
28
} // end anonymous namespace
29
30
MipsWinCOFFObjectWriter::MipsWinCOFFObjectWriter()
31
: MCWinCOFFObjectTargetWriter(COFF::IMAGE_FILE_MACHINE_R4000) {}
32
33
unsigned MipsWinCOFFObjectWriter::getRelocType(MCContext &Ctx,
34
const MCValue &Target,
35
const MCFixup &Fixup,
36
bool IsCrossSection,
37
const MCAsmBackend &MAB) const {
38
unsigned FixupKind = Fixup.getKind();
39
40
switch (FixupKind) {
41
case FK_Data_4:
42
return COFF::IMAGE_REL_MIPS_REFWORD;
43
case FK_SecRel_2:
44
return COFF::IMAGE_REL_MIPS_SECTION;
45
case FK_SecRel_4:
46
return COFF::IMAGE_REL_MIPS_SECREL;
47
case Mips::fixup_Mips_26:
48
return COFF::IMAGE_REL_MIPS_JMPADDR;
49
case Mips::fixup_Mips_HI16:
50
return COFF::IMAGE_REL_MIPS_REFHI;
51
case Mips::fixup_Mips_LO16:
52
return COFF::IMAGE_REL_MIPS_REFLO;
53
default:
54
Ctx.reportError(Fixup.getLoc(), "unsupported relocation type");
55
return COFF::IMAGE_REL_MIPS_REFWORD;
56
}
57
}
58
59
std::unique_ptr<MCObjectTargetWriter> llvm::createMipsWinCOFFObjectWriter() {
60
return std::make_unique<MipsWinCOFFObjectWriter>();
61
}
62
63