annotate lib/Target/Lanai/MCTargetDesc/LanaiELFObjectWriter.cpp @ 145:9987f868744e

fix CbC_llvm
author mir3636
date Tue, 05 Jun 2018 21:59:34 +0900
parents 803732b1fca8
children c2174574ed3a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
120
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
1 //===-- LanaiELFObjectWriter.cpp - Lanai ELF Writer -----------------------===//
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
2 //
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
3 // The LLVM Compiler Infrastructure
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
4 //
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
5 // This file is distributed under the University of Illinois Open Source
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
6 // License. See LICENSE.TXT for details.
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
7 //
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
8 //===----------------------------------------------------------------------===//
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
9
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
10 #include "MCTargetDesc/LanaiBaseInfo.h"
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
11 #include "MCTargetDesc/LanaiFixupKinds.h"
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
12 #include "llvm/BinaryFormat/ELF.h"
120
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
13 #include "llvm/MC/MCELFObjectWriter.h"
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
14 #include "llvm/MC/MCObjectWriter.h"
120
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
15 #include "llvm/Support/ErrorHandling.h"
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
16
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
17 using namespace llvm;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
18
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
19 namespace {
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
20
120
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
21 class LanaiELFObjectWriter : public MCELFObjectTargetWriter {
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
22 public:
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
23 explicit LanaiELFObjectWriter(uint8_t OSABI);
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
24
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
25 ~LanaiELFObjectWriter() override = default;
120
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
26
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
27 protected:
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
28 unsigned getRelocType(MCContext &Ctx, const MCValue &Target,
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
29 const MCFixup &Fixup, bool IsPCRel) const override;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
30 bool needsRelocateWithSymbol(const MCSymbol &SD,
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
31 unsigned Type) const override;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
32 };
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
33
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
34 } // end anonymous namespace
120
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
35
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
36 LanaiELFObjectWriter::LanaiELFObjectWriter(uint8_t OSABI)
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
37 : MCELFObjectTargetWriter(/*Is64Bit_=*/false, OSABI, ELF::EM_LANAI,
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
38 /*HasRelocationAddend=*/true) {}
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
39
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
40 unsigned LanaiELFObjectWriter::getRelocType(MCContext & /*Ctx*/,
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
41 const MCValue & /*Target*/,
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
42 const MCFixup &Fixup,
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
43 bool /*IsPCRel*/) const {
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
44 unsigned Type;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
45 unsigned Kind = static_cast<unsigned>(Fixup.getKind());
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
46 switch (Kind) {
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
47 case Lanai::FIXUP_LANAI_21:
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
48 Type = ELF::R_LANAI_21;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
49 break;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
50 case Lanai::FIXUP_LANAI_21_F:
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
51 Type = ELF::R_LANAI_21_F;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
52 break;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
53 case Lanai::FIXUP_LANAI_25:
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
54 Type = ELF::R_LANAI_25;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
55 break;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
56 case Lanai::FIXUP_LANAI_32:
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
57 case FK_Data_4:
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
58 Type = ELF::R_LANAI_32;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
59 break;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
60 case Lanai::FIXUP_LANAI_HI16:
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
61 Type = ELF::R_LANAI_HI16;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
62 break;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
63 case Lanai::FIXUP_LANAI_LO16:
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
64 Type = ELF::R_LANAI_LO16;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
65 break;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
66 case Lanai::FIXUP_LANAI_NONE:
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
67 Type = ELF::R_LANAI_NONE;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
68 break;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
69
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
70 default:
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
71 llvm_unreachable("Invalid fixup kind!");
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
72 }
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
73 return Type;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
74 }
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
75
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
76 bool LanaiELFObjectWriter::needsRelocateWithSymbol(const MCSymbol & /*SD*/,
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
77 unsigned Type) const {
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
78 switch (Type) {
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
79 case ELF::R_LANAI_21:
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
80 case ELF::R_LANAI_21_F:
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
81 case ELF::R_LANAI_25:
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
82 case ELF::R_LANAI_32:
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
83 case ELF::R_LANAI_HI16:
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
84 return true;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
85 default:
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
86 return false;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
87 }
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
88 }
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
89
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
90 std::unique_ptr<MCObjectWriter>
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
91 llvm::createLanaiELFObjectWriter(raw_pwrite_stream &OS, uint8_t OSABI) {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
92 return createELFObjectWriter(llvm::make_unique<LanaiELFObjectWriter>(OSABI),
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
93 OS, /*IsLittleEndian=*/false);
120
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
94 }