LLVM: lib/Target/AVR/MCTargetDesc/AVRELFObjectWriter.cpp Source File (original) (raw)

1

2

3

4

5

6

7

8

11

19

20namespace llvm {

21

22

24public:

26

28

30 const MCFixup &Fixup, bool IsPCRel) const override;

31};

32

35

38 bool IsPCRel) const {

39 const unsigned Kind = Fixup.getTargetKind();

43 switch ((unsigned)Fixup.getKind()) {

45 switch (Modifier) {

46 default:

49 return ELF::R_AVR_8;

51 return ELF::R_AVR_DIFF8;

53 return ELF::R_AVR_8_LO8;

55 return ELF::R_AVR_8_HI8;

57 return ELF::R_AVR_8_HLO8;

58 }

60 switch (Modifier) {

61 default:

64 return ELF::R_AVR_32;

66 return ELF::R_AVR_DIFF32;

67 }

69 switch (Modifier) {

70 default:

73 return ELF::R_AVR_16;

76 return ELF::R_AVR_16_PM;

78 return ELF::R_AVR_DIFF16;

79 }

81 return ELF::R_AVR_32;

83 return ELF::R_AVR_7_PCREL;

85 return ELF::R_AVR_13_PCREL;

87 return ELF::R_AVR_16;

89 return ELF::R_AVR_16_PM;

91 return ELF::R_AVR_LO8_LDI;

93 return ELF::R_AVR_HI8_LDI;

95 return ELF::R_AVR_HH8_LDI;

97 return ELF::R_AVR_LO8_LDI_NEG;

99 return ELF::R_AVR_HI8_LDI_NEG;

101 return ELF::R_AVR_HH8_LDI_NEG;

103 return ELF::R_AVR_LO8_LDI_PM;

105 return ELF::R_AVR_HI8_LDI_PM;

107 return ELF::R_AVR_HH8_LDI_PM;

109 return ELF::R_AVR_LO8_LDI_PM_NEG;

111 return ELF::R_AVR_HI8_LDI_PM_NEG;

113 return ELF::R_AVR_HH8_LDI_PM_NEG;

115 return ELF::R_AVR_CALL;

117 return ELF::R_AVR_LDI;

119 return ELF::R_AVR_6;

121 return ELF::R_AVR_6_ADIW;

123 return ELF::R_AVR_MS8_LDI;

125 return ELF::R_AVR_MS8_LDI_NEG;

127 return ELF::R_AVR_LO8_LDI_GS;

129 return ELF::R_AVR_HI8_LDI_GS;

131 return ELF::R_AVR_8;

133 return ELF::R_AVR_8_LO8;

135 return ELF::R_AVR_8_HI8;

137 return ELF::R_AVR_8_HLO8;

139 return ELF::R_AVR_DIFF8;

141 return ELF::R_AVR_DIFF16;

143 return ELF::R_AVR_DIFF32;

145 return ELF::R_AVR_LDS_STS_16;

147 return ELF::R_AVR_PORT6;

149 return ELF::R_AVR_PORT5;

150 default:

152 }

153}

154

156 return std::make_unique(OSABI);

157}

158

159}

PowerPC TLS Dynamic Call Fixup

Writes AVR machine code into an ELF32 object file.

AVRELFObjectWriter(uint8_t OSABI)

unsigned getRelocType(MCContext &Ctx, const MCValue &Target, const MCFixup &Fixup, bool IsPCRel) const override

virtual ~AVRELFObjectWriter()=default

Context object for machine code objects.

Encode information on a single operation to perform on a byte sequence (e.g., an encoded instruction)...

This represents an "assembler immediate".

Target - Wrapper for Target specific information.

#define llvm_unreachable(msg)

Marks that the current location is not supposed to be reachable.

@ fixup_16_pm

A 16-bit program memory address.

@ fixup_16

A 16-bit address.

@ fixup_call

A 22-bit fixup for the target of a CALL k or JMP k instruction.

@ fixup_hh8_ldi

Replaces the immediate operand of a 16-bit Rd, K instruction with the upper 8 bits of a 24-bit value ...

@ fixup_ms8_ldi_neg

Replaces the immediate operand of a 16-bit Rd, K instruction with the upper 8 bits of a negated 32-bi...

@ fixup_32

A 32-bit AVR fixup.

@ fixup_lo8_ldi_neg

Replaces the immediate operand of a 16-bit Rd, K instruction with the lower 8 bits of a negated 16-bi...

@ fixup_6_adiw

A symbol+addr fixup for the `LDD +, " family of instructions.

@ fixup_ms8_ldi

Replaces the immediate operand of a 16-bit Rd, K instruction with the upper 8 bits of a 32-bit value ...

@ fixup_7_pcrel

A 7-bit PC-relative fixup for the family of conditional branches which take 7-bit targets (BRNE,...

@ fixup_ldi

Replaces the 8-bit immediate with another value.

@ fixup_lo8_ldi

Replaces the immediate operand of a 16-bit Rd, K instruction with the lower 8 bits of a 16-bit value ...

@ fixup_hi8_ldi_pm_neg

Replaces the immediate operand of a 16-bit Rd, K instruction with the upper 8 bits of a negated 16-bi...

@ fixup_hi8_ldi

Replaces the immediate operand of a 16-bit Rd, K instruction with the upper 8 bits of a 16-bit value ...

@ fixup_lo8_ldi_pm

Replaces the immediate operand of a 16-bit Rd, K instruction with the lower 8 bits of a 16-bit progra...

@ fixup_port6

A 6-bit port address.

@ fixup_hh8_ldi_neg

Replaces the immediate operand of a 16-bit Rd, K instruction with the upper 8 bits of a negated 24-bi...

@ fixup_hh8_ldi_pm

Replaces the immediate operand of a 16-bit Rd, K instruction with the upper 8 bits of a 24-bit progra...

@ fixup_port5

A 5-bit port address.

@ fixup_lo8_ldi_pm_neg

Replaces the immediate operand of a 16-bit Rd, K instruction with the lower 8 bits of a negated 16-bi...

@ fixup_hi8_ldi_pm

Replaces the immediate operand of a 16-bit Rd, K instruction with the upper 8 bits of a 16-bit progra...

@ fixup_hh8_ldi_pm_neg

Replaces the immediate operand of a 16-bit Rd, K instruction with the upper 8 bits of a negated 24-bi...

@ fixup_13_pcrel

A 12-bit PC-relative fixup for the family of branches which take 12-bit targets (RJMP,...

@ fixup_hi8_ldi_neg

Replaces the immediate operand of a 16-bit Rd, K instruction with the upper 8 bits of a negated 16-bi...

This is an optimization pass for GlobalISel generic memory operations.

@ FirstLiteralRelocationKind

The range [FirstLiteralRelocationKind, MaxTargetFixupKind) is used for relocations coming from ....

@ FK_Data_1

A one-byte fixup.

@ FK_Data_4

A four-byte fixup.

@ FK_Data_2

A two-byte fixup.

std::unique_ptr< MCObjectTargetWriter > createAVRELFObjectWriter(uint8_t OSABI)

Creates an ELF object writer for AVR.