[lld] r175901 - add changes for typeDataFast

Shankar Easwaran shankare at codeaurora.org
Fri Feb 22 09:18:54 PST 2013


Author: shankare
Date: Fri Feb 22 11:18:53 2013
New Revision: 175901

URL: http://llvm.org/viewvc/llvm-project?rev=175901&view=rev
Log:
add changes for typeDataFast

Added:
    lld/trunk/test/elf/Inputs/quickdata-test.elf-hexagon   (with props)
    lld/trunk/test/elf/quickdata.test
Modified:
    lld/trunk/include/lld/Core/DefinedAtom.h
    lld/trunk/lib/Core/DefinedAtom.cpp
    lld/trunk/lib/ReaderWriter/ELF/Atoms.h
    lld/trunk/lib/ReaderWriter/ELF/DefaultLayout.h
    lld/trunk/lib/ReaderWriter/ELF/File.h
    lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h
    lld/trunk/lib/ReaderWriter/ELF/SectionChunks.h
    lld/trunk/lib/ReaderWriter/ELF/TargetHandler.h
    lld/trunk/lib/ReaderWriter/ELF/Writer.cpp
    lld/trunk/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp
    lld/trunk/test/elf/branch.objtxt

Modified: lld/trunk/include/lld/Core/DefinedAtom.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/Core/DefinedAtom.h?rev=175901&r1=175900&r2=175901&view=diff
==============================================================================
--- lld/trunk/include/lld/Core/DefinedAtom.h (original)
+++ lld/trunk/include/lld/Core/DefinedAtom.h Fri Feb 22 11:18:53 2013
@@ -123,6 +123,7 @@ public:
     typeLiteral8,           // an eight-btye read-only constant
     typeLiteral16,          // a sixteen-btye read-only constant
     typeData,               // read-write data
+    typeDataFast,           // allow data to be quickly accessed
     typeZeroFill,           // zero-fill data
     typeConstData,          // read-only data after dynamic linker is done
     typeObjC1Class,         // ObjC1 class [Darwin]

Modified: lld/trunk/lib/Core/DefinedAtom.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Core/DefinedAtom.cpp?rev=175901&r1=175900&r2=175901&view=diff
==============================================================================
--- lld/trunk/lib/Core/DefinedAtom.cpp (original)
+++ lld/trunk/lib/Core/DefinedAtom.cpp Fri Feb 22 11:18:53 2013
@@ -44,6 +44,7 @@ DefinedAtom::ContentPermissions DefinedA
     return permR__;
 
   case typeData:
+  case typeDataFast:
   case typeZeroFill:
   case typeObjC1Class:
   case typeLazyPointer:

Modified: lld/trunk/lib/ReaderWriter/ELF/Atoms.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Atoms.h?rev=175901&r1=175900&r2=175901&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/Atoms.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/Atoms.h Fri Feb 22 11:18:53 2013
@@ -183,7 +183,8 @@ public:
     , _contentData(contentData)
     , _referenceStartIndex(referenceStart)
     , _referenceEndIndex(referenceEnd)
-    , _referenceList(referenceList) {
+    , _referenceList(referenceList)
+    , _targetAtomHandler(nullptr) {
     static uint64_t orderNumber = 0;
     _ordinal = ++orderNumber;
   }
@@ -200,12 +201,28 @@ public:
     return _ordinal;
   }
 
+  const Elf_Sym *symbol() const { return _symbol; }
+
+  const Elf_Shdr *section() const { return _section; }
+
   virtual uint64_t size() const {
     // Common symbols are not allocated in object files,
     // so use st_size to tell how many bytes are required.
-    if ((_symbol->getType() == llvm::ELF::STT_COMMON)
-        || _symbol->st_shndx == llvm::ELF::SHN_COMMON)
-      return (uint64_t)_symbol->st_size;
+   
+    // Treat target defined common symbols 
+    if ((_symbol->st_shndx > llvm::ELF::SHN_LOPROC &&
+         _symbol->st_shndx < llvm::ELF::SHN_HIPROC)) {
+      if (!_targetAtomHandler) {
+        const ELFTargetInfo &eti = (_owningFile.getTargetInfo());
+        TargetHandler<ELFT> &TargetHandler = eti.getTargetHandler<ELFT>();
+        _targetAtomHandler = &TargetHandler.targetAtomHandler();
+      }
+      if (_targetAtomHandler->getType(_symbol) == llvm::ELF::STT_COMMON)
+        return (uint64_t) _symbol->st_size;
+    }
+    if ((_symbol->getType() == llvm::ELF::STT_COMMON) ||
+        _symbol->st_shndx == llvm::ELF::SHN_COMMON)
+      return (uint64_t) _symbol->st_size;
 
     return _contentData.size();
   }
@@ -229,8 +246,22 @@ public:
     if (_symbol->getBinding() == llvm::ELF::STB_WEAK)
       return mergeAsWeak;
 
-    if ((_symbol->getType() == llvm::ELF::STT_COMMON)
-        || _symbol->st_shndx == llvm::ELF::SHN_COMMON)
+    // If the symbol is a target defined and if the target
+    // defines the symbol as a common symbol treat it as 
+    // mergeTentative
+    if ((_symbol->st_shndx > llvm::ELF::SHN_LOPROC &&
+         _symbol->st_shndx < llvm::ELF::SHN_HIPROC)) {
+      if (!_targetAtomHandler) {
+        const ELFTargetInfo &eti = (_owningFile.getTargetInfo());
+        TargetHandler<ELFT> &TargetHandler = eti.getTargetHandler<ELFT>();
+        _targetAtomHandler = &TargetHandler.targetAtomHandler();
+      }
+      if (_targetAtomHandler->getType(_symbol) == llvm::ELF::STT_COMMON)
+        return mergeAsTentative;
+    }
+
+    if ((_symbol->getType() == llvm::ELF::STT_COMMON) ||
+        _symbol->st_shndx == llvm::ELF::SHN_COMMON)
       return mergeAsTentative;
 
     return mergeNo;
@@ -240,15 +271,16 @@ public:
     ContentType ret = typeUnknown;
     uint64_t flags = _section->sh_flags;
 
-    if (_symbol->st_shndx > llvm::ELF::SHN_LOPROC &&
-        _symbol->st_shndx < llvm::ELF::SHN_HIPROC) {
-      const ELFTargetInfo &eti =
-          (_owningFile.getTargetInfo());
-      TargetHandler<ELFT> &TargetHandler =
-          eti.getTargetHandler<ELFT>();
-      TargetAtomHandler<ELFT> &elfAtomHandler =
-          TargetHandler.targetAtomHandler();
-      return elfAtomHandler.contentType(this);
+    // Treat target defined symbols 
+    if ((_section->sh_flags & llvm::ELF::SHF_MASKPROC) ||
+        ((_symbol->st_shndx > llvm::ELF::SHN_LOPROC &&
+          _symbol->st_shndx < llvm::ELF::SHN_HIPROC))) {
+      if (!_targetAtomHandler) {
+        const ELFTargetInfo &eti = (_owningFile.getTargetInfo());
+        TargetHandler<ELFT> &TargetHandler = eti.getTargetHandler<ELFT>();
+        _targetAtomHandler = &TargetHandler.targetAtomHandler();
+      }
+      return _targetAtomHandler->contentType(this);
     }
 
     if (_section->sh_flags ==
@@ -303,8 +335,21 @@ public:
   virtual Alignment alignment() const {
     // Unallocated common symbols specify their alignment constraints in
     // st_value.
-    if ((_symbol->getType() == llvm::ELF::STT_COMMON)
-        || _symbol->st_shndx == llvm::ELF::SHN_COMMON) {
+   
+    // Treat target defined common symbols 
+    if ((_symbol->st_shndx > llvm::ELF::SHN_LOPROC &&
+         _symbol->st_shndx < llvm::ELF::SHN_HIPROC)) {
+      if (!_targetAtomHandler) {
+        const ELFTargetInfo &eti = (_owningFile.getTargetInfo());
+        TargetHandler<ELFT> &TargetHandler = eti.getTargetHandler<ELFT>();
+        _targetAtomHandler = &TargetHandler.targetAtomHandler();
+      }
+      if (_targetAtomHandler->getType(_symbol) == llvm::ELF::STT_COMMON)
+        return Alignment(llvm::Log2_64(_symbol->st_value));
+    }
+
+    if ((_symbol->getType() == llvm::ELF::STT_COMMON) ||
+        _symbol->st_shndx == llvm::ELF::SHN_COMMON) {
       return Alignment(llvm::Log2_64(_symbol->st_value));
     }
     return Alignment(llvm::Log2_64(_section->sh_addralign),
@@ -439,6 +484,8 @@ private:
   unsigned int _referenceStartIndex;
   unsigned int _referenceEndIndex;
   std::vector<ELFReference<ELFT> *> &_referenceList;
+  // Cached size of the TLS segment.
+  mutable TargetAtomHandler<ELFT> *_targetAtomHandler;
 };
 
 /// \brief This atom stores mergeable Strings

Modified: lld/trunk/lib/ReaderWriter/ELF/DefaultLayout.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/DefaultLayout.h?rev=175901&r1=175900&r2=175901&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/DefaultLayout.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/DefaultLayout.h Fri Feb 22 11:18:53 2013
@@ -293,12 +293,13 @@ Layout::SectionOrder DefaultLayout<ELFT>
   
   case DefinedAtom::typeConstant:
     return ORDER_RODATA;
-  
+
   case DefinedAtom::typeData:
+  case DefinedAtom::typeDataFast:
     return llvm::StringSwitch<Reference::Kind>(name)
-      .StartsWith(".init_array", ORDER_INIT_ARRAY)
-      .Default(ORDER_DATA);
-  
+        .StartsWith(".init_array", ORDER_INIT_ARRAY)
+        .Default(ORDER_DATA);
+
   case DefinedAtom::typeZeroFill:
     return ORDER_BSS;
 

Modified: lld/trunk/lib/ReaderWriter/ELF/File.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/File.h?rev=175901&r1=175900&r2=175901&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/File.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/File.h Fri Feb 22 11:18:53 2013
@@ -358,18 +358,16 @@ public:
         bool isCommon = (*si)->getType() == llvm::ELF::STT_COMMON ||
                         (*si)->st_shndx == llvm::ELF::SHN_COMMON;
 
-        DefinedAtom::ContentType c;
-
-        if (((*si)->st_shndx >= llvm::ELF::SHN_LOPROC) &&
-            ((*si)->st_shndx <= llvm::ELF::SHN_HIPROC)) {
+        if ((section && section->sh_flags & llvm::ELF::SHF_MASKPROC) ||
+            (((*si)->st_shndx >= llvm::ELF::SHN_LOPROC) &&
+             ((*si)->st_shndx <= llvm::ELF::SHN_HIPROC))) {
           TargetHandler<ELFT> &TargetHandler =
-              _elfTargetInfo.getTargetHandler<ELFT>();
+              _elfTargetInfo.template getTargetHandler<ELFT>();
           TargetAtomHandler<ELFT> &elfAtomHandler =
               TargetHandler.targetAtomHandler();
-          c = elfAtomHandler.contentType(*si);
+          int64_t targetSymType = elfAtomHandler.getType(*si);
 
-          if (c == DefinedAtom::typeZeroFill ||
-              c == DefinedAtom::typeTLVInitialZeroFill)
+          if (targetSymType == llvm::ELF::STT_COMMON)
             isCommon = true;
         }
 

Modified: lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h?rev=175901&r1=175900&r2=175901&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h Fri Feb 22 11:18:53 2013
@@ -11,6 +11,7 @@
 #define LLD_READER_WRITER_ELF_HEXAGON_TARGET_HANDLER_H
 
 #include "DefaultTargetHandler.h"
+#include "ExecutableAtoms.h"
 #include "HexagonRelocationHandler.h"
 #include "TargetLayout.h"
 
@@ -19,8 +20,64 @@ namespace elf {
 typedef llvm::object::ELFType<llvm::support::little, 4, false> HexagonELFType;
 class HexagonTargetInfo;
 
-class HexagonTargetHandler LLVM_FINAL
-    : public DefaultTargetHandler<HexagonELFType> {
+
+/// \brief Handle Hexagon specific Atoms
+template <class HexagonELFType>
+class HexagonTargetAtomHandler LLVM_FINAL :
+    public TargetAtomHandler<HexagonELFType> {
+  typedef llvm::object::Elf_Sym_Impl<HexagonELFType> Elf_Sym;
+  typedef llvm::object::Elf_Shdr_Impl<HexagonELFType> Elf_Shdr;
+public:
+
+  virtual DefinedAtom::ContentType
+  contentType(const ELFDefinedAtom<HexagonELFType> *atom) const {
+    return contentType(atom->section(), atom->symbol());
+  }
+
+  virtual DefinedAtom::ContentType
+  contentType(const Elf_Shdr *section, const Elf_Sym *sym) const {
+    switch (sym->st_shndx) {
+    // Common symbols
+    case llvm::ELF::SHN_HEXAGON_SCOMMON:
+    case llvm::ELF::SHN_HEXAGON_SCOMMON_1:
+    case llvm::ELF::SHN_HEXAGON_SCOMMON_2:
+    case llvm::ELF::SHN_HEXAGON_SCOMMON_4:
+    case llvm::ELF::SHN_HEXAGON_SCOMMON_8:
+      return DefinedAtom::typeZeroFill;
+
+    default:
+      if (section->sh_flags & llvm::ELF::SHF_HEX_GPREL)
+        return DefinedAtom::typeDataFast;
+      else
+        llvm_unreachable("unknown symbol type");
+    }
+  }
+
+  virtual DefinedAtom::ContentPermissions
+  contentPermissions(const ELFDefinedAtom<HexagonELFType> *atom) const {
+    // All of the hexagon specific symbols belong in the data segment
+    return DefinedAtom::permRW_;
+  }
+
+  virtual int64_t getType(const Elf_Sym *sym) const {
+    switch (sym->st_shndx) {
+    // Common symbols
+    case llvm::ELF::SHN_HEXAGON_SCOMMON:
+    case llvm::ELF::SHN_HEXAGON_SCOMMON_1:
+    case llvm::ELF::SHN_HEXAGON_SCOMMON_2:
+    case llvm::ELF::SHN_HEXAGON_SCOMMON_4:
+    case llvm::ELF::SHN_HEXAGON_SCOMMON_8:
+      return llvm::ELF::STT_COMMON;
+
+    default:
+      return sym->getType();
+    }
+  }
+};
+
+/// \brief TargetHandler for Hexagon 
+class HexagonTargetHandler LLVM_FINAL :
+    public DefaultTargetHandler<HexagonELFType> {
 public:
   HexagonTargetHandler(HexagonTargetInfo &targetInfo);
 
@@ -28,6 +85,10 @@ public:
     return _targetLayout;
   }
 
+  virtual TargetAtomHandler<HexagonELFType> &targetAtomHandler() {
+    return _targetAtomHandler;
+  }
+
   virtual const HexagonTargetRelocationHandler &getRelocationHandler() const {
     return _relocationHandler;
   }
@@ -35,6 +96,7 @@ public:
 private:
   HexagonTargetRelocationHandler _relocationHandler;
   TargetLayout<HexagonELFType> _targetLayout;
+  HexagonTargetAtomHandler<HexagonELFType> _targetAtomHandler;
 };
 } // end namespace elf
 } // end namespace lld

Modified: lld/trunk/lib/ReaderWriter/ELF/SectionChunks.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/SectionChunks.h?rev=175901&r1=175900&r2=175901&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/SectionChunks.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/SectionChunks.h Fri Feb 22 11:18:53 2013
@@ -113,6 +113,7 @@ public:
     this->setOrder(order);
     switch (contentType) {
     case DefinedAtom::typeCode:
+    case DefinedAtom::typeDataFast:
     case DefinedAtom::typeData:
     case DefinedAtom::typeConstant:
     case DefinedAtom::typeGOT:
@@ -153,7 +154,7 @@ public:
   // \brief Append an atom to a Section. The atom gets pushed into a vector
   // contains the atom, the atom file offset, the atom virtual address
   // the atom file offset is aligned appropriately as set by the Reader
-  const AtomLayout &appendAtom(const Atom *atom);
+  virtual const AtomLayout &appendAtom(const Atom *atom);
 
   /// \brief Set the virtual address of each Atom in the Section. This
   /// routine gets called after the linker fixes up the virtual address
@@ -261,6 +262,7 @@ const AtomLayout &AtomSection<ELFT>::app
     case DefinedAtom::typeStub:
     case DefinedAtom::typeResolver:
     case DefinedAtom::typeTLVInitialData:
+    case DefinedAtom::typeDataFast:
       _atoms.push_back(new (_alloc) AtomLayout(atom, fOffset, 0));
       this->_fsize = fOffset + definedAtom->size();
       this->_msize = mOffset + definedAtom->size();
@@ -600,6 +602,7 @@ void SymbolTable<ELFT>::addSymbol(const
       symbol->st_value = addr;
       type = llvm::ELF::STT_GNU_IFUNC;
       break;
+    case DefinedAtom::typeDataFast:
     case DefinedAtom::typeData:
     case DefinedAtom::typeConstant:
     case DefinedAtom::typeGOT:

Modified: lld/trunk/lib/ReaderWriter/ELF/TargetHandler.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/TargetHandler.h?rev=175901&r1=175900&r2=175901&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/TargetHandler.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/TargetHandler.h Fri Feb 22 11:18:53 2013
@@ -44,14 +44,16 @@ template <class ELFT> class TargetLayout
 /// type of atom and its permissions 
 template <class ELFT> class TargetAtomHandler {
 public:
+  typedef llvm::object::Elf_Shdr_Impl<ELFT> Elf_Shdr;
   typedef llvm::object::Elf_Sym_Impl<ELFT> Elf_Sym;
 
-  virtual DefinedAtom::ContentType contentType(
-      const ELFDefinedAtom<ELFT> *atom) const {
+  virtual DefinedAtom::ContentType
+  contentType(const ELFDefinedAtom<ELFT> *atom) const {
     return atom->contentType();
   }
 
-  virtual DefinedAtom::ContentType contentType(const Elf_Sym *sym) const {
+  virtual DefinedAtom::ContentType
+  contentType(const Elf_Shdr *shdr, const Elf_Sym *sym) const {
     return DefinedAtom::typeZeroFill;
   }
 
@@ -60,6 +62,9 @@ public:
     return atom->permissions();
   }
 
+  virtual int64_t getType(const Elf_Sym *sym) const {
+    return llvm::ELF::STT_NOTYPE;
+  }
 };
 
 template <class ELFT> class TargetRelocationHandler {

Modified: lld/trunk/lib/ReaderWriter/ELF/Writer.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Writer.cpp?rev=175901&r1=175900&r2=175901&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/Writer.cpp (original)
+++ lld/trunk/lib/ReaderWriter/ELF/Writer.cpp Fri Feb 22 11:18:53 2013
@@ -235,6 +235,7 @@ template<class ELFT>
 error_code
 ExecutableWriter<ELFT>::writeFile(const File &file, StringRef path) {
   buildChunks(file);
+
   // Create the default sections like the symbol table, string table, and the
   // section string table
   createDefaultSections();

Modified: lld/trunk/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp?rev=175901&r1=175900&r2=175901&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp (original)
+++ lld/trunk/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp Fri Feb 22 11:18:53 2013
@@ -395,14 +395,11 @@ struct ScalarEnumerationTraits<lld::Defi
                           lld::DefinedAtom::typeCode);
     io.enumCase(value, "stub",                
                           lld::DefinedAtom::typeStub);
-    io.enumCase(value, "constant",            
-                          lld::DefinedAtom::typeConstant);
-    io.enumCase(value, "data",                
-                          lld::DefinedAtom::typeData);
-    io.enumCase(value, "zero-fill",           
-                          lld::DefinedAtom::typeZeroFill);
-    io.enumCase(value, "const-data",                 
-                          lld::DefinedAtom::typeConstData);
+    io.enumCase(value, "constant", lld::DefinedAtom::typeConstant);
+    io.enumCase(value, "data", lld::DefinedAtom::typeData);
+    io.enumCase(value, "quick-data", lld::DefinedAtom::typeDataFast);
+    io.enumCase(value, "zero-fill", lld::DefinedAtom::typeZeroFill);
+    io.enumCase(value, "const-data", lld::DefinedAtom::typeConstData);
     io.enumCase(value, "got",                 
                           lld::DefinedAtom::typeGOT);
     io.enumCase(value, "resolver",            

Added: lld/trunk/test/elf/Inputs/quickdata-test.elf-hexagon
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/Inputs/quickdata-test.elf-hexagon?rev=175901&view=auto
==============================================================================
Binary file - no diff available.

Propchange: lld/trunk/test/elf/Inputs/quickdata-test.elf-hexagon
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: lld/trunk/test/elf/branch.objtxt
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/branch.objtxt?rev=175901&r1=175900&r2=175901&view=diff
==============================================================================
--- lld/trunk/test/elf/branch.objtxt (original)
+++ lld/trunk/test/elf/branch.objtxt Fri Feb 22 11:18:53 2013
@@ -1,4 +1,4 @@
-RUN: lld-core -reader ELF %p/Inputs/branch-test.hexagon %p/Inputs/target-test.hexagon | FileCheck %s -check-prefix hexagon-yaml
+RUN: lld-core -arch hexagon -reader ELF %p/Inputs/branch-test.hexagon %p/Inputs/target-test.hexagon | FileCheck %s -check-prefix hexagon-yaml
 RUN: lld-core -arch hexagon -reader ELF -writer ELF -o %t1 %p/Inputs/branch-test.hexagon %p/Inputs/target-test.hexagon
 RUN: elf-dump %t1 |  FileCheck -check-prefix=hexagon-elfdump %s 
 

Added: lld/trunk/test/elf/quickdata.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/quickdata.test?rev=175901&view=auto
==============================================================================
--- lld/trunk/test/elf/quickdata.test (added)
+++ lld/trunk/test/elf/quickdata.test Fri Feb 22 11:18:53 2013
@@ -0,0 +1,14 @@
+RUN: lld-core -arch hexagon -reader ELF %p/Inputs/quickdata-test.elf-hexagon | FileCheck %s -check-prefix hexagon
+
+hexagon:  - name:            init
+hexagon:    scope:           global
+hexagon:    type:            quick-data
+hexagon:  - name:            bss1
+hexagon:    scope:           global
+hexagon:    type:            quick-data
+hexagon:  - name:            ac1
+hexagon:    scope:           global
+hexagon:    type:            zero-fill
+hexagon:    size:            1
+hexagon:    merge:           as-tentative
+hexagon:    permissions:     ---





More information about the llvm-commits mailing list