[llvm-commits] [lld] r167394 - in /lld/trunk: lib/Core/Resolver.cpp lib/ReaderWriter/YAML/ReaderYAML.cpp test/absolute-local.objtxt

Hemant Kulkarni khemant at codeaurora.org
Mon Nov 5 11:13:55 PST 2012


Author: khemant
Date: Mon Nov  5 13:13:54 2012
New Revision: 167394

URL: http://llvm.org/viewvc/llvm-project?rev=167394&view=rev
Log:
Add absolute symbol scope recognition in lld/Core

Added:
    lld/trunk/test/absolute-local.objtxt
Modified:
    lld/trunk/lib/Core/Resolver.cpp
    lld/trunk/lib/ReaderWriter/YAML/ReaderYAML.cpp

Modified: lld/trunk/lib/Core/Resolver.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Core/Resolver.cpp?rev=167394&r1=167393&r2=167394&view=diff
==============================================================================
--- lld/trunk/lib/Core/Resolver.cpp (original)
+++ lld/trunk/lib/Core/Resolver.cpp Mon Nov  5 13:13:54 2012
@@ -151,7 +151,9 @@
   _atoms.push_back(&atom);
 
   // tell symbol table
-  _symbolTable.add(atom);
+  if (atom.scope() != Atom::scopeTranslationUnit) {
+    _symbolTable.add(atom);
+  }
 }
 
 

Modified: lld/trunk/lib/ReaderWriter/YAML/ReaderYAML.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/YAML/ReaderYAML.cpp?rev=167394&r1=167393&r2=167394&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/YAML/ReaderYAML.cpp (original)
+++ lld/trunk/lib/ReaderWriter/YAML/ReaderYAML.cpp Mon Nov  5 13:13:54 2012
@@ -419,10 +419,11 @@
 ///
 class YAMLAbsoluteAtom : public AbsoluteAtom {
 public:
-  YAMLAbsoluteAtom(YAMLFile &f, int32_t, StringRef name, uint64_t v)
+  YAMLAbsoluteAtom(YAMLFile &f, int32_t, StringRef name, uint64_t v, Atom::Scope scope)
     : _file(f)
     , _name(name)
-    , _value(v) {
+    , _value(v) 
+    , _scope(scope){
   }
 
   virtual const class File &file() const {
@@ -430,7 +431,7 @@
   }
 
   virtual Scope scope() const {
-    return scopeGlobal;
+    return _scope;
   }
 
   virtual StringRef name() const {
@@ -445,6 +446,7 @@
   YAMLFile &_file;
   StringRef _name;
   uint64_t  _value;
+  Atom::Scope _scope;
 };
 
 
@@ -779,7 +781,8 @@
                     + "' has attributes only allowed on shared library atoms");
     _error = make_error_code(yaml_reader_error::illegal_value);
   }
-  AbsoluteAtom *a = new YAMLAbsoluteAtom(*_file, _ordinal, _name, _value);
+  AbsoluteAtom *a = new YAMLAbsoluteAtom(*_file, _ordinal, _name, _value, 
+                                         _scope);
   _file->addAbsoluteAtom(a);
 }
 
@@ -939,7 +942,6 @@
     _stream->printError(node, "Invalid value for 'scope:'");
     _error = make_error_code(yaml_reader_error::illegal_value);
   }
-  _hasDefinedAtomAttributes = true;
 }
 
 void YAMLState::parseAtomDefinition(ScalarNode *node) {

Added: lld/trunk/test/absolute-local.objtxt
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/absolute-local.objtxt?rev=167394&view=auto
==============================================================================
--- lld/trunk/test/absolute-local.objtxt (added)
+++ lld/trunk/test/absolute-local.objtxt Mon Nov  5 13:13:54 2012
@@ -0,0 +1,26 @@
+# RUN: lld-core  %s  | FileCheck %s
+
+#
+# Test that absolute symbols with local scope do not cause name conflict
+#
+---
+atoms:
+    - name:              putchar
+      definition:        absolute
+      value:             0xFFFF0040
+      scope:             static
+
+    - name:              putchar
+      definition:        absolute
+      value:             0xFFFF0040
+      scope:             static
+...
+
+# CHECK:      ---
+# CHECK:     - name:         putchar
+# CHECK:       definition:   absolute
+# CHECK:       value:        0xffff0040
+# CHECK:     - name:         putchar
+# CHECK:       definition:   absolute
+# CHECK:       value:        0xffff0040
+# CHECK:       ...





More information about the llvm-commits mailing list