[lld] r189896 - [lld][ELF] Emit note sections

Shankar Easwaran shankare at codeaurora.org
Tue Sep 3 17:51:42 PDT 2013


Author: shankare
Date: Tue Sep  3 19:51:42 2013
New Revision: 189896

URL: http://llvm.org/viewvc/llvm-project?rev=189896&view=rev
Log:
[lld][ELF] Emit note sections

Emit note sections if the input contains a note section.

Also emit a note segment.

Added:
    lld/trunk/test/elf/X86_64/Inputs/note.o
    lld/trunk/test/elf/X86_64/Inputs/note.s
    lld/trunk/test/elf/X86_64/note-sections.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/SectionChunks.h
    lld/trunk/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp

Modified: lld/trunk/include/lld/Core/DefinedAtom.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/Core/DefinedAtom.h?rev=189896&r1=189895&r2=189896&view=diff
==============================================================================
--- lld/trunk/include/lld/Core/DefinedAtom.h (original)
+++ lld/trunk/include/lld/Core/DefinedAtom.h Tue Sep  3 19:51:42 2013
@@ -147,6 +147,7 @@ public:
     typeDataDirectoryEntry, // linker created for data directory header [PECOFF]
     typeThreadZeroFill,     // Uninitialized thread local data(TBSS) [ELF]
     typeThreadData,         // Initialized thread local data(TDATA) [ELF]
+    typeNote,               // Identifies note sections [ELF]
   };
 
   // Permission bits for atoms and segments. The order of these values are

Modified: lld/trunk/lib/Core/DefinedAtom.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Core/DefinedAtom.cpp?rev=189896&r1=189895&r2=189896&view=diff
==============================================================================
--- lld/trunk/lib/Core/DefinedAtom.cpp (original)
+++ lld/trunk/lib/Core/DefinedAtom.cpp Tue Sep  3 19:51:42 2013
@@ -41,6 +41,7 @@ DefinedAtom::ContentPermissions DefinedA
   case typeLiteral16:
   case typeDTraceDOF:
   case typeCompactUnwindInfo:
+  case typeNote:
     return permR__;
 
   case typeData:

Modified: lld/trunk/lib/ReaderWriter/ELF/Atoms.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Atoms.h?rev=189896&r1=189895&r2=189896&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/Atoms.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/Atoms.h Tue Sep  3 19:51:42 2013
@@ -296,6 +296,9 @@ public:
     if (_symbol->st_shndx == llvm::ELF::SHN_COMMON)
       return _contentType = typeZeroFill;
 
+    if (_section->sh_type == llvm::ELF::SHT_NOTE)
+      return _contentType = typeNote;
+
     switch (_section->sh_type) {
     case llvm::ELF::SHT_PROGBITS:
       flags &= ~llvm::ELF::SHF_ALLOC;
@@ -436,6 +439,9 @@ public:
     case llvm::ELF::SHT_FINI_ARRAY:
       return _permissions = permRW_;
 
+    case llvm::ELF::SHT_NOTE:
+      return _permissions = permR__;
+
     default:
       return _permissions = perm___;
     }

Modified: lld/trunk/lib/ReaderWriter/ELF/DefaultLayout.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/DefaultLayout.h?rev=189896&r1=189895&r2=189896&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/DefaultLayout.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/DefaultLayout.h Tue Sep  3 19:51:42 2013
@@ -340,6 +340,9 @@ Layout::SectionOrder DefaultLayout<ELFT>
   case DefinedAtom::typeStub:
     return ORDER_PLT;
 
+  case DefinedAtom::typeNote:
+    return ORDER_NOTE;
+
   case DefinedAtom::typeThreadData:
     return ORDER_TDATA;
   case DefinedAtom::typeThreadZeroFill:

Modified: lld/trunk/lib/ReaderWriter/ELF/SectionChunks.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/SectionChunks.h?rev=189896&r1=189895&r2=189896&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/SectionChunks.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/SectionChunks.h Tue Sep  3 19:51:42 2013
@@ -155,6 +155,10 @@ public:
     case DefinedAtom::typeZeroFill:
       this->_type = SHT_NOBITS;
       break;
+
+    case DefinedAtom::typeNote:
+      this->_type = SHT_NOTE;
+      break;
     }
 
     switch (permissions) {
@@ -281,6 +285,7 @@ const lld::AtomLayout &AtomSection<ELFT>
     case DefinedAtom::typeStub:
     case DefinedAtom::typeResolver:
     case DefinedAtom::typeThreadData:
+    case DefinedAtom::typeNote:
       _atoms.push_back(new (_alloc) lld::AtomLayout(atom, fOffset, 0));
       this->_fsize = fOffset + definedAtom->size();
       this->_msize = mOffset + definedAtom->size();

Modified: lld/trunk/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp?rev=189896&r1=189895&r2=189896&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp (original)
+++ lld/trunk/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp Tue Sep  3 19:51:42 2013
@@ -491,6 +491,7 @@ struct ScalarEnumerationTraits<lld::Defi
                           lld::DefinedAtom::typeThreadData);
     io.enumCase(value, "thread-zero-fill",
                           lld::DefinedAtom::typeThreadZeroFill);
+    io.enumCase(value, "note", lld::DefinedAtom::typeNote);
   }
 };
 

Added: lld/trunk/test/elf/X86_64/Inputs/note.o
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/X86_64/Inputs/note.o?rev=189896&view=auto
==============================================================================
Binary files lld/trunk/test/elf/X86_64/Inputs/note.o (added) and lld/trunk/test/elf/X86_64/Inputs/note.o Tue Sep  3 19:51:42 2013 differ

Added: lld/trunk/test/elf/X86_64/Inputs/note.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/X86_64/Inputs/note.s?rev=189896&view=auto
==============================================================================
--- lld/trunk/test/elf/X86_64/Inputs/note.s (added)
+++ lld/trunk/test/elf/X86_64/Inputs/note.s Tue Sep  3 19:51:42 2013
@@ -0,0 +1,11 @@
+    .section ".note.ident", "a"
+    .p2align 2
+    .long 1f - 0f           # name size (not including padding)
+    .long 3f - 2f           # desc size (not including padding)
+    .long 0x01234567        # type
+0:  .asciz "NaMe"	    # name
+1:  .p2align 2
+2:  .long 0x76543210        # desc
+    .long 0x89abcdef
+3:  .p2align 2
+

Added: lld/trunk/test/elf/X86_64/note-sections.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/X86_64/note-sections.test?rev=189896&view=auto
==============================================================================
--- lld/trunk/test/elf/X86_64/note-sections.test (added)
+++ lld/trunk/test/elf/X86_64/note-sections.test Tue Sep  3 19:51:42 2013
@@ -0,0 +1,23 @@
+# This tests the functionality that lld is able to recreate the note sections
+# if they appear in the input
+
+RUN: lld -flavor gnu -target x86_64-linux %p/Inputs/note.o  \
+RUN: --noinhibit-exec -o %t -static
+RUN: llvm-readobj -sections %t | FileCheck -check-prefix=NOTESECTIONS %s
+RUN: llvm-readobj -program-headers %t | FileCheck -check-prefix=NOTESEGMENT %s
+
+
+NOTESECTIONS:  Section {
+NOTESECTIONS:    Index: 1
+NOTESECTIONS:    Name: .note.ident (1)
+NOTESECTIONS:    Type: SHT_NOTE (0x7)
+NOTESECTIONS:    Size: 28
+NOTESECTIONS:    AddressAlignment: 4
+NOTESECTIONS:  }
+
+NOTESEGMENT:  ProgramHeader {
+NOTESEGMENT:    Type: PT_NOTE (0x4)
+NOTESEGMENT:    FileSize: 28
+NOTESEGMENT:    MemSize: 28
+NOTESEGMENT:    Alignment: 4
+NOTESEGMENT:  }





More information about the llvm-commits mailing list