[PATCH] D88801: [LLD] [COFF] Fix parsing version numbers with leading zeros
Martin Storsjö via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Sun Oct 4 12:47:21 PDT 2020
mstorsjo created this revision.
mstorsjo added reviewers: rnk, ruiu, thakis.
Herald added a project: LLVM.
mstorsjo requested review of this revision.
Parse the components as decimal, instead of decuding the base from the string. This avoids ambiguity if the second number contains leading zeros, which previously were parsed as indicating an octal number.
MS link.exe doesn't support hexadecimal numbers in the version numbers, neither in /version nor in /subsystem.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D88801
Files:
lld/COFF/DriverUtils.cpp
lld/test/COFF/subsystem.test
lld/test/COFF/version.test
Index: lld/test/COFF/version.test
===================================================================
--- lld/test/COFF/version.test
+++ lld/test/COFF/version.test
@@ -17,3 +17,9 @@
CHECK2: MajorImageVersion: 11
CHECK2: MinorImageVersion: 22
+
+# RUN: lld-link /out:%t.exe /entry:main %t.obj /version:8.09
+# RUN: llvm-readobj --file-headers %t.exe | FileCheck -check-prefix=CHECK3 %s
+
+CHECK3: MajorImageVersion: 8
+CHECK3: MinorImageVersion: 9
Index: lld/test/COFF/subsystem.test
===================================================================
--- lld/test/COFF/subsystem.test
+++ lld/test/COFF/subsystem.test
@@ -12,6 +12,10 @@
# RUN: %p/Inputs/ret42.obj
# RUN: llvm-readobj --file-headers %t.exe | FileCheck -check-prefix=CHECK2 %s
+# RUN: lld-link /entry:main /out:%t.exe /subsystem:windows,8.09 \
+# RUN: %p/Inputs/ret42.obj
+# RUN: llvm-readobj --file-headers %t.exe | FileCheck -check-prefix=CHECK2 %s
+
CHECK2: MajorOperatingSystemVersion: 8
CHECK2: MinorOperatingSystemVersion: 9
CHECK2: MajorSubsystemVersion: 8
Index: lld/COFF/DriverUtils.cpp
===================================================================
--- lld/COFF/DriverUtils.cpp
+++ lld/COFF/DriverUtils.cpp
@@ -88,10 +88,10 @@
void parseVersion(StringRef arg, uint32_t *major, uint32_t *minor) {
StringRef s1, s2;
std::tie(s1, s2) = arg.split('.');
- if (s1.getAsInteger(0, *major))
+ if (s1.getAsInteger(10, *major))
fatal("invalid number: " + s1);
*minor = 0;
- if (!s2.empty() && s2.getAsInteger(0, *minor))
+ if (!s2.empty() && s2.getAsInteger(10, *minor))
fatal("invalid number: " + s2);
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D88801.296068.patch
Type: text/x-patch
Size: 1616 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20201004/44f679c5/attachment.bin>
More information about the llvm-commits
mailing list