diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2019-01-20 11:41:25 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2019-01-20 11:41:25 +0000 | 
| commit | d9484dd61cc151c4f34c31e07f693fefa66316b5 (patch) | |
| tree | ab0560b3da293f1fafd3269c59692e929418f5c2 /contrib/llvm/lib/Object/ELF.cpp | |
| parent | 79e0962d4c3cf1f0acf359a9d69cb3ac68c414c4 (diff) | |
| parent | d8e91e46262bc44006913e6796843909f1ac7bcd (diff) | |
Notes
Diffstat (limited to 'contrib/llvm/lib/Object/ELF.cpp')
| -rw-r--r-- | contrib/llvm/lib/Object/ELF.cpp | 26 | 
1 files changed, 15 insertions, 11 deletions
diff --git a/contrib/llvm/lib/Object/ELF.cpp b/contrib/llvm/lib/Object/ELF.cpp index 2eefb7ef13a3..cf8313f88f93 100644 --- a/contrib/llvm/lib/Object/ELF.cpp +++ b/contrib/llvm/lib/Object/ELF.cpp @@ -139,6 +139,13 @@ StringRef llvm::object::getELFRelocationTypeName(uint32_t Machine,        break;      }      break; +  case ELF::EM_MSP430: +    switch (Type) { +#include "llvm/BinaryFormat/ELFRelocs/MSP430.def" +    default: +      break; +    } +    break;    default:      break;    } @@ -147,7 +154,7 @@ StringRef llvm::object::getELFRelocationTypeName(uint32_t Machine,  #undef ELF_RELOC -uint32_t llvm::object::getELFRelrRelocationType(uint32_t Machine) { +uint32_t llvm::object::getELFRelativeRelocationType(uint32_t Machine) {    switch (Machine) {    case ELF::EM_X86_64:      return ELF::R_X86_64_RELATIVE; @@ -293,7 +300,7 @@ ELFFile<ELFT>::decode_relrs(Elf_Relr_Range relrs) const {    Elf_Rela Rela;    Rela.r_info = 0;    Rela.r_addend = 0; -  Rela.setType(getRelrRelocationType(), false); +  Rela.setType(getRelativeRelocationType(), false);    std::vector<Elf_Rela> Relocs;    // Word type: uint32_t for Elf32, and uint64_t for Elf64. @@ -393,20 +400,17 @@ ELFFile<ELFT>::android_relas(const Elf_Shdr *Sec) const {      if (GroupedByAddend && GroupHasAddend)        Addend += ReadSLEB(); +    if (!GroupHasAddend) +      Addend = 0; +      for (uint64_t I = 0; I != NumRelocsInGroup; ++I) {        Elf_Rela R;        Offset += GroupedByOffsetDelta ? GroupOffsetDelta : ReadSLEB();        R.r_offset = Offset;        R.r_info = GroupedByInfo ? GroupRInfo : ReadSLEB(); - -      if (GroupHasAddend) { -        if (!GroupedByAddend) -          Addend += ReadSLEB(); -        R.r_addend = Addend; -      } else { -        R.r_addend = 0; -      } - +      if (GroupHasAddend && !GroupedByAddend) +        Addend += ReadSLEB(); +      R.r_addend = Addend;        Relocs.push_back(R);        if (ErrStr)  | 
