[lld] r184035 - [PECOFF] Handle scope of absolute atom correctly.

Rui Ueyama ruiu at google.com
Fri Jun 14 22:04:07 PDT 2013


Author: ruiu
Date: Sat Jun 15 00:04:07 2013
New Revision: 184035

URL: http://llvm.org/viewvc/llvm-project?rev=184035&view=rev
Log:
[PECOFF] Handle scope of absolute atom correctly.

Added:
    lld/trunk/test/pecoff/Inputs/static-data1.obj
    lld/trunk/test/pecoff/Inputs/static-data2.obj
    lld/trunk/test/pecoff/Inputs/static-main.obj
    lld/trunk/test/pecoff/multi.test
Modified:
    lld/trunk/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp

Modified: lld/trunk/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp?rev=184035&r1=184034&r2=184035&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp (original)
+++ lld/trunk/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp Sat Jun 15 00:04:07 2013
@@ -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);

Added: lld/trunk/test/pecoff/Inputs/static-data1.obj
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/static-data1.obj?rev=184035&view=auto
==============================================================================
Binary files lld/trunk/test/pecoff/Inputs/static-data1.obj (added) and lld/trunk/test/pecoff/Inputs/static-data1.obj Sat Jun 15 00:04:07 2013 differ

Added: lld/trunk/test/pecoff/Inputs/static-data2.obj
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/static-data2.obj?rev=184035&view=auto
==============================================================================
Binary files lld/trunk/test/pecoff/Inputs/static-data2.obj (added) and lld/trunk/test/pecoff/Inputs/static-data2.obj Sat Jun 15 00:04:07 2013 differ

Added: lld/trunk/test/pecoff/Inputs/static-main.obj
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/static-main.obj?rev=184035&view=auto
==============================================================================
Binary files lld/trunk/test/pecoff/Inputs/static-main.obj (added) and lld/trunk/test/pecoff/Inputs/static-main.obj Sat Jun 15 00:04:07 2013 differ

Added: lld/trunk/test/pecoff/multi.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/multi.test?rev=184035&view=auto
==============================================================================
--- lld/trunk/test/pecoff/multi.test (added)
+++ lld/trunk/test/pecoff/multi.test Sat Jun 15 00:04:07 2013
@@ -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





More information about the llvm-commits mailing list