diff --git a/lld/COFF/Chunks.cpp b/lld/COFF/Chunks.cpp index a5d548691f18a..2ab5aeac843ef 100644 --- a/lld/COFF/Chunks.cpp +++ b/lld/COFF/Chunks.cpp @@ -162,7 +162,7 @@ void SectionChunk::applyRelARM(uint8_t *Off, uint16_t Type, OutputSection *OS, uint64_t S, uint64_t P) const { // Pointer to thumb code must have the LSB set. uint64_t SX = S; - if (OS && (OS->getPermissions() & IMAGE_SCN_MEM_EXECUTE)) + if (OS && (OS->Header.Characteristics & IMAGE_SCN_MEM_EXECUTE)) SX |= 1; switch (Type) { case IMAGE_REL_ARM_ADDR32: add32(Off, SX + Config->ImageBase); break; diff --git a/lld/COFF/PDB.cpp b/lld/COFF/PDB.cpp index 1a904ac41d608..1f5e11d3d61a5 100644 --- a/lld/COFF/PDB.cpp +++ b/lld/COFF/PDB.cpp @@ -1056,7 +1056,7 @@ static void addLinkerModuleSectionSymbol(pdb::DbiModuleDescriptorBuilder &Mod, BumpPtrAllocator &Allocator) { SectionSym Sym(SymbolRecordKind::SectionSym); Sym.Alignment = 12; // 2^12 = 4KB - Sym.Characteristics = OS.getCharacteristics(); + Sym.Characteristics = OS.Header.Characteristics; Sym.Length = OS.getVirtualSize(); Sym.Name = OS.Name; Sym.Rva = OS.getRVA(); @@ -1127,7 +1127,7 @@ void PDBLinker::addSectionContrib(pdb::DbiModuleDescriptorBuilder &LinkerModule, CRC.update(CharContents); SC.DataCrc = CRC.getCRC(); } else { - SC.Characteristics = OS->getCharacteristics(); + SC.Characteristics = OS->Header.Characteristics; // FIXME: When we start creating DBI for import libraries, use those here. SC.Imod = LinkerModule.getModuleIndex(); } diff --git a/lld/COFF/Writer.cpp b/lld/COFF/Writer.cpp index 9b23e9c8e71b3..591146649513a 100644 --- a/lld/COFF/Writer.cpp +++ b/lld/COFF/Writer.cpp @@ -469,7 +469,7 @@ void Writer::createSections() { return 3; // Move DISCARDABLE (or non-memory-mapped) sections to the end of file because // the loader cannot handle holes. - if (S->getPermissions() & IMAGE_SCN_MEM_DISCARDABLE) + if (S->Header.Characteristics & IMAGE_SCN_MEM_DISCARDABLE) return 2; // .rsrc should come at the end of the non-discardable sections because its // size may change by the Win32 UpdateResources() function, causing @@ -666,7 +666,7 @@ void Writer::createSymbolAndStringTable() { for (OutputSection *Sec : OutputSections) { if (Sec->Name.size() <= COFF::NameSize) continue; - if ((Sec->getPermissions() & IMAGE_SCN_MEM_DISCARDABLE) == 0) + if ((Sec->Header.Characteristics & IMAGE_SCN_MEM_DISCARDABLE) == 0) continue; Sec->setStringTableOff(addEntryToStringTable(Sec->Name)); } @@ -987,7 +987,7 @@ static void markSymbolsWithRelocations(ObjFile *File, if (auto *D = dyn_cast_or_null(Ref)) { Chunk *RefChunk = D->getChunk(); OutputSection *OS = RefChunk ? RefChunk->getOutputSection() : nullptr; - if (OS && OS->getPermissions() & IMAGE_SCN_MEM_EXECUTE) + if (OS && OS->Header.Characteristics & IMAGE_SCN_MEM_EXECUTE) addSymbolToRVASet(UsedSymbols, D); } } @@ -1117,7 +1117,7 @@ void Writer::writeSections() { // Fill gaps between functions in .text with INT3 instructions // instead of leaving as NUL bytes (which can be interpreted as // ADD instructions). - if (Sec->getPermissions() & IMAGE_SCN_CNT_CODE) + if (Sec->Header.Characteristics & IMAGE_SCN_CNT_CODE) memset(SecBuf, 0xCC, Sec->getRawSize()); for_each(parallel::par, Sec->getChunks().begin(), Sec->getChunks().end(), [&](Chunk *C) { C->writeTo(SecBuf); }); @@ -1207,7 +1207,7 @@ OutputSection *Writer::findSection(StringRef Name) { uint32_t Writer::getSizeOfInitializedData() { uint32_t Res = 0; for (OutputSection *S : OutputSections) - if (S->getPermissions() & IMAGE_SCN_CNT_INITIALIZED_DATA) + if (S->Header.Characteristics & IMAGE_SCN_CNT_INITIALIZED_DATA) Res += S->getRawSize(); return Res; } diff --git a/lld/COFF/Writer.h b/lld/COFF/Writer.h index 1dc1e61148b6f..a76a7928d3f82 100644 --- a/lld/COFF/Writer.h +++ b/lld/COFF/Writer.h @@ -35,8 +35,6 @@ class OutputSection { ArrayRef getChunks() { return Chunks; } void addPermissions(uint32_t C); void setPermissions(uint32_t C); - uint32_t getPermissions() { return Header.Characteristics & PermMask; } - uint32_t getCharacteristics() { return Header.Characteristics; } uint64_t getRVA() { return Header.VirtualAddress; } uint64_t getFileOff() { return Header.PointerToRawData; } void writeHeaderTo(uint8_t *Buf);