[lld] [llvm] COFF: Allow hex literals in .def files: BASE/HEAPSIZE/STACKSIZE (PR #184764)

via llvm-commits llvm-commits at lists.llvm.org
Thu Mar 5 03:29:03 PST 2026


https://github.com/mon updated https://github.com/llvm/llvm-project/pull/184764

>From 2904d0bb2acf49ea091bd67c268cb35c787c1e68 Mon Sep 17 00:00:00 2001
From: Will Toohey <will at mon.im>
Date: Thu, 5 Mar 2026 20:14:21 +1000
Subject: [PATCH] COFF: Allow hex literals in .def files:
 BASE/HEAPSIZE/STACKSIZE

---
 lld/test/COFF/base.test                  | 15 +++++++++++++++
 lld/test/COFF/heap.test                  |  6 ++++++
 lld/test/COFF/stack.test                 |  6 ++++++
 llvm/lib/Object/COFFModuleDefinition.cpp |  2 +-
 4 files changed, 28 insertions(+), 1 deletion(-)

diff --git a/lld/test/COFF/base.test b/lld/test/COFF/base.test
index 645bab65fe306..d778e74e54272 100644
--- a/lld/test/COFF/base.test
+++ b/lld/test/COFF/base.test
@@ -12,6 +12,15 @@
 # RUN: llvm-readobj --file-headers %t.exe | FileCheck -check-prefix=BASE-HEADER %s
 # RUN: llvm-objdump -s %t.exe | FileCheck --check-prefix=BASE-TEXT %s
 
+# RUN: echo "LIBRARY \"%t.dll\" BASE=0x280000000" > %t.def
+# RUN: lld-link /out:%t.dll /dll %t.obj /def:%t.def %t.obj
+# RUN: llvm-readobj --file-headers %t.dll | FileCheck -check-prefix=BASE-HEADER %s
+# RUN: llvm-objdump -s %t.dll | FileCheck --check-prefix=BASE-TEXT %s
+# RUN: echo "LIBRARY \"%t.dll\" BASE=10737418240" > %t.def
+# RUN: lld-link /out:%t.dll /dll %t.obj /def:%t.def %t.obj
+# RUN: llvm-readobj --file-headers %t.dll | FileCheck -check-prefix=BASE-HEADER %s
+# RUN: llvm-objdump -s %t.dll | FileCheck --check-prefix=BASE-TEXT %s
+
 # BASE-HEADER: ImageBase: 0x280000000
 # BASE-TEXT:      Contents of section .text:
 # BASE-TEXT-NEXT: 1000 00000080 02000000
@@ -48,6 +57,12 @@ symbols:
     SimpleType:      IMAGE_SYM_TYPE_NULL
     ComplexType:     IMAGE_SYM_DTYPE_NULL
     StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
+  - Name:            _DllMainCRTStartup
+    Value:           0
+    SectionNumber:   1
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
   - Name:            __ImageBase
     Value:           0
     SectionNumber:   0
diff --git a/lld/test/COFF/heap.test b/lld/test/COFF/heap.test
index f9b772624906e..f2ecc135ccd92 100644
--- a/lld/test/COFF/heap.test
+++ b/lld/test/COFF/heap.test
@@ -11,6 +11,9 @@ DEFAULT: SizeOfHeapCommit: 4096
 # RUN: echo "HEAPSIZE 12288" > %t.def
 # RUN: lld-link /out:%t.exe /entry:main /def:%t.def %t.obj
 # RUN: llvm-readobj --file-headers %t.exe | FileCheck -check-prefix=CHECK1 %s
+# RUN: echo "HEAPSIZE 0x3000" > %t.def
+# RUN: lld-link /out:%t.exe /entry:main /def:%t.def %t.obj
+# RUN: llvm-readobj --file-headers %t.exe | FileCheck -check-prefix=CHECK1 %s
 
 CHECK1: SizeOfHeapReserve: 12288
 CHECK1: SizeOfHeapCommit: 4096
@@ -20,6 +23,9 @@ CHECK1: SizeOfHeapCommit: 4096
 # RUN: echo "HEAPSIZE 20480,12288" > %t.def
 # RUN: lld-link /out:%t.exe /entry:main /def:%t.def %t.obj
 # RUN: llvm-readobj --file-headers %t.exe | FileCheck -check-prefix=CHECK2 %s
+# RUN: echo "HEAPSIZE 0x5000,0x3000" > %t.def
+# RUN: lld-link /out:%t.exe /entry:main /def:%t.def %t.obj
+# RUN: llvm-readobj --file-headers %t.exe | FileCheck -check-prefix=CHECK2 %s
 
 CHECK2: SizeOfHeapReserve: 20480
 CHECK2: SizeOfHeapCommit: 12288
diff --git a/lld/test/COFF/stack.test b/lld/test/COFF/stack.test
index ad31ca9434465..0523200e25f69 100644
--- a/lld/test/COFF/stack.test
+++ b/lld/test/COFF/stack.test
@@ -11,6 +11,9 @@ DEFAULT: SizeOfStackCommit: 4096
 # RUN: echo "STACKSIZE 12288" > %t.def
 # RUN: lld-link /out:%t.exe /entry:main /def:%t.def %t.obj
 # RUN: llvm-readobj --file-headers %t.exe | FileCheck -check-prefix=CHECK1 %s
+# RUN: echo "STACKSIZE 0x3000" > %t.def
+# RUN: lld-link /out:%t.exe /entry:main /def:%t.def %t.obj
+# RUN: llvm-readobj --file-headers %t.exe | FileCheck -check-prefix=CHECK1 %s
 
 CHECK1: SizeOfStackReserve: 12288
 CHECK1: SizeOfStackCommit: 4096
@@ -20,6 +23,9 @@ CHECK1: SizeOfStackCommit: 4096
 # RUN: echo "STACKSIZE 20480,12288" > %t.def
 # RUN: lld-link /out:%t.exe /entry:main /def:%t.def %t.obj
 # RUN: llvm-readobj --file-headers %t.exe | FileCheck -check-prefix=CHECK2 %s
+# RUN: echo "STACKSIZE 0x5000,0x3000" > %t.def
+# RUN: lld-link /out:%t.exe /entry:main /def:%t.def %t.obj
+# RUN: llvm-readobj --file-headers %t.exe | FileCheck -check-prefix=CHECK2 %s
 
 CHECK2: SizeOfStackReserve: 20480
 CHECK2: SizeOfStackCommit: 12288
diff --git a/llvm/lib/Object/COFFModuleDefinition.cpp b/llvm/lib/Object/COFFModuleDefinition.cpp
index 67b0dc4fa2976..f722191da388e 100644
--- a/llvm/lib/Object/COFFModuleDefinition.cpp
+++ b/llvm/lib/Object/COFFModuleDefinition.cpp
@@ -164,7 +164,7 @@ class Parser {
 
   Error readAsInt(uint64_t *I) {
     read();
-    if (Tok.K != Identifier || Tok.Value.getAsInteger(10, *I))
+    if (Tok.K != Identifier || Tok.Value.getAsInteger(0, *I))
       return createError("integer expected");
     return Error::success();
   }



More information about the llvm-commits mailing list