LLVM
13.0.0git
lib
Target
MSP430
MCTargetDesc
MSP430ELFObjectWriter.cpp
Go to the documentation of this file.
1
//===-- MSP430ELFObjectWriter.cpp - MSP430 ELF Writer ---------------------===//
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/MSP430FixupKinds.h
"
10
#include "
MCTargetDesc/MSP430MCTargetDesc.h
"
11
12
#include "
MCTargetDesc/MSP430MCTargetDesc.h
"
13
#include "
llvm/MC/MCELFObjectWriter.h
"
14
#include "
llvm/MC/MCFixup.h
"
15
#include "
llvm/MC/MCObjectWriter.h
"
16
#include "
llvm/MC/MCValue.h
"
17
#include "
llvm/Support/ErrorHandling.h
"
18
19
using namespace
llvm
;
20
21
namespace
{
22
class
MSP430ELFObjectWriter :
public
MCELFObjectTargetWriter
{
23
public
:
24
MSP430ELFObjectWriter(uint8_t OSABI)
25
:
MCELFObjectTargetWriter
(
false
, OSABI, ELF::
EM_MSP430
,
26
/*HasRelocationAddend*/
true
) {}
27
28
~MSP430ELFObjectWriter()
override
{}
29
30
protected
:
31
unsigned
getRelocType(
MCContext
&Ctx,
const
MCValue
&
Target
,
32
const
MCFixup
&Fixup,
bool
IsPCRel)
const override
{
33
// Translate fixup kind to ELF relocation type.
34
switch
(
Fixup
.getTargetKind()) {
35
case
FK_Data_1
:
return
ELF::R_MSP430_8;
36
case
FK_Data_2
:
return
ELF::R_MSP430_16_BYTE;
37
case
FK_Data_4
:
return
ELF::R_MSP430_32;
38
case
MSP430::fixup_32
:
return
ELF::R_MSP430_32;
39
case
MSP430::fixup_10_pcrel
:
return
ELF::R_MSP430_10_PCREL;
40
case
MSP430::fixup_16
:
return
ELF::R_MSP430_16;
41
case
MSP430::fixup_16_pcrel
:
return
ELF::R_MSP430_16_PCREL;
42
case
MSP430::fixup_16_byte
:
return
ELF::R_MSP430_16_BYTE;
43
case
MSP430::fixup_16_pcrel_byte
:
return
ELF::R_MSP430_16_PCREL_BYTE;
44
case
MSP430::fixup_2x_pcrel
:
return
ELF::R_MSP430_2X_PCREL;
45
case
MSP430::fixup_rl_pcrel
:
return
ELF::R_MSP430_RL_PCREL;
46
case
MSP430::fixup_8
:
return
ELF::R_MSP430_8;
47
case
MSP430::fixup_sym_diff
:
return
ELF::R_MSP430_SYM_DIFF;
48
default
:
49
llvm_unreachable
(
"Invalid fixup kind"
);
50
}
51
}
52
};
53
}
// end of anonymous namespace
54
55
std::unique_ptr<MCObjectTargetWriter>
56
llvm::createMSP430ELFObjectWriter
(uint8_t OSABI) {
57
return
std::make_unique<MSP430ELFObjectWriter>(OSABI);
58
}
llvm::MSP430::fixup_16_pcrel_byte
@ fixup_16_pcrel_byte
Definition:
MSP430FixupKinds.h:35
llvm
This class represents lattice values for constants.
Definition:
AllocatorList.h:23
llvm::MCContext
Context object for machine code objects.
Definition:
MCContext.h:71
llvm::Target
Target - Wrapper for Target specific information.
Definition:
TargetRegistry.h:124
ErrorHandling.h
llvm::MSP430::fixup_16_byte
@ fixup_16_byte
Definition:
MSP430FixupKinds.h:33
llvm::MSP430::fixup_16
@ fixup_16
Definition:
MSP430FixupKinds.h:29
llvm::FK_Data_4
@ FK_Data_4
A four-byte fixup.
Definition:
MCFixup.h:25
false
Definition:
StackSlotColoring.cpp:142
llvm::MCELFObjectTargetWriter
Definition:
MCELFObjectWriter.h:53
llvm::MSP430::fixup_10_pcrel
@ fixup_10_pcrel
Definition:
MSP430FixupKinds.h:27
llvm::createMSP430ELFObjectWriter
std::unique_ptr< MCObjectTargetWriter > createMSP430ELFObjectWriter(uint8_t OSABI)
Definition:
MSP430ELFObjectWriter.cpp:56
MSP430MCTargetDesc.h
llvm::MSP430::fixup_rl_pcrel
@ fixup_rl_pcrel
Definition:
MSP430FixupKinds.h:39
MCELFObjectWriter.h
llvm::MSP430::fixup_32
@ fixup_32
Definition:
MSP430FixupKinds.h:25
llvm::FK_Data_1
@ FK_Data_1
A one-byte fixup.
Definition:
MCFixup.h:23
Fixup
PowerPC TLS Dynamic Call Fixup
Definition:
PPCTLSDynamicCall.cpp:212
llvm_unreachable
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
Definition:
ErrorHandling.h:136
MCFixup.h
llvm::MSP430::fixup_2x_pcrel
@ fixup_2x_pcrel
Definition:
MSP430FixupKinds.h:37
MCObjectWriter.h
llvm::MSP430::fixup_sym_diff
@ fixup_sym_diff
Definition:
MSP430FixupKinds.h:43
llvm::MSP430::fixup_16_pcrel
@ fixup_16_pcrel
Definition:
MSP430FixupKinds.h:31
llvm::MSP430::fixup_8
@ fixup_8
Definition:
MSP430FixupKinds.h:41
llvm::ELF::EM_MSP430
@ EM_MSP430
Definition:
ELF.h:221
MCValue.h
llvm::MCValue
This represents an "assembler immediate".
Definition:
MCValue.h:37
MSP430FixupKinds.h
llvm::FK_Data_2
@ FK_Data_2
A two-byte fixup.
Definition:
MCFixup.h:24
true
basic Basic Alias true
Definition:
BasicAliasAnalysis.cpp:1827
llvm::MCFixup
Encode information on a single operation to perform on a byte sequence (e.g., an encoded instruction)...
Definition:
MCFixup.h:81
Generated on Fri Mar 5 2021 21:57:58 for LLVM by
1.8.17