summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp12
-rw-r--r--lld/test/pecoff/Inputs/static-data1.objbin0 -> 408 bytes
-rw-r--r--lld/test/pecoff/Inputs/static-data2.objbin0 -> 408 bytes
-rw-r--r--lld/test/pecoff/Inputs/static-main.objbin0 -> 568 bytes
-rw-r--r--lld/test/pecoff/multi.test12
5 files changed, 19 insertions, 5 deletions
diff --git a/lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp b/lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp
index 277d47de62c..2fae0a4094f 100644
--- a/lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp
+++ b/lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp
@@ -64,10 +64,10 @@ private:
class COFFAbsoluteAtom : public AbsoluteAtom {
public:
- COFFAbsoluteAtom(const File &F, llvm::StringRef N, uint64_t V)
+ COFFAbsoluteAtom(const File &F, llvm::StringRef N, const coff_symbol *S)
: OwningFile(F)
, Name(N)
- , Value(V)
+ , Symbol(S)
{}
virtual const class File &file() const {
@@ -75,6 +75,8 @@ public:
}
virtual Scope scope() const {
+ if (Symbol->StorageClass == llvm::COFF::IMAGE_SYM_CLASS_STATIC)
+ return scopeTranslationUnit;
return scopeGlobal;
}
@@ -83,13 +85,13 @@ public:
}
virtual uint64_t value() const {
- return Value;
+ return Symbol->Value;
}
private:
const File &OwningFile;
llvm::StringRef Name;
- uint64_t Value;
+ const coff_symbol *Symbol;
};
class COFFUndefinedAtom : public UndefinedAtom {
@@ -341,7 +343,7 @@ private:
// Create an absolute atom.
if (SectionIndex == llvm::COFF::IMAGE_SYM_ABSOLUTE) {
auto *atom = new (AtomStorage.Allocate<COFFAbsoluteAtom>())
- COFFAbsoluteAtom(*this, Name, Symb->Value);
+ COFFAbsoluteAtom(*this, Name, Symb);
if (!Name.empty())
symbolToAtom[Name] = atom;
absoluteAtoms.push_back(atom);
diff --git a/lld/test/pecoff/Inputs/static-data1.obj b/lld/test/pecoff/Inputs/static-data1.obj
new file mode 100644
index 00000000000..9e0f831fff1
--- /dev/null
+++ b/lld/test/pecoff/Inputs/static-data1.obj
Binary files differ
diff --git a/lld/test/pecoff/Inputs/static-data2.obj b/lld/test/pecoff/Inputs/static-data2.obj
new file mode 100644
index 00000000000..f3ac6c92dac
--- /dev/null
+++ b/lld/test/pecoff/Inputs/static-data2.obj
Binary files differ
diff --git a/lld/test/pecoff/Inputs/static-main.obj b/lld/test/pecoff/Inputs/static-main.obj
new file mode 100644
index 00000000000..9d0ec24a063
--- /dev/null
+++ b/lld/test/pecoff/Inputs/static-main.obj
Binary files differ
diff --git a/lld/test/pecoff/multi.test b/lld/test/pecoff/multi.test
new file mode 100644
index 00000000000..5efaf252f0e
--- /dev/null
+++ b/lld/test/pecoff/multi.test
@@ -0,0 +1,12 @@
+# Verify that lld can handle multiple input files.
+#
+# RUN: lld -flavor link -out %t1 -subsystem console \
+# RUN: -- %p/Inputs/static-main.obj %p/Inputs/static-data1.obj \
+# RUN: %p/Inputs/static-data2.obj \
+# RUN: && llvm-objdump -d %t1 | FileCheck %s
+
+CHECK: Disassembly of section .text:
+CHECK: .text:
+CHECK: 1000: a1 00 00 00 00
+CHECK: 1005: 03 05 00 00 00 00
+CHECK: 100b: c3
OpenPOWER on IntegriCloud