diff --git a/lld/wasm/InputChunks.h b/lld/wasm/InputChunks.h --- a/lld/wasm/InputChunks.h +++ b/lld/wasm/InputChunks.h @@ -76,6 +76,7 @@ uint32_t getComdat() const { return comdat; } StringRef getComdatName() const; uint32_t getInputSectionOffset() const { return inputSectionOffset; } + StringRef getOutputSegmentName() const; size_t getNumRelocations() const { return relocations.size(); } void writeRelocations(llvm::raw_ostream &os) const; diff --git a/lld/wasm/InputChunks.cpp b/lld/wasm/InputChunks.cpp --- a/lld/wasm/InputChunks.cpp +++ b/lld/wasm/InputChunks.cpp @@ -523,5 +523,24 @@ return UINT64_C(-1); } +StringRef InputChunk::getOutputSegmentName() const { + // We always merge .tbss and .tdata into a single TLS segment so all TLS + // symbols are be relative to single __tls_base. + if (isTLS()) + return ".tdata"; + StringRef name = getName(); + if (!config->mergeDataSegments) + return name; + if (name.startswith(".text.")) + return ".text"; + if (name.startswith(".data.")) + return ".data"; + if (name.startswith(".bss.")) + return ".bss"; + if (name.startswith(".rodata.")) + return ".rodata"; + return name; +} + } // namespace wasm } // namespace lld diff --git a/lld/wasm/Writer.cpp b/lld/wasm/Writer.cpp --- a/lld/wasm/Writer.cpp +++ b/lld/wasm/Writer.cpp @@ -854,25 +854,6 @@ out.tableSec->assignIndexes(); } -static StringRef getOutputDataSegmentName(const InputChunk &seg) { - // We always merge .tbss and .tdata into a single TLS segment so all TLS - // symbols are be relative to single __tls_base. - if (seg.isTLS()) - return ".tdata"; - StringRef name = seg.getName(); - if (!config->mergeDataSegments) - return name; - if (name.startswith(".text.")) - return ".text"; - if (name.startswith(".data.")) - return ".data"; - if (name.startswith(".bss.")) - return ".bss"; - if (name.startswith(".rodata.")) - return ".rodata"; - return name; -} - OutputSegment *Writer::createOutputSegment(StringRef name) { LLVM_DEBUG(dbgs() << "new segment: " << name << "\n"); OutputSegment *s = make(name); @@ -889,7 +870,7 @@ for (InputChunk *segment : file->segments) { if (!segment->live) continue; - StringRef name = getOutputDataSegmentName(*segment); + StringRef name = segment->getOutputSegmentName(); OutputSegment *s = nullptr; // When running in relocatable mode we can't merge segments that are part // of comdat groups since the ultimate linker needs to be able exclude or