[PATCH] D71981: [LLD] [COFF] Don't error out on duplicate absolute symbols with the same value
Martin Storsjö via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Sat Jan 4 02:38:02 PST 2020
This revision was not accepted when it landed; it landed in state "Needs Review".
This revision was automatically updated to reflect the committed changes.
Closed by commit rG1737cc750c46: [LLD] [COFF] Don't error out on duplicate absolute symbols with the same value (authored by mstorsjo).
Changed prior to commit:
https://reviews.llvm.org/D71981?vs=235524&id=236170#toc
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D71981/new/
https://reviews.llvm.org/D71981
Files:
lld/COFF/SymbolTable.cpp
lld/COFF/Symbols.h
lld/test/COFF/duplicate-absolute-same.s
lld/test/COFF/duplicate-absolute.s
Index: lld/test/COFF/duplicate-absolute.s
===================================================================
--- lld/test/COFF/duplicate-absolute.s
+++ lld/test/COFF/duplicate-absolute.s
@@ -1,6 +1,6 @@
// REQUIRES: x86
// RUN: llvm-mc -triple x86_64-windows-msvc -filetype obj -o %t.obj %s
-// RUN: echo -e ".globl myabsolute\nmyabsolute = 0" > %t.dupl.s
+// RUN: echo -e ".globl myabsolute\nmyabsolute = 1" > %t.dupl.s
// RUN: llvm-mc -triple x86_64-windows-msvc -filetype obj -o %t.dupl.obj %t.dupl.s
// RUN: not lld-link /out:%t.exe %t.obj %t.dupl.obj 2>&1 | FileCheck %s
Index: lld/test/COFF/duplicate-absolute-same.s
===================================================================
--- lld/test/COFF/duplicate-absolute-same.s
+++ lld/test/COFF/duplicate-absolute-same.s
@@ -2,9 +2,9 @@
// RUN: llvm-mc -triple x86_64-windows-msvc -filetype obj -o %t.obj %s
// RUN: echo -e ".globl myabsolute\nmyabsolute = 0" > %t.dupl.s
// RUN: llvm-mc -triple x86_64-windows-msvc -filetype obj -o %t.dupl.obj %t.dupl.s
-// RUN: not lld-link /out:%t.exe %t.obj %t.dupl.obj 2>&1 | FileCheck %s
+// RUN: lld-link /out:%t.exe %t.obj %t.dupl.obj -subsystem:console -entry:entry 2>&1 | FileCheck --allow-empty %s
-// CHECK: error: duplicate symbol: myabsolute
+// CHECK-NOT: error: duplicate symbol: myabsolute
.globl myabsolute
myabsolute = 0
Index: lld/COFF/Symbols.h
===================================================================
--- lld/COFF/Symbols.h
+++ lld/COFF/Symbols.h
@@ -229,6 +229,14 @@
uint64_t getRVA() { return va - config->imageBase; }
void setVA(uint64_t v) { va = v; }
+ bool isEqual(COFFSymbolRef s) const {
+ return va == s.getValue();
+ }
+
+ bool isEqual(uint64_t otherVa) const {
+ return va == otherVa;
+ }
+
// Section index relocations against absolute symbols resolve to
// this 16 bit number, and it is the largest valid section index
// plus one. This variable keeps it.
Index: lld/COFF/SymbolTable.cpp
===================================================================
--- lld/COFF/SymbolTable.cpp
+++ lld/COFF/SymbolTable.cpp
@@ -591,7 +591,10 @@
s->isUsedInRegularObj = true;
if (wasInserted || isa<Undefined>(s) || s->isLazy())
replaceSymbol<DefinedAbsolute>(s, n, sym);
- else if (!isa<DefinedCOFF>(s))
+ else if (auto *da = dyn_cast<DefinedAbsolute>(s)) {
+ if (!da->isEqual(sym))
+ reportDuplicate(s, nullptr);
+ } else if (!isa<DefinedCOFF>(s))
reportDuplicate(s, nullptr);
return s;
}
@@ -603,7 +606,10 @@
s->isUsedInRegularObj = true;
if (wasInserted || isa<Undefined>(s) || s->isLazy())
replaceSymbol<DefinedAbsolute>(s, n, va);
- else if (!isa<DefinedCOFF>(s))
+ else if (auto *da = dyn_cast<DefinedAbsolute>(s)) {
+ if (!da->isEqual(va))
+ reportDuplicate(s, nullptr);
+ } else if (!isa<DefinedCOFF>(s))
reportDuplicate(s, nullptr);
return s;
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D71981.236170.patch
Type: text/x-patch
Size: 2887 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200104/4cec99b2/attachment.bin>
More information about the llvm-commits
mailing list