#include "../RuntimeDyldMachO.h"
#include "llvm/Support/Endian.h"
-#include <sstream>
-
#define DEBUG_TYPE "dyld"
namespace llvm {
unsigned getStubAlignment() override { return 8; }
/// Extract the addend encoded in the instruction / memory location.
- Expected<int64_t> decodeAddend(const RelocationEntry &RE) const {
+ int64_t decodeAddend(const RelocationEntry &RE) const {
const SectionEntry &Section = Sections[RE.SectionID];
uint8_t *LocalAddress = Section.getAddressWithOffset(RE.Offset);
unsigned NumBytes = 1 << RE.Size;
// Verify that the relocation has the correct size and alignment.
switch (RE.RelType) {
default:
- return make_error<StringError>((std::ostringstream()
- << "Unsupported relocation type: "
- << getRelocName(RE.RelType)).str(),
- inconvertibleErrorCode());
+ llvm_unreachable("Unsupported relocation type!");
case MachO::ARM64_RELOC_UNSIGNED:
- if (NumBytes != 4 && NumBytes != 8)
- return make_error<StringError>("Invalid relocation size for "
- "ARM64_RELOC_UNSIGNED",
- inconvertibleErrorCode());
+ assert((NumBytes == 4 || NumBytes == 8) && "Invalid relocation size.");
break;
case MachO::ARM64_RELOC_BRANCH26:
case MachO::ARM64_RELOC_PAGE21:
return processSubtractRelocation(SectionID, RelI, Obj, ObjSectionToID);
RelocationEntry RE(getRelocationEntry(SectionID, Obj, RelI));
- if (auto Addend = decodeAddend(RE))
- RE.Addend = *Addend;
- else
- return Addend.takeError();
+ RE.Addend = decodeAddend(RE);
assert((ExplicitAddend == 0 || RE.Addend == 0) && "Relocation has "\
"ARM64_RELOC_ADDEND and embedded addend in the instruction.");
return ++RelI;
}
- static const char *getRelocName(uint32_t RelocType) {
- switch (RelocType) {
- case MachO::ARM64_RELOC_UNSIGNED: return "ARM64_RELOC_UNSIGNED";
- case MachO::ARM64_RELOC_SUBTRACTOR: return "ARM64_RELOC_SUBTRACTOR";
- case MachO::ARM64_RELOC_BRANCH26: return "ARM64_RELOC_BRANCH26";
- case MachO::ARM64_RELOC_PAGE21: return "ARM64_RELOC_PAGE21";
- case MachO::ARM64_RELOC_PAGEOFF12: return "ARM64_RELOC_PAGEOFF12";
- case MachO::ARM64_RELOC_GOT_LOAD_PAGE21: return "ARM64_RELOC_GOT_LOAD_PAGE21";
- case MachO::ARM64_RELOC_GOT_LOAD_PAGEOFF12: return "ARM64_RELOC_GOT_LOAD_PAGEOFF12";
- case MachO::ARM64_RELOC_POINTER_TO_GOT: return "ARM64_RELOC_POINTER_TO_GOT";
- case MachO::ARM64_RELOC_TLVP_LOAD_PAGE21: return "ARM64_RELOC_TLVP_LOAD_PAGE21";
- case MachO::ARM64_RELOC_TLVP_LOAD_PAGEOFF12: return "ARM64_RELOC_TLVP_LOAD_PAGEOFF12";
- case MachO::ARM64_RELOC_ADDEND: return "ARM64_RELOC_ADDEND";
- }
- return "Unrecognized arm64 addend";
- }
-
};
}