summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/AVR/MCTargetDesc/AVRELFObjectWriter.cpp
diff options
context:
space:
mode:
authorDylan McKay <me@dylanmckay.io>2017-12-09 08:01:28 +0000
committerDylan McKay <me@dylanmckay.io>2017-12-09 08:01:28 +0000
commitba23343a45c7c381ac2beec443df18274728dfb1 (patch)
treeac1bea63ab1d95624ef954ede61a34495a19d6bf /llvm/lib/Target/AVR/MCTargetDesc/AVRELFObjectWriter.cpp
parentf7e8ec13480c4e172dc2c2fce3aead9be3589b58 (diff)
downloadbcm5719-llvm-ba23343a45c7c381ac2beec443df18274728dfb1.tar.gz
bcm5719-llvm-ba23343a45c7c381ac2beec443df18274728dfb1.zip
Revert and accidentally committed revert commit
This reverts commit r320245. llvm-svn: 320247
Diffstat (limited to 'llvm/lib/Target/AVR/MCTargetDesc/AVRELFObjectWriter.cpp')
-rw-r--r--llvm/lib/Target/AVR/MCTargetDesc/AVRELFObjectWriter.cpp45
1 files changed, 39 insertions, 6 deletions
diff --git a/llvm/lib/Target/AVR/MCTargetDesc/AVRELFObjectWriter.cpp b/llvm/lib/Target/AVR/MCTargetDesc/AVRELFObjectWriter.cpp
index 25da75e63fe..412f66fbcf2 100644
--- a/llvm/lib/Target/AVR/MCTargetDesc/AVRELFObjectWriter.cpp
+++ b/llvm/lib/Target/AVR/MCTargetDesc/AVRELFObjectWriter.cpp
@@ -40,12 +40,43 @@ unsigned AVRELFObjectWriter::getRelocType(MCContext &Ctx,
const MCValue &Target,
const MCFixup &Fixup,
bool IsPCRel) const {
+ MCSymbolRefExpr::VariantKind Modifier = Target.getAccessVariant();
switch ((unsigned) Fixup.getKind()) {
case FK_Data_1:
+ switch (Modifier) {
+ default:
+ llvm_unreachable("Unsupported Modifier");
+ case MCSymbolRefExpr::VK_None:
+ return ELF::R_AVR_8;
+ case MCSymbolRefExpr::VK_AVR_DIFF8:
+ return ELF::R_AVR_DIFF8;
+ case MCSymbolRefExpr::VK_AVR_LO8:
+ return ELF::R_AVR_8_LO8;
+ case MCSymbolRefExpr::VK_AVR_HI8:
+ return ELF::R_AVR_8_HI8;
+ case MCSymbolRefExpr::VK_AVR_HLO8:
+ return ELF::R_AVR_8_HLO8;
+ }
case FK_Data_4:
- llvm_unreachable("unsupported relocation type");
+ switch (Modifier) {
+ default:
+ llvm_unreachable("Unsupported Modifier");
+ case MCSymbolRefExpr::VK_None:
+ return ELF::R_AVR_32;
+ case MCSymbolRefExpr::VK_AVR_DIFF32:
+ return ELF::R_AVR_DIFF32;
+ }
case FK_Data_2:
- return ELF::R_AVR_16_PM;
+ switch (Modifier) {
+ default:
+ llvm_unreachable("Unsupported Modifier");
+ case MCSymbolRefExpr::VK_None:
+ return ELF::R_AVR_16;
+ case MCSymbolRefExpr::VK_AVR_NONE:
+ return ELF::R_AVR_16_PM;
+ case MCSymbolRefExpr::VK_AVR_DIFF16:
+ return ELF::R_AVR_DIFF16;
+ }
case AVR::fixup_32:
return ELF::R_AVR_32;
case AVR::fixup_7_pcrel:
@@ -104,10 +135,12 @@ unsigned AVRELFObjectWriter::getRelocType(MCContext &Ctx,
return ELF::R_AVR_8_HI8;
case AVR::fixup_8_hlo8:
return ELF::R_AVR_8_HLO8;
- case AVR::fixup_sym_diff:
- return ELF::R_AVR_SYM_DIFF;
- case AVR::fixup_16_ldst:
- return ELF::R_AVR_16_LDST;
+ case AVR::fixup_diff8:
+ return ELF::R_AVR_DIFF8;
+ case AVR::fixup_diff16:
+ return ELF::R_AVR_DIFF16;
+ case AVR::fixup_diff32:
+ return ELF::R_AVR_DIFF32;
case AVR::fixup_lds_sts_16:
return ELF::R_AVR_LDS_STS_16;
case AVR::fixup_port6:
OpenPOWER on IntegriCloud