//===- lib/ReaderWriter/MachO/MachONormalizedFileBinaryUtils.h ------------===// // // The LLVM Linker // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #include "MachONormalizedFile.h" #include "lld/Core/Error.h" #include "lld/Core/LLVM.h" #include "llvm/ADT/StringRef.h" #include "llvm/Support/Casting.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/Host.h" #include "llvm/Support/MachO.h" #include #ifndef LLD_READER_WRITER_MACHO_NORMALIZED_FILE_BINARY_UTILS_H #define LLD_READER_WRITER_MACHO_NORMALIZED_FILE_BINARY_UTILS_H namespace lld { namespace mach_o { namespace normalized { using llvm::sys::getSwappedBytes; inline uint16_t read16(bool swap, uint16_t value) { return (swap ? getSwappedBytes(value) : value); } inline uint32_t read32(bool swap, uint32_t value) { return (swap ? getSwappedBytes(value) : value); } inline uint64_t read64(bool swap, uint64_t value) { return (swap ? getSwappedBytes(value) : value); } inline void write16(int16_t &loc, bool swap, int16_t value) { loc = (swap ? getSwappedBytes(value) : value); } inline void write32(int32_t &loc, bool swap, int32_t value) { loc = (swap ? getSwappedBytes(value) : value); } inline void write64(uint64_t &loc, bool swap, uint64_t value) { loc = (swap ? getSwappedBytes(value) : value); } inline uint32_t bitFieldExtract(uint32_t value, bool isBigEndianBigField, uint8_t firstBit, uint8_t bitCount) { const uint32_t mask = ((1<> shift) & mask; } inline void bitFieldSet(uint32_t &bits, bool isBigEndianBigField, uint32_t newBits, uint8_t firstBit, uint8_t bitCount) { const uint32_t mask = ((1< 16 ) return x.substr(0, 16); else return x; } inline void setString16(StringRef str, char s[16]) { memset(s, 0, 16); memcpy(s, str.begin(), (str.size() > 16) ? 16: str.size()); } // Implemented in normalizedToAtoms() and used by normalizedFromAtoms() so // that the same table can be used to map mach-o sections to and from // DefinedAtom::ContentType. void relocatableSectionInfoForContentType(DefinedAtom::ContentType atomType, StringRef &segmentName, StringRef §ionName, SectionType §ionType, SectionAttr §ionAttrs); } // namespace normalized } // namespace mach_o } // namespace lld #endif // LLD_READER_WRITER_MACHO_NORMALIZED_FILE_BINARY_UTILS_H