[lld] Revert "[lld][Webassembly] Avoid a signed overflow on large sections … (PR #181807)

via llvm-commits llvm-commits at lists.llvm.org
Tue Feb 17 03:57:22 PST 2026


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-lld

Author: Omair Javaid (omjavaid)

<details>
<summary>Changes</summary>


Reverts llvm/llvm-project#<!-- -->178287
I have reverted this change as it was failing lld arm 32bit buildbot. 
https://lab.llvm.org/staging/#/builders/160/builds/1189

---
Full diff: https://github.com/llvm/llvm-project/pull/181807.diff


5 Files Affected:

- (removed) lld/test/wasm/large-debug-section.test (-29) 
- (removed) lld/test/wasm/large-section.test (-35) 
- (removed) lld/test/wasm/section-too-large.test (-21) 
- (modified) lld/wasm/InputChunks.h (+1-5) 
- (modified) lld/wasm/OutputSections.cpp (-13) 


``````````diff
diff --git a/lld/test/wasm/large-debug-section.test b/lld/test/wasm/large-debug-section.test
deleted file mode 100644
index 5483132d7732d..0000000000000
--- a/lld/test/wasm/large-debug-section.test
+++ /dev/null
@@ -1,29 +0,0 @@
-# RUN: split-file %s %t
-# RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-unknown %t/debug1.s -o %t/debug1.o
-# RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-unknown %t/debug2.s -o %t/debug2.o
-# --no-gc-sections to prevent the linker from optimizing the chunk away, otherwise it produces a tiny output
-# RUN: wasm-ld --no-entry --no-gc-sections %t/debug1.o %t/debug2.o -o %t/combined.wasm
-# RUN: llvm-readobj --sections %t/combined.wasm | FileCheck %s
-
-# Check that the linker doesn't crash with large debug sections that together exceed 2GB.
-# CHECK: Type: CUSTOM (0x0)
-# Total size: 2214592520 + 134217728 = 2348810248
-# CHECK-NEXT: Size: 2348810248
-# CHECK: Name: .debug_info
-
-# A 2GB + some extra bytes debug section to make sure we go over 2G
-#--- debug1.s
-.section .debug_info,"",@
-  .int32 0xAAAAAAAA
-  .int32 0xBBBBBBBB
-  .zero 2214592504
-  .int32 0xCCCCCCCC
-  .int32 0xDDDDDDDD
-
-#--- debug2.s
-.section .debug_info,"",@
-  .int32 0x11111111
-  .int32 0x22222222
-  .zero 134217712
-  .int32 0x44444444
-  .int32 0x55555555
diff --git a/lld/test/wasm/large-section.test b/lld/test/wasm/large-section.test
deleted file mode 100644
index ad3148a24139c..0000000000000
--- a/lld/test/wasm/large-section.test
+++ /dev/null
@@ -1,35 +0,0 @@
-# RUN: split-file %s %t
-# RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-unknown %t/chunk1.s -o %t/chunk1.o
-# RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-unknown %t/chunk2.s -o %t/chunk2.o
-# --no-gc-sections to prevent the linker from optimizing the chunk away, otherwise it produces a tiny output
-# RUN: wasm-ld --no-entry --no-gc-sections %t/chunk1.o %t/chunk2.o -o %t/combined.wasm
-# RUN: llvm-readobj --sections %t/combined.wasm | FileCheck %s
-
-# Check that the linker doesn't crash with large data sections that together exceed 2GB.
-# CHECK: Type: DATA (0xB)
-# CHECK-NEXT: Size: 2348810260
-
-# A 2GB + some extra bytes of data to make sure we go over 2G 
-#--- chunk1.s
-.section .data.chunk1,"",@
-.globl chunk1_start
-.type chunk1_start, at object
-chunk1_start:
-  .int32 0xAAAAAAAA
-  .int32 0xBBBBBBBB
-  .zero 2214592504
-  .int32 0xCCCCCCCC
-  .int32 0xDDDDDDDD
-.size chunk1_start, 2214592512
-
-#--- chunk2.s
-.section .data.chunk2,"",@
-.globl chunk2_start
-.type chunk2_start, at object
-chunk2_start:
-  .int32 0x11111111
-  .int32 0x22222222
-  .zero 134217712
-  .int32 0x44444444
-  .int32 0x55555555
-.size chunk2_start, 134217728
diff --git a/lld/test/wasm/section-too-large.test b/lld/test/wasm/section-too-large.test
deleted file mode 100644
index a4e6007de9746..0000000000000
--- a/lld/test/wasm/section-too-large.test
+++ /dev/null
@@ -1,21 +0,0 @@
-# RUN: split-file %s %t
-# RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-unknown %t/chunk1.s -o %t/chunk1.o
-# RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-unknown %t/chunk2.s -o %t/chunk2.o
-# --no-gc-sections to prevent the linker from optimizing the chunk away, otherwise it produces a tiny output
-# RUN: not wasm-ld --no-entry --no-gc-sections %t/chunk1.o %t/chunk2.o -o %t/combined.wasm 2>&1 | FileCheck %s
-
-# Check that the linker fails gracefully when a section exceeds 4GB.
-# CHECK: error: section '.debug_info' too large to encode:
-
-# Two chunks that together exceed 4GB
-#--- chunk1.s
-.section .debug_info,"",@
-  .int32 0xAAAAAAAA
-  .zero 2147483640
-  .int32 0xBBBBBBBB
-
-#--- chunk2.s
-.section .debug_info,"",@
-  .int32 0x11111111
-  .zero 2147483640
-  .int32 0x22222222
diff --git a/lld/wasm/InputChunks.h b/lld/wasm/InputChunks.h
index e772894d95456..1fe78d76631f1 100644
--- a/lld/wasm/InputChunks.h
+++ b/lld/wasm/InputChunks.h
@@ -97,11 +97,7 @@ class InputChunk {
 
   // After assignAddresses is called, this represents the offset from
   // the beginning of the output section this chunk was assigned to.
-  //
-  // WASM sections can be up to 4GB. We use a larger, signed integer here to
-  // be able to detect section size overflow instead of a silent wrap-around
-  // and corrupted output sections.
-  int64_t outSecOff = 0;
+  int32_t outSecOff = 0;
 
   uint8_t sectionKind : 3;
 
diff --git a/lld/wasm/OutputSections.cpp b/lld/wasm/OutputSections.cpp
index 22c001eaa43b7..d6348e459d31e 100644
--- a/lld/wasm/OutputSections.cpp
+++ b/lld/wasm/OutputSections.cpp
@@ -59,10 +59,6 @@ void CodeSection::finalizeContents() {
     bodySize += func->getSize();
   }
 
-  if (bodySize > UINT32_MAX) {
-    error("section too large to encode: " + Twine(bodySize) + " bytes");
-  }
-
   createHeader(bodySize);
 }
 
@@ -161,10 +157,6 @@ void DataSection::finalizeContents() {
     }
   }
 
-  if (bodySize > UINT32_MAX) {
-    error("section too large to encode: " + Twine(bodySize) + " bytes");
-  }
-
   createHeader(bodySize);
 }
 
@@ -257,11 +249,6 @@ void CustomSection::finalizeContents() {
     payloadSize += section->getSize();
   }
 
-  if (payloadSize > UINT32_MAX) {
-    error("section '" + name + "' too large to encode: " + Twine(payloadSize) +
-          " bytes");
-  }
-
   createHeader(payloadSize + nameData.size());
 }
 

``````````

</details>


https://github.com/llvm/llvm-project/pull/181807


More information about the llvm-commits mailing list