diff options
author | Rui Ueyama <ruiu@google.com> | 2013-06-15 05:04:07 +0000 |
---|---|---|
committer | Rui Ueyama <ruiu@google.com> | 2013-06-15 05:04:07 +0000 |
commit | 779a714766087b5a5cb321596c4fe71bb60eca66 (patch) | |
tree | e227d7cc17478f8cab9bd2e88735684a910ab2bc | |
parent | 40c4f380715c5cec14dde5cefca9930a601fa962 (diff) | |
download | bcm5719-llvm-779a714766087b5a5cb321596c4fe71bb60eca66.tar.gz bcm5719-llvm-779a714766087b5a5cb321596c4fe71bb60eca66.zip |
[PECOFF] Handle scope of absolute atom correctly.
llvm-svn: 184035
-rw-r--r-- | lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp | 12 | ||||
-rw-r--r-- | lld/test/pecoff/Inputs/static-data1.obj | bin | 0 -> 408 bytes | |||
-rw-r--r-- | lld/test/pecoff/Inputs/static-data2.obj | bin | 0 -> 408 bytes | |||
-rw-r--r-- | lld/test/pecoff/Inputs/static-main.obj | bin | 0 -> 568 bytes | |||
-rw-r--r-- | lld/test/pecoff/multi.test | 12 |
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 Binary files differnew file mode 100644 index 00000000000..9e0f831fff1 --- /dev/null +++ b/lld/test/pecoff/Inputs/static-data1.obj diff --git a/lld/test/pecoff/Inputs/static-data2.obj b/lld/test/pecoff/Inputs/static-data2.obj Binary files differnew file mode 100644 index 00000000000..f3ac6c92dac --- /dev/null +++ b/lld/test/pecoff/Inputs/static-data2.obj diff --git a/lld/test/pecoff/Inputs/static-main.obj b/lld/test/pecoff/Inputs/static-main.obj Binary files differnew file mode 100644 index 00000000000..9d0ec24a063 --- /dev/null +++ b/lld/test/pecoff/Inputs/static-main.obj 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 |