//===- lib/ReaderWriter/ELF/FileCommon.cpp --------------------------------===// // // The LLVM Linker // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #include "ELFFile.h" #include "FileCommon.h" using namespace llvm::ELF; namespace lld { namespace elf { static const char *elf32_expected = "ELF32 expected, but got ELF64"; static const char *elf64_expected = "ELF64 expected, but got ELF32"; static const char *le_expected = "Little endian files are expected, but got a big endian file."; static const char *be_expected = "Big endian files are expected, but got a little endian file."; template <> std::error_code checkCompatibility(unsigned char size, unsigned char endian) { if (size == ELFCLASS64) return make_dynamic_error_code(elf32_expected); if (endian == ELFDATA2MSB) return make_dynamic_error_code(le_expected); return std::error_code(); } template <> std::error_code checkCompatibility(unsigned char size, unsigned char endian) { if (size == ELFCLASS64) return make_dynamic_error_code(elf32_expected); if (endian == ELFDATA2LSB) return make_dynamic_error_code(be_expected); return std::error_code(); } template <> std::error_code checkCompatibility(unsigned char size, unsigned char endian) { if (size == ELFCLASS32) return make_dynamic_error_code(elf64_expected); if (endian == ELFDATA2MSB) return make_dynamic_error_code(le_expected); return std::error_code(); } template <> std::error_code checkCompatibility(unsigned char size, unsigned char endian) { if (size == ELFCLASS32) return make_dynamic_error_code(elf64_expected); if (endian == ELFDATA2LSB) return make_dynamic_error_code(be_expected); return std::error_code(); } } // end namespace elf } // end namespace lld