diff --git a/lld/MachO/SyntheticSections.cpp b/lld/MachO/SyntheticSections.cpp --- a/lld/MachO/SyntheticSections.cpp +++ b/lld/MachO/SyntheticSections.cpp @@ -155,10 +155,9 @@ static void encodeDoRebase(Rebase &rebase, raw_svector_ostream &os) { assert(rebase.consecutiveCount != 0); if (rebase.consecutiveCount <= REBASE_IMMEDIATE_MASK) { - os << static_cast(REBASE_OPCODE_DO_REBASE_IMM_TIMES | - rebase.consecutiveCount); + os << (REBASE_OPCODE_DO_REBASE_IMM_TIMES | rebase.consecutiveCount); } else { - os << static_cast(REBASE_OPCODE_DO_REBASE_ULEB_TIMES); + os << REBASE_OPCODE_DO_REBASE_ULEB_TIMES; encodeULEB128(rebase.consecutiveCount, os); } rebase.consecutiveCount = 0; @@ -173,14 +172,13 @@ encodeDoRebase(lastRebase, os); if (lastRebase.segment != seg) { - os << static_cast(REBASE_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB | - seg->index); + os << (REBASE_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB | seg->index); encodeULEB128(offset, os); lastRebase.segment = seg; lastRebase.offset = offset; } else { assert(lastRebase.offset != offset); - os << static_cast(REBASE_OPCODE_ADD_ADDR_ULEB); + os << REBASE_OPCODE_ADD_ADDR_ULEB; encodeULEB128(offset - lastRebase.offset, os); lastRebase.offset = offset; } @@ -197,7 +195,7 @@ raw_svector_ostream os{contents}; Rebase lastRebase; - os << static_cast(REBASE_OPCODE_SET_TYPE_IMM | REBASE_TYPE_POINTER); + os << (REBASE_OPCODE_SET_TYPE_IMM | REBASE_TYPE_POINTER); llvm::sort(locations, [](const Location &a, const Location &b) { return a.isec->getVA(a.offset) < b.isec->getVA(b.offset); @@ -208,7 +206,7 @@ if (lastRebase.consecutiveCount != 0) encodeDoRebase(lastRebase, os); - os << static_cast(REBASE_OPCODE_DONE); + os << REBASE_OPCODE_DONE; } void RebaseSection::writeTo(uint8_t *buf) const { @@ -288,24 +286,23 @@ OutputSegment *seg = osec->parent; uint64_t offset = osec->getSegmentOffset() + outSecOff; if (lastBinding.segment != seg) { - os << static_cast(BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB | - seg->index); + os << (BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB | seg->index); encodeULEB128(offset, os); lastBinding.segment = seg; lastBinding.offset = offset; } else if (lastBinding.offset != offset) { - os << static_cast(BIND_OPCODE_ADD_ADDR_ULEB); + os << BIND_OPCODE_ADD_ADDR_ULEB; encodeULEB128(offset - lastBinding.offset, os); lastBinding.offset = offset; } if (lastBinding.addend != addend) { - os << static_cast(BIND_OPCODE_SET_ADDEND_SLEB); + os << BIND_OPCODE_SET_ADDEND_SLEB; encodeSLEB128(addend, os); lastBinding.addend = addend; } - os << static_cast(BIND_OPCODE_DO_BIND); + os << BIND_OPCODE_DO_BIND; // DO_BIND causes dyld to both perform the binding and increment the offset lastBinding.offset += target->wordSize; } @@ -320,20 +317,19 @@ static void encodeDylibOrdinal(int16_t ordinal, raw_svector_ostream &os) { if (ordinal <= 0) { - os << static_cast(BIND_OPCODE_SET_DYLIB_SPECIAL_IMM | - (ordinal & BIND_IMMEDIATE_MASK)); + os << (BIND_OPCODE_SET_DYLIB_SPECIAL_IMM | (ordinal & BIND_IMMEDIATE_MASK)); } else if (ordinal <= BIND_IMMEDIATE_MASK) { - os << static_cast(BIND_OPCODE_SET_DYLIB_ORDINAL_IMM | ordinal); + os << (BIND_OPCODE_SET_DYLIB_ORDINAL_IMM | ordinal); } else { - os << static_cast(BIND_OPCODE_SET_DYLIB_ORDINAL_ULEB); + os << BIND_OPCODE_SET_DYLIB_ORDINAL_ULEB; encodeULEB128(ordinal, os); } } static void encodeWeakOverride(const Defined *defined, raw_svector_ostream &os) { - os << static_cast(BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM | - BIND_SYMBOL_FLAGS_NON_WEAK_DEFINITION) + os << (BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM | + BIND_SYMBOL_FLAGS_NON_WEAK_DEFINITION) << defined->getName() << '\0'; } @@ -396,7 +392,7 @@ if (sym->isWeakRef()) flags |= BIND_SYMBOL_FLAGS_WEAK_IMPORT; os << flags << sym->getName() << '\0' - << static_cast(BIND_OPCODE_SET_TYPE_IMM | BIND_TYPE_POINTER); + << (BIND_OPCODE_SET_TYPE_IMM | BIND_TYPE_POINTER); int16_t ordinal = ordinalForDylibSymbol(*sym); if (ordinal != lastOrdinal) { encodeDylibOrdinal(ordinal, os); @@ -408,7 +404,7 @@ lastBinding, os); } if (!bindingsMap.empty()) - os << static_cast(BIND_OPCODE_DONE); + os << BIND_OPCODE_DONE; } void BindingSection::writeTo(uint8_t *buf) const { @@ -428,16 +424,15 @@ for (auto &p : sortBindings(bindingsMap)) { const Symbol *sym = p.first; std::vector &bindings = p.second; - os << static_cast(BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM) - << sym->getName() << '\0' - << static_cast(BIND_OPCODE_SET_TYPE_IMM | BIND_TYPE_POINTER); + os << (BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM) << sym->getName() << '\0' + << (BIND_OPCODE_SET_TYPE_IMM | BIND_TYPE_POINTER); for (const BindingEntry &b : bindings) encodeBinding(b.target.isec->parent, b.target.isec->getOffset(b.target.offset), b.addend, lastBinding, os); } if (!bindingsMap.empty() || !definitions.empty()) - os << static_cast(BIND_OPCODE_DONE); + os << BIND_OPCODE_DONE; } void WeakBindingSection::writeTo(uint8_t *buf) const { @@ -580,8 +575,7 @@ uint32_t LazyBindingSection::encode(const DylibSymbol &sym) { uint32_t opstreamOffset = contents.size(); OutputSegment *dataSeg = in.lazyPointers->parent; - os << static_cast(BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB | - dataSeg->index); + os << (BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB | dataSeg->index); uint64_t offset = in.lazyPointers->addr - dataSeg->firstSection()->addr + sym.stubsIndex * target->wordSize; encodeULEB128(offset, os); @@ -591,9 +585,8 @@ if (sym.isWeakRef()) flags |= BIND_SYMBOL_FLAGS_WEAK_IMPORT; - os << flags << sym.getName() << '\0' - << static_cast(BIND_OPCODE_DO_BIND) - << static_cast(BIND_OPCODE_DONE); + os << flags << sym.getName() << '\0' << BIND_OPCODE_DO_BIND + << BIND_OPCODE_DONE; return opstreamOffset; } diff --git a/llvm/include/llvm/BinaryFormat/MachO.h b/llvm/include/llvm/BinaryFormat/MachO.h --- a/llvm/include/llvm/BinaryFormat/MachO.h +++ b/llvm/include/llvm/BinaryFormat/MachO.h @@ -226,7 +226,7 @@ DICE_KIND_ABS_JUMP_TABLE32 = 5u }; -enum RebaseType { +enum RebaseType : uint8_t { REBASE_TYPE_POINTER = 1u, REBASE_TYPE_TEXT_ABSOLUTE32 = 2u, REBASE_TYPE_TEXT_PCREL32 = 3u @@ -234,7 +234,7 @@ enum { REBASE_OPCODE_MASK = 0xF0u, REBASE_IMMEDIATE_MASK = 0x0Fu }; -enum RebaseOpcode { +enum RebaseOpcode : uint8_t { REBASE_OPCODE_DONE = 0x00u, REBASE_OPCODE_SET_TYPE_IMM = 0x10u, REBASE_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB = 0x20u, @@ -246,7 +246,7 @@ REBASE_OPCODE_DO_REBASE_ULEB_TIMES_SKIPPING_ULEB = 0x80u }; -enum BindType { +enum BindType : uint8_t { BIND_TYPE_POINTER = 1u, BIND_TYPE_TEXT_ABSOLUTE32 = 2u, BIND_TYPE_TEXT_PCREL32 = 3u @@ -258,7 +258,7 @@ BIND_SPECIAL_DYLIB_FLAT_LOOKUP = -2 }; -enum { +enum : uint8_t { BIND_SYMBOL_FLAGS_WEAK_IMPORT = 0x1u, BIND_SYMBOL_FLAGS_NON_WEAK_DEFINITION = 0x8u, @@ -266,7 +266,7 @@ BIND_IMMEDIATE_MASK = 0x0Fu }; -enum BindOpcode { +enum BindOpcode : uint8_t { BIND_OPCODE_DONE = 0x00u, BIND_OPCODE_SET_DYLIB_ORDINAL_IMM = 0x10u, BIND_OPCODE_SET_DYLIB_ORDINAL_ULEB = 0x20u,