[lld] 1565317 - Revert D139181 "[lld][Alignment][NFC] Use Align instead of log2 of alignment in Wasm Sections"

Guillaume Chatelet via llvm-commits llvm-commits at lists.llvm.org
Tue Dec 20 02:59:10 PST 2022


Author: Guillaume Chatelet
Date: 2022-12-20T10:58:56Z
New Revision: 1565317287728d38618519674623551fbf1410af

URL: https://github.com/llvm/llvm-project/commit/1565317287728d38618519674623551fbf1410af
DIFF: https://github.com/llvm/llvm-project/commit/1565317287728d38618519674623551fbf1410af.diff

LOG: Revert D139181 "[lld][Alignment][NFC] Use Align instead of log2 of alignment in Wasm Sections"

As discussed on the patch the Align type is probably not a good fit for
linkers.
This reverts commit cfe77f23d6f190d54763a7575cee95aceb9216bc.

Added: 
    

Modified: 
    lld/wasm/InputChunks.h
    lld/wasm/OutputSegment.cpp
    lld/wasm/OutputSegment.h
    lld/wasm/SyntheticSections.cpp
    lld/wasm/Writer.cpp

Removed: 
    


################################################################################
diff  --git a/lld/wasm/InputChunks.h b/lld/wasm/InputChunks.h
index 34b1572584a10..ec9d2eb3c2752 100644
--- a/lld/wasm/InputChunks.h
+++ b/lld/wasm/InputChunks.h
@@ -85,7 +85,7 @@ class InputChunk {
   OutputSection *outputSec = nullptr;
   uint32_t comdat = UINT32_MAX;
   uint32_t inputSectionOffset = 0;
-  llvm::Align alignment;
+  uint32_t alignment;
   uint32_t flags;
 
   // Only applies to data segments.
@@ -109,8 +109,8 @@ class InputChunk {
 protected:
   InputChunk(ObjFile *f, Kind k, StringRef name, uint32_t alignment = 0,
              uint32_t flags = 0)
-      : name(name), file(f), alignment(1ULL << alignment), flags(flags),
-        sectionKind(k), live(!config->gcSections), discarded(false) {}
+      : name(name), file(f), alignment(alignment), flags(flags), sectionKind(k),
+        live(!config->gcSections), discarded(false) {}
   ArrayRef<uint8_t> data() const { return rawData; }
   uint64_t getTombstone() const;
 

diff  --git a/lld/wasm/OutputSegment.cpp b/lld/wasm/OutputSegment.cpp
index e7e9929e3d9c0..86b538403391b 100644
--- a/lld/wasm/OutputSegment.cpp
+++ b/lld/wasm/OutputSegment.cpp
@@ -22,10 +22,10 @@ namespace wasm {
 void OutputSegment::addInputSegment(InputChunk *inSeg) {
   alignment = std::max(alignment, inSeg->alignment);
   inputSegments.push_back(inSeg);
-  size = llvm::alignTo(size, inSeg->alignment);
+  size = llvm::alignTo(size, 1ULL << inSeg->alignment);
   LLVM_DEBUG(dbgs() << "addInputSegment: " << inSeg->name << " oname=" << name
-                    << " size=" << inSeg->getSize() << " align="
-                    << Log2(inSeg->alignment) << " at:" << size << "\n");
+                    << " size=" << inSeg->getSize()
+                    << " align=" << inSeg->alignment << " at:" << size << "\n");
   inSeg->outputSeg = this;
   inSeg->outputSegmentOffset = size;
   size += inSeg->getSize();
@@ -56,9 +56,8 @@ void OutputSegment::finalizeInputSegments() {
     });
     if (i == mergedSegments.end()) {
       LLVM_DEBUG(llvm::dbgs() << "new merge segment: " << name
-                              << " alignment=" << Log2(ms->alignment) << "\n");
-      auto *syn =
-          make<SyntheticMergedChunk>(name, Log2(ms->alignment), ms->flags);
+                              << " alignment=" << ms->alignment << "\n");
+      auto *syn = make<SyntheticMergedChunk>(name, ms->alignment, ms->flags);
       syn->outputSeg = this;
       mergedSegments.push_back(syn);
       i = std::prev(mergedSegments.end());
@@ -75,7 +74,7 @@ void OutputSegment::finalizeInputSegments() {
   inputSegments = newSegments;
   size = 0;
   for (InputChunk *seg : inputSegments) {
-    size = llvm::alignTo(size, seg->alignment);
+    size = llvm::alignTo(size, 1ULL << seg->alignment);
     LLVM_DEBUG(llvm::dbgs() << "outputSegmentOffset set: " << seg->name
                             << " -> " << size << "\n");
     seg->outputSegmentOffset = size;

diff  --git a/lld/wasm/OutputSegment.h b/lld/wasm/OutputSegment.h
index 5be6a7184c371..3b7a0f50be94e 100644
--- a/lld/wasm/OutputSegment.h
+++ b/lld/wasm/OutputSegment.h
@@ -38,7 +38,7 @@ class OutputSegment {
   uint32_t linkingFlags = 0;
   uint32_t initFlags = 0;
   uint32_t sectionOffset = 0;
-  llvm::Align alignment;
+  uint32_t alignment = 0;
   uint64_t startVA = 0;
   std::vector<InputChunk *> inputSegments;
 

diff  --git a/lld/wasm/SyntheticSections.cpp b/lld/wasm/SyntheticSections.cpp
index bf32754e29914..27715d9bef332 100644
--- a/lld/wasm/SyntheticSections.cpp
+++ b/lld/wasm/SyntheticSections.cpp
@@ -668,7 +668,7 @@ void LinkingSection::writeBody() {
     writeUleb128(sub.os, dataSegments.size(), "num data segments");
     for (const OutputSegment *s : dataSegments) {
       writeStr(sub.os, s->name, "segment name");
-      writeUleb128(sub.os, Log2(s->alignment), "alignment");
+      writeUleb128(sub.os, s->alignment, "alignment");
       writeUleb128(sub.os, s->linkingFlags, "flags");
     }
     sub.writeTo(os);

diff  --git a/lld/wasm/Writer.cpp b/lld/wasm/Writer.cpp
index 5a0026b62b983..767b1ad6682bd 100644
--- a/lld/wasm/Writer.cpp
+++ b/lld/wasm/Writer.cpp
@@ -288,12 +288,11 @@ void Writer::layoutMemory() {
 
   out.dylinkSec->memAlign = 0;
   for (OutputSegment *seg : segments) {
-    out.dylinkSec->memAlign =
-        std::max(out.dylinkSec->memAlign, Log2(seg->alignment));
-    memoryPtr = alignTo(memoryPtr, seg->alignment);
+    out.dylinkSec->memAlign = std::max(out.dylinkSec->memAlign, seg->alignment);
+    memoryPtr = alignTo(memoryPtr, 1ULL << seg->alignment);
     seg->startVA = memoryPtr;
     log(formatv("mem: {0,-15} offset={1,-8} size={2,-8} align={3}", seg->name,
-                memoryPtr, seg->size, Log2(seg->alignment)));
+                memoryPtr, seg->size, seg->alignment));
 
     if (!config->relocatable && seg->isTLS()) {
       if (WasmSym::tlsSize) {
@@ -302,7 +301,7 @@ void Writer::layoutMemory() {
       }
       if (WasmSym::tlsAlign) {
         auto *tlsAlign = cast<DefinedGlobal>(WasmSym::tlsAlign);
-        setGlobalPtr(tlsAlign, seg->alignment.value());
+        setGlobalPtr(tlsAlign, int64_t{1} << seg->alignment);
       }
       if (!config->sharedMemory && WasmSym::tlsBase) {
         auto *tlsBase = cast<DefinedGlobal>(WasmSym::tlsBase);


        


More information about the llvm-commits mailing list