[lld] r193662 - [ELF] Implement minimal support for .eh_frame_hdr.

Nick Kledzik kledzik at apple.com
Tue Oct 29 18:02:33 PDT 2013


On Oct 29, 2013, at 5:45 PM, Shankar Easwaran <shankare at codeaurora.org> wrote:
> We were also discussing on IRC, that if this should be done by the reader by having each atom refer to a FDE entry that belongs to a PC range.
> 
> This way the garbage collection would also be consistent ?
Well, the eh_frame_hdr is an index.  You need to build it after the Resolver is done (dead stripping (aka GC)) and after the layout pass which orders some atoms.


> What do you think ? I thought ld64 does this and the writer creates compact unwind information ?
Darwin has a different kind of index section (__unwind_info).  In ld64, a Pass creates a big atom with references to all the functions with unwind info.  The final mach-o write does not know anything about the __unwind_info section.  It just writes it out and applies the fixups in the references.

-Nick


> On 10/29/2013 7:39 PM, Nick Kledzik wrote:
>> This could also be modeled as a Pass which looks for FDE atoms and creates a big index atom which has a custom section named .eh_frame_hdr.  The big atom has references to each FDE atom, which are fixed up by normal processing.
>> 
>> -Nick
>> 
>> On Oct 29, 2013, at 5:02 PM, Michael J. Spencer <bigcheesegs at gmail.com> wrote:
>>> Author: mspencer
>>> Date: Tue Oct 29 19:02:04 2013
>>> New Revision: 193662
>>> 
>>> URL: http://llvm.org/viewvc/llvm-project?rev=193662&view=rev
>>> Log:
>>> [ELF] Implement minimal support for .eh_frame_hdr.
>>> 
>>> Added:
>>>    lld/trunk/test/elf/eh_frame_hdr.test
>>> Modified:
>>>    lld/trunk/lib/ReaderWriter/ELF/DefaultLayout.h
>>>    lld/trunk/lib/ReaderWriter/ELF/OutputELFWriter.h
>>>    lld/trunk/lib/ReaderWriter/ELF/SectionChunks.h
>>>    lld/trunk/test/elf/X86_64/debug.test
>>>    lld/trunk/test/elf/X86_64/layoutpass-order.test
>>>    lld/trunk/test/elf/X86_64/omagic.test
>>>    lld/trunk/test/elf/X86_64/underscore-end.test
>>>    lld/trunk/test/elf/X86_64/yamlinput.test
>>>    lld/trunk/test/elf/entry.objtxt
>>>    lld/trunk/test/elf/ifunc.test
>>>    lld/trunk/test/elf/phdr.test
>>>    lld/trunk/test/elf/symbols.test
>>> 
>>> Modified: lld/trunk/lib/ReaderWriter/ELF/DefaultLayout.h
>>> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/DefaultLayout.h?rev=193662&r1=193661&r2=193662&view=diff
>>> ==============================================================================
>>> --- lld/trunk/lib/ReaderWriter/ELF/DefaultLayout.h (original)
>>> +++ lld/trunk/lib/ReaderWriter/ELF/DefaultLayout.h Tue Oct 29 19:02:04 2013
>>> @@ -439,7 +439,6 @@ Layout::SegmentType DefaultLayout<ELFT>:
>>>   case ORDER_FINI:
>>>   case ORDER_RODATA:
>>>   case ORDER_EH_FRAME:
>>> -  case ORDER_EH_FRAMEHDR:
>>>     return llvm::ELF::PT_LOAD;
>>> 
>>>   case ORDER_RO_NOTE:
>>> @@ -453,6 +452,9 @@ Layout::SegmentType DefaultLayout<ELFT>:
>>>   case ORDER_DTORS:
>>>     return llvm::ELF::PT_GNU_RELRO;
>>> 
>>> +  case ORDER_EH_FRAMEHDR:
>>> +    return llvm::ELF::PT_GNU_EH_FRAME;
>>> +
>>>   case ORDER_GOT:
>>>   case ORDER_GOT_PLT:
>>>   case ORDER_DATA:
>>> 
>>> Modified: lld/trunk/lib/ReaderWriter/ELF/OutputELFWriter.h
>>> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/OutputELFWriter.h?rev=193662&r1=193661&r2=193662&view=diff
>>> ==============================================================================
>>> --- lld/trunk/lib/ReaderWriter/ELF/OutputELFWriter.h (original)
>>> +++ lld/trunk/lib/ReaderWriter/ELF/OutputELFWriter.h Tue Oct 29 19:02:04 2013
>>> @@ -105,6 +105,7 @@ protected:
>>>   LLD_UNIQUE_BUMP_PTR(StringTable<ELFT>) _strtab;
>>>   LLD_UNIQUE_BUMP_PTR(StringTable<ELFT>) _shstrtab;
>>>   LLD_UNIQUE_BUMP_PTR(SectionHeader<ELFT>) _shdrtab;
>>> +  LLD_UNIQUE_BUMP_PTR(EHFrameHeader<ELFT>) _ehFrameHeader;
>>>   /// \name Dynamic sections.
>>>   /// @{
>>>   LLD_UNIQUE_BUMP_PTR(DynamicTable<ELFT>) _dynamicTable;
>>> @@ -267,6 +268,15 @@ template <class ELFT> void OutputELFWrit
>>>   _symtab->setStringSection(_strtab.get());
>>>   _layout->addSection(_shdrtab.get());
>>> 
>>> +  for (auto sec : _layout->sections()) {
>>> +    if (sec->name() != ".eh_frame")
>>> +      continue;
>>> +    _ehFrameHeader.reset(new (_alloc) EHFrameHeader<ELFT>(
>>> +        _context, ".eh_frame_hdr", DefaultLayout<ELFT>::ORDER_EH_FRAMEHDR));
>>> +    _layout->addSection(_ehFrameHeader.get());
>>> +    break;
>>> +  }
>>> +
>>>   if (_context.isDynamic()) {
>>>     _dynamicTable.reset(new (_alloc) DynamicTable<ELFT>(
>>>         _context, ".dynamic", DefaultLayout<ELFT>::ORDER_DYNAMIC));
>>> 
>>> Modified: lld/trunk/lib/ReaderWriter/ELF/SectionChunks.h
>>> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/SectionChunks.h?rev=193662&r1=193661&r2=193662&view=diff
>>> ==============================================================================
>>> --- lld/trunk/lib/ReaderWriter/ELF/SectionChunks.h (original)
>>> +++ lld/trunk/lib/ReaderWriter/ELF/SectionChunks.h Tue Oct 29 19:02:04 2013
>>> @@ -26,6 +26,7 @@
>>> #include "llvm/Object/ELF.h"
>>> #include "llvm/Support/Allocator.h"
>>> #include "llvm/Support/Debug.h"
>>> +#include "llvm/Support/Dwarf.h"
>>> #include "llvm/Support/ELF.h"
>>> #include "llvm/Support/ErrorHandling.h"
>>> #include "llvm/Support/FileOutputBuffer.h"
>>> @@ -1284,6 +1285,52 @@ private:
>>>   std::vector<uint32_t> _chains;
>>>   const DynamicSymbolTable<ELFT> *_symbolTable;
>>> };
>>> +
>>> +template <class ELFT> class EHFrameHeader : public Section<ELFT> {
>>> +public:
>>> +  EHFrameHeader(const ELFLinkingContext &context, StringRef name, int32_t order)
>>> +      : Section<ELFT>(context, name) {
>>> +    this->setOrder(order);
>>> +    this->_entSize = 0;
>>> +    this->_type = SHT_PROGBITS;
>>> +    this->_flags = SHF_ALLOC;
>>> +    // Set the alignment properly depending on the target architecture
>>> +    if (context.is64Bits())
>>> +      this->_align2 = 8;
>>> +    else
>>> +      this->_align2 = 4;
>>> +    // Minimum size for empty .eh_frame_hdr.
>>> +    this->_fsize = 1 + 1 + 1 + 1 + 4;
>>> +    this->_msize = this->_fsize;
>>> +  }
>>> +
>>> +  virtual void doPreFlight() LLVM_OVERRIDE {
>>> +    // TODO: Generate a proper binary search table.
>>> +  }
>>> +
>>> +  virtual void finalize() LLVM_OVERRIDE {
>>> +    MergedSections<ELFT> *s = this->_context.template getTargetHandler<ELFT>()
>>> +                                  .targetLayout()
>>> +                                  .findOutputSection(".eh_frame");
>>> +    _ehFrameAddr = s ? s->virtualAddr() : 0;
>>> +  }
>>> +
>>> +  virtual void write(ELFWriter *writer,
>>> +                     llvm::FileOutputBuffer &buffer) LLVM_OVERRIDE {
>>> +    uint8_t *chunkBuffer = buffer.getBufferStart();
>>> +    uint8_t *dest = chunkBuffer + this->fileOffset();
>>> +    int pos = 0;
>>> +    dest[pos++] = 1; // version
>>> +    dest[pos++] = llvm::dwarf::DW_EH_PE_udata4; // eh_frame_ptr_enc
>>> +    dest[pos++] = llvm::dwarf::DW_EH_PE_omit; // fde_count_enc
>>> +    dest[pos++] = llvm::dwarf::DW_EH_PE_omit; // table_enc
>>> +    *reinterpret_cast<typename llvm::object::ELFFile<ELFT>::Elf_Word *>(
>>> +         dest + pos) = (uint32_t)_ehFrameAddr;
>>> +  }
>>> +
>>> +private:
>>> +  uint64_t _ehFrameAddr;
>>> +};
>>> } // end namespace elf
>>> } // end namespace lld
>>> 
>>> 
>>> Modified: lld/trunk/test/elf/X86_64/debug.test
>>> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/X86_64/debug.test?rev=193662&r1=193661&r2=193662&view=diff
>>> ==============================================================================
>>> --- lld/trunk/test/elf/X86_64/debug.test (original)
>>> +++ lld/trunk/test/elf/X86_64/debug.test Tue Oct 29 19:02:04 2013
>>> @@ -51,7 +51,7 @@ ELF: }
>>> RELOC: Contents of section .debug_info:
>>> RELOC:  0000 4e000000 04000000 00000801 3a000000  N...........:...
>>> #                                       ^^ Relocation: ._debug_str + 0x3a
>>> -RELOC:  0010 01780000 00000000 00a40140 00000000  .x......... at ....
>>> +RELOC:  0010 01780000 00000000 00dc0140 00000000  .x......... at ....
>>> #              ^^ Relocation: .debug_str + 0x78
>>> RELOC:  0020 00100000 00000000 00000000 00028100  ................
>>> #                                           ^^ Relocation: .debug_str + 0x81
>>> 
>>> Modified: lld/trunk/test/elf/X86_64/layoutpass-order.test
>>> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/X86_64/layoutpass-order.test?rev=193662&r1=193661&r2=193662&view=diff
>>> ==============================================================================
>>> --- lld/trunk/test/elf/X86_64/layoutpass-order.test (original)
>>> +++ lld/trunk/test/elf/X86_64/layoutpass-order.test Tue Oct 29 19:02:04 2013
>>> @@ -7,8 +7,8 @@ RUN: --noinhibit-exec -static
>>> 
>>> RUN: llvm-nm -n %t | FileCheck -check-prefix=SYMBOLSORDER %s
>>> 
>>> -SYMBOLSORDER: 004000b0 T main
>>> -SYMBOLSORDER: 004000c5 T b
>>> -SYMBOLSORDER: 004000d0 T a
>>> -SYMBOLSORDER: 004000db T c
>>> -SYMBOLSORDER: 004000e8 T d
>>> +SYMBOLSORDER: {{[A-Fa-f0-9]+}} T main
>>> +SYMBOLSORDER: {{[A-Fa-f0-9]+}} T b
>>> +SYMBOLSORDER: {{[A-Fa-f0-9]+}} T a
>>> +SYMBOLSORDER: {{[A-Fa-f0-9]+}} T c
>>> +SYMBOLSORDER: {{[A-Fa-f0-9]+}} T d
>>> 
>>> Modified: lld/trunk/test/elf/X86_64/omagic.test
>>> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/X86_64/omagic.test?rev=193662&r1=193661&r2=193662&view=diff
>>> ==============================================================================
>>> --- lld/trunk/test/elf/X86_64/omagic.test (original)
>>> +++ lld/trunk/test/elf/X86_64/omagic.test Tue Oct 29 19:02:04 2013
>>> @@ -26,8 +26,8 @@ OMAGICSECTIONS:    Flags [ (0x6)
>>> OMAGICSECTIONS:      SHF_ALLOC (0x2)
>>> OMAGICSECTIONS:      SHF_EXECINSTR (0x4)
>>> OMAGICSECTIONS:    ]
>>> -OMAGICSECTIONS:    Address: 0x4000B0
>>> -OMAGICSECTIONS:    Offset: 0xB0
>>> +OMAGICSECTIONS:    Address: 0x4000E8
>>> +OMAGICSECTIONS:    Offset: 0xE8
>>> OMAGICSECTIONS:    Size: 11
>>> OMAGICSECTIONS:    Link: 0
>>> OMAGICSECTIONS:    Info: 0
>>> @@ -40,8 +40,8 @@ OMAGICSECTIONS:    Type: SHT_PROGBITS (0
>>> OMAGICSECTIONS:    Flags [ (0x2)
>>> OMAGICSECTIONS:      SHF_ALLOC (0x2)
>>> OMAGICSECTIONS:    ]
>>> -OMAGICSECTIONS:    Address: 0x4000C0
>>> -OMAGICSECTIONS:    Offset: 0xC0
>>> +OMAGICSECTIONS:    Address: 0x4000F8
>>> +OMAGICSECTIONS:    Offset: 0xF8
>>> OMAGICSECTIONS:    Size: 56
>>> OMAGICSECTIONS:    Link: 0
>>> OMAGICSECTIONS:    Info: 0
>>> @@ -49,6 +49,20 @@ OMAGICSECTIONS:    AddressAlignment: 8
>>> OMAGICSECTIONS:    EntrySize: 0
>>> OMAGICSECTIONS:  }
>>> OMAGICSECTIONS:  Section {
>>> +OMAGICSECTIONS:    Name: .eh_frame_hdr
>>> +OMAGICSECTIONS:    Type: SHT_PROGBITS (0x1)
>>> +OMAGICSECTIONS:    Flags [ (0x2)
>>> +OMAGICSECTIONS:      SHF_ALLOC (0x2)
>>> +OMAGICSECTIONS:    ]
>>> +OMAGICSECTIONS:    Address: 0x400130
>>> +OMAGICSECTIONS:    Offset: 0x130
>>> +OMAGICSECTIONS:    Size: 8
>>> +OMAGICSECTIONS:    Link: 0
>>> +OMAGICSECTIONS:    Info: 0
>>> +OMAGICSECTIONS:    AddressAlignment: 8
>>> +OMAGICSECTIONS:    EntrySize: 0
>>> +OMAGICSECTIONS:  }
>>> +OMAGICSECTIONS:  Section {
>>> OMAGICSECTIONS:    Name: .tdata
>>> OMAGICSECTIONS:    Type: SHT_PROGBITS (0x1)
>>> OMAGICSECTIONS:    Flags [ (0x403)
>>> @@ -56,8 +70,8 @@ OMAGICSECTIONS:      SHF_ALLOC (0x2)
>>> OMAGICSECTIONS:      SHF_TLS (0x400)
>>> OMAGICSECTIONS:      SHF_WRITE (0x1)
>>> OMAGICSECTIONS:    ]
>>> -OMAGICSECTIONS:    Address: 0x4000F8
>>> -OMAGICSECTIONS:    Offset: 0xF8
>>> +OMAGICSECTIONS:    Address: 0x400138
>>> +OMAGICSECTIONS:    Offset: 0x138
>>> OMAGICSECTIONS:    Size: 4
>>> OMAGICSECTIONS:    Link: 0
>>> OMAGICSECTIONS:    Info: 0
>>> @@ -72,8 +86,8 @@ OMAGICSECTIONS:      SHF_ALLOC (0x2)
>>> OMAGICSECTIONS:      SHF_TLS (0x400)
>>> OMAGICSECTIONS:      SHF_WRITE (0x1)
>>> OMAGICSECTIONS:    ]
>>> -OMAGICSECTIONS:    Address: 0x4000FC
>>> -OMAGICSECTIONS:    Offset: 0xFC
>>> +OMAGICSECTIONS:    Address: 0x40013C
>>> +OMAGICSECTIONS:    Offset: 0x13C
>>> OMAGICSECTIONS:    Size: 8
>>> OMAGICSECTIONS:    Link: 0
>>> OMAGICSECTIONS:    Info: 0
>>> @@ -87,8 +101,8 @@ OMAGICSECTIONS:    Flags [ (0x3)
>>> OMAGICSECTIONS:      SHF_ALLOC (0x2)
>>> OMAGICSECTIONS:      SHF_WRITE (0x1)
>>> OMAGICSECTIONS:    ]
>>> -OMAGICSECTIONS:    Address: 0x400100
>>> -OMAGICSECTIONS:    Offset: 0x100
>>> +OMAGICSECTIONS:    Address: 0x400140
>>> +OMAGICSECTIONS:    Offset: 0x140
>>> OMAGICSECTIONS:    Size: 0
>>> OMAGICSECTIONS:    Link: 0
>>> OMAGICSECTIONS:    Info: 0
>>> @@ -102,8 +116,8 @@ OMAGICSECTIONS:    Flags [ (0x3)
>>> OMAGICSECTIONS:      SHF_ALLOC (0x2)
>>> OMAGICSECTIONS:      SHF_WRITE (0x1)
>>> OMAGICSECTIONS:    ]
>>> -OMAGICSECTIONS:    Address: 0x400100
>>> -OMAGICSECTIONS:    Offset: 0x100
>>> +OMAGICSECTIONS:    Address: 0x400140
>>> +OMAGICSECTIONS:    Offset: 0x140
>>> OMAGICSECTIONS:    Size: 4
>>> OMAGICSECTIONS:    Link: 0
>>> OMAGICSECTIONS:    Info: 0
>>> @@ -117,8 +131,8 @@ OMAGICSECTIONS:    Flags [ (0x3)
>>> OMAGICSECTIONS:      SHF_ALLOC (0x2)
>>> OMAGICSECTIONS:      SHF_WRITE (0x1)
>>> OMAGICSECTIONS:    ]
>>> -OMAGICSECTIONS:    Address: 0x400104
>>> -OMAGICSECTIONS:    Offset: 0x104
>>> +OMAGICSECTIONS:    Address: 0x400144
>>> +OMAGICSECTIONS:    Offset: 0x144
>>> OMAGICSECTIONS:    Size: 0
>>> OMAGICSECTIONS:    Link: 0
>>> OMAGICSECTIONS:    Info: 0
>>> @@ -131,7 +145,7 @@ OMAGICSECTIONS:    Type: SHT_PROGBITS (0
>>> OMAGICSECTIONS:    Flags [ (0x0)
>>> OMAGICSECTIONS:    ]
>>> OMAGICSECTIONS:    Address: 0x0
>>> -OMAGICSECTIONS:    Offset: 0x104
>>> +OMAGICSECTIONS:    Offset: 0x144
>>> OMAGICSECTIONS:    Size: 43
>>> OMAGICSECTIONS:    Link: 0
>>> OMAGICSECTIONS:    Info: 0
>>> @@ -144,7 +158,7 @@ OMAGICSECTIONS:    Type: SHT_PROGBITS (0
>>> OMAGICSECTIONS:    Flags [ (0x0)
>>> OMAGICSECTIONS:    ]
>>> OMAGICSECTIONS:    Address: 0x0
>>> -OMAGICSECTIONS:    Offset: 0x12F
>>> +OMAGICSECTIONS:    Offset: 0x16F
>>> OMAGICSECTIONS:    Size: 0
>>> OMAGICSECTIONS:    Link: 0
>>> OMAGICSECTIONS:    Info: 0
>>> @@ -157,8 +171,8 @@ OMAGICSECTIONS:    Type: SHT_STRTAB (0x3
>>> OMAGICSECTIONS:    Flags [ (0x0)
>>> OMAGICSECTIONS:    ]
>>> OMAGICSECTIONS:    Address: 0x0
>>> -OMAGICSECTIONS:    Offset: 0x12F
>>> -OMAGICSECTIONS:    Size: 101
>>> +OMAGICSECTIONS:    Offset: 0x16F
>>> +OMAGICSECTIONS:    Size: 115
>>> OMAGICSECTIONS:    Link: 0
>>> OMAGICSECTIONS:    Info: 0
>>> OMAGICSECTIONS:    AddressAlignment: 1
>>> @@ -170,9 +184,9 @@ OMAGICSECTIONS:    Type: SHT_SYMTAB (0x2
>>> OMAGICSECTIONS:    Flags [ (0x0)
>>> OMAGICSECTIONS:    ]
>>> OMAGICSECTIONS:    Address: 0x0
>>> -OMAGICSECTIONS:    Offset: 0x198
>>> +OMAGICSECTIONS:    Offset: 0x1E8
>>> OMAGICSECTIONS:    Size: 528
>>> -OMAGICSECTIONS:    Link: 12
>>> +OMAGICSECTIONS:    Link: 13
>>> OMAGICSECTIONS:    Info: 2
>>> OMAGICSECTIONS:    AddressAlignment: 8
>>> OMAGICSECTIONS:    EntrySize: 24
>>> @@ -183,13 +197,14 @@ OMAGICSECTIONS:    Type: SHT_STRTAB (0x3
>>> OMAGICSECTIONS:    Flags [ (0x0)
>>> OMAGICSECTIONS:    ]
>>> OMAGICSECTIONS:    Address: 0x0
>>> -OMAGICSECTIONS:    Offset: 0x3A8
>>> +OMAGICSECTIONS:    Offset: 0x3F8
>>> OMAGICSECTIONS:    Size: 246
>>> OMAGICSECTIONS:    Link: 0
>>> OMAGICSECTIONS:    Info: 0
>>> OMAGICSECTIONS:    AddressAlignment: 1
>>> OMAGICSECTIONS:    EntrySize: 0
>>> OMAGICSECTIONS:  }
>>> +OMAGICSECTIONS:  ]
>>> 
>>> OMAGICPROGRAMHEADERS: ProgramHeaders [
>>> OMAGICPROGRAMHEADERS:   ProgramHeader {
>>> @@ -197,8 +212,8 @@ OMAGICPROGRAMHEADERS:     Type: PT_LOAD
>>> OMAGICPROGRAMHEADERS:     Offset: 0x0
>>> OMAGICPROGRAMHEADERS:     VirtualAddress: 0x400000
>>> OMAGICPROGRAMHEADERS:     PhysicalAddress: 0x400000
>>> -OMAGICPROGRAMHEADERS:     FileSize: 260
>>> -OMAGICPROGRAMHEADERS:     MemSize: 260
>>> +OMAGICPROGRAMHEADERS:     FileSize: 324
>>> +OMAGICPROGRAMHEADERS:     MemSize: 324
>>> OMAGICPROGRAMHEADERS:     Flags [ (0x7)
>>> OMAGICPROGRAMHEADERS:       PF_R (0x4)
>>> OMAGICPROGRAMHEADERS:       PF_W (0x2)
>>> @@ -208,9 +223,9 @@ OMAGICPROGRAMHEADERS:     Alignment: 8
>>> OMAGICPROGRAMHEADERS:   }
>>> OMAGICPROGRAMHEADERS:   ProgramHeader {
>>> OMAGICPROGRAMHEADERS:     Type: PT_TLS (0x7)
>>> -OMAGICPROGRAMHEADERS:     Offset: 0xF8
>>> -OMAGICPROGRAMHEADERS:     VirtualAddress: 0x4000F8
>>> -OMAGICPROGRAMHEADERS:     PhysicalAddress: 0x4000F8
>>> +OMAGICPROGRAMHEADERS:     Offset: 0x138
>>> +OMAGICPROGRAMHEADERS:     VirtualAddress: 0x400138
>>> +OMAGICPROGRAMHEADERS:     PhysicalAddress: 0x400138
>>> OMAGICPROGRAMHEADERS:     FileSize: 4
>>> OMAGICPROGRAMHEADERS:     MemSize: 12
>>> OMAGICPROGRAMHEADERS:     Flags [ (0x6)
>>> 
>>> Modified: lld/trunk/test/elf/X86_64/underscore-end.test
>>> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/X86_64/underscore-end.test?rev=193662&r1=193661&r2=193662&view=diff
>>> ==============================================================================
>>> --- lld/trunk/test/elf/X86_64/underscore-end.test (original)
>>> +++ lld/trunk/test/elf/X86_64/underscore-end.test Tue Oct 29 19:02:04 2013
>>> @@ -45,7 +45,7 @@ NMAGICABSSYMBOLS:  }
>>> 
>>> OMAGICABSSYMBOLS:  Symbol {
>>> OMAGICABSSYMBOLS:    Name: __bss_start (51)
>>> -OMAGICABSSYMBOLS:    Value: 0x400104
>>> +OMAGICABSSYMBOLS:    Value: 0x400144
>>> OMAGICABSSYMBOLS:    Size: 0
>>> OMAGICABSSYMBOLS:    Binding: Global (0x1)
>>> OMAGICABSSYMBOLS:    Type: Object (0x1)
>>> @@ -54,7 +54,7 @@ OMAGICABSSYMBOLS:    Section:  (0xFFF1)
>>> OMAGICABSSYMBOLS:  }
>>> OMAGICABSSYMBOLS:  Symbol {
>>> OMAGICABSSYMBOLS:    Name: __bss_end (63)
>>> -OMAGICABSSYMBOLS:    Value: 0x400104
>>> +OMAGICABSSYMBOLS:    Value: 0x400144
>>> OMAGICABSSYMBOLS:    Size: 0
>>> OMAGICABSSYMBOLS:    Binding: Global (0x1)
>>> OMAGICABSSYMBOLS:    Type: Object (0x1)
>>> @@ -63,7 +63,7 @@ OMAGICABSSYMBOLS:    Section:  (0xFFF1)
>>> OMAGICABSSYMBOLS:  }
>>> OMAGICABSSYMBOLS:  Symbol {
>>> OMAGICABSSYMBOLS:    Name: _end (73)
>>> -OMAGICABSSYMBOLS:    Value: 0x400104
>>> +OMAGICABSSYMBOLS:    Value: 0x400144
>>> OMAGICABSSYMBOLS:    Size: 0
>>> OMAGICABSSYMBOLS:    Binding: Global (0x1)
>>> OMAGICABSSYMBOLS:    Type: Object (0x1)
>>> @@ -72,7 +72,7 @@ OMAGICABSSYMBOLS:    Section:  (0xFFF1)
>>> OMAGICABSSYMBOLS:  }
>>> OMAGICABSSYMBOLS:  Symbol {
>>> OMAGICABSSYMBOLS:    Name: end (78)
>>> -OMAGICABSSYMBOLS:    Value: 0x400104
>>> +OMAGICABSSYMBOLS:    Value: 0x400144
>>> OMAGICABSSYMBOLS:    Size: 0
>>> OMAGICABSSYMBOLS:    Binding: Global (0x1)
>>> OMAGICABSSYMBOLS:    Type: Object (0x1)
>>> 
>>> Modified: lld/trunk/test/elf/X86_64/yamlinput.test
>>> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/X86_64/yamlinput.test?rev=193662&r1=193661&r2=193662&view=diff
>>> ==============================================================================
>>> --- lld/trunk/test/elf/X86_64/yamlinput.test (original)
>>> +++ lld/trunk/test/elf/X86_64/yamlinput.test Tue Oct 29 19:02:04 2013
>>> @@ -16,7 +16,7 @@ SECTIONS:     ]
>>> SECTIONS:   }
>>> SECTIONS:   Section {
>>> SECTIONS:     Index: 1
>>> -SECTIONS:     Name: .interp (1)
>>> +SECTIONS:     Name: .interp
>>> SECTIONS:     Type: SHT_PROGBITS (0x1)
>>> SECTIONS:     Flags [ (0x2)
>>> SECTIONS:       SHF_ALLOC (0x2)
>>> @@ -24,7 +24,7 @@ SECTIONS:     ]
>>> SECTIONS:   }
>>> SECTIONS:   Section {
>>> SECTIONS:     Index: 2
>>> -SECTIONS:     Name: .hash (9)
>>> +SECTIONS:     Name: .hash
>>> SECTIONS:     Type: SHT_HASH (0x5)
>>> SECTIONS:     Flags [ (0x2)
>>> SECTIONS:       SHF_ALLOC (0x2)
>>> @@ -32,7 +32,7 @@ SECTIONS:     ]
>>> SECTIONS:   }
>>> SECTIONS:   Section {
>>> SECTIONS:     Index: 3
>>> -SECTIONS:     Name: .dynsym (15)
>>> +SECTIONS:     Name: .dynsym
>>> SECTIONS:     Type: SHT_DYNSYM (0xB)
>>> SECTIONS:     Flags [ (0x2)
>>> SECTIONS:       SHF_ALLOC (0x2)
>>> @@ -40,7 +40,7 @@ SECTIONS:     ]
>>> SECTIONS:   }
>>> SECTIONS:   Section {
>>> SECTIONS:     Index: 4
>>> -SECTIONS:     Name: .dynstr (23)
>>> +SECTIONS:     Name: .dynstr
>>> SECTIONS:     Type: SHT_STRTAB (0x3)
>>> SECTIONS:     Flags [ (0x2)
>>> SECTIONS:       SHF_ALLOC (0x2)
>>> @@ -48,7 +48,7 @@ SECTIONS:     ]
>>> SECTIONS:   }
>>> SECTIONS:   Section {
>>> SECTIONS:     Index: 5
>>> -SECTIONS:     Name: .text (31)
>>> +SECTIONS:     Name: .text
>>> SECTIONS:     Type: SHT_PROGBITS (0x1)
>>> SECTIONS:     Flags [ (0x6)
>>> SECTIONS:       SHF_ALLOC (0x2)
>>> @@ -57,7 +57,7 @@ SECTIONS:     ]
>>> SECTIONS:   }
>>> SECTIONS:   Section {
>>> SECTIONS:     Index: 6
>>> -SECTIONS:     Name: .rodata (37)
>>> +SECTIONS:     Name: .rodata
>>> SECTIONS:     Type: SHT_PROGBITS (0x1)
>>> SECTIONS:     Flags [ (0x2)
>>> SECTIONS:       SHF_ALLOC (0x2)
>>> @@ -65,7 +65,7 @@ SECTIONS:     ]
>>> SECTIONS:   }
>>> SECTIONS:   Section {
>>> SECTIONS:     Index: 7
>>> -SECTIONS:     Name: .eh_frame (45)
>>> +SECTIONS:     Name: .eh_frame
>>> SECTIONS:     Type: SHT_PROGBITS (0x1)
>>> SECTIONS:     Flags [ (0x2)
>>> SECTIONS:       SHF_ALLOC (0x2)
>>> @@ -73,16 +73,11 @@ SECTIONS:     ]
>>> SECTIONS:   }
>>> SECTIONS:   Section {
>>> SECTIONS:     Index: 8
>>> -SECTIONS:     Name: .init_array (55)
>>> -SECTIONS:     Type: SHT_PROGBITS (0x1)
>>> -SECTIONS:     Flags [ (0x3)
>>> -SECTIONS:       SHF_ALLOC (0x2)
>>> -SECTIONS:       SHF_WRITE (0x1)
>>> -SECTIONS:     ]
>>> +SECTIONS:     Name: .eh_frame_hdr
>>> SECTIONS:   }
>>> SECTIONS:   Section {
>>> SECTIONS:     Index: 9
>>> -SECTIONS:     Name: .fini_array (67)
>>> +SECTIONS:     Name: .init_array
>>> SECTIONS:     Type: SHT_PROGBITS (0x1)
>>> SECTIONS:     Flags [ (0x3)
>>> SECTIONS:       SHF_ALLOC (0x2)
>>> @@ -91,7 +86,7 @@ SECTIONS:     ]
>>> SECTIONS:   }
>>> SECTIONS:   Section {
>>> SECTIONS:     Index: 10
>>> -SECTIONS:     Name: .dynamic (79)
>>> +SECTIONS:     Name: .fini_array
>>> SECTIONS:     Type: SHT_PROGBITS (0x1)
>>> SECTIONS:     Flags [ (0x3)
>>> SECTIONS:       SHF_ALLOC (0x2)
>>> @@ -100,7 +95,7 @@ SECTIONS:     ]
>>> SECTIONS:   }
>>> SECTIONS:   Section {
>>> SECTIONS:     Index: 11
>>> -SECTIONS:     Name: .got.plt (88)
>>> +SECTIONS:     Name: .dynamic
>>> SECTIONS:     Type: SHT_PROGBITS (0x1)
>>> SECTIONS:     Flags [ (0x3)
>>> SECTIONS:       SHF_ALLOC (0x2)
>>> @@ -109,7 +104,7 @@ SECTIONS:     ]
>>> SECTIONS:   }
>>> SECTIONS:   Section {
>>> SECTIONS:     Index: 12
>>> -SECTIONS:     Name: .data (97)
>>> +SECTIONS:     Name: .got.plt
>>> SECTIONS:     Type: SHT_PROGBITS (0x1)
>>> SECTIONS:     Flags [ (0x3)
>>> SECTIONS:       SHF_ALLOC (0x2)
>>> @@ -118,8 +113,8 @@ SECTIONS:     ]
>>> SECTIONS:   }
>>> SECTIONS:   Section {
>>> SECTIONS:     Index: 13
>>> -SECTIONS:     Name: .bss (103)
>>> -SECTIONS:     Type: SHT_NOBITS (0x8)
>>> +SECTIONS:     Name: .data
>>> +SECTIONS:     Type: SHT_PROGBITS (0x1)
>>> SECTIONS:     Flags [ (0x3)
>>> SECTIONS:       SHF_ALLOC (0x2)
>>> SECTIONS:       SHF_WRITE (0x1)
>>> @@ -127,35 +122,44 @@ SECTIONS:     ]
>>> SECTIONS:   }
>>> SECTIONS:   Section {
>>> SECTIONS:     Index: 14
>>> -SECTIONS:     Name: .comment (108)
>>> -SECTIONS:     Type: SHT_PROGBITS (0x1)
>>> -SECTIONS:     Flags [ (0x0)
>>> +SECTIONS:     Name: .bss
>>> +SECTIONS:     Type: SHT_NOBITS (0x8)
>>> +SECTIONS:     Flags [ (0x3)
>>> +SECTIONS:       SHF_ALLOC (0x2)
>>> +SECTIONS:       SHF_WRITE (0x1)
>>> SECTIONS:     ]
>>> SECTIONS:   }
>>> SECTIONS:   Section {
>>> SECTIONS:     Index: 15
>>> -SECTIONS:     Name: .note.GNU-stack (117)
>>> +SECTIONS:     Name: .comment
>>> SECTIONS:     Type: SHT_PROGBITS (0x1)
>>> SECTIONS:     Flags [ (0x0)
>>> SECTIONS:     ]
>>> SECTIONS:   }
>>> SECTIONS:   Section {
>>> SECTIONS:     Index: 16
>>> -SECTIONS:     Name: .shstrtab (133)
>>> -SECTIONS:     Type: SHT_STRTAB (0x3)
>>> +SECTIONS:     Name: .note.GNU-stack
>>> +SECTIONS:     Type: SHT_PROGBITS (0x1)
>>> SECTIONS:     Flags [ (0x0)
>>> SECTIONS:     ]
>>> SECTIONS:   }
>>> SECTIONS:   Section {
>>> SECTIONS:     Index: 17
>>> -SECTIONS:     Name: .symtab (143)
>>> -SECTIONS:     Type: SHT_SYMTAB (0x2)
>>> +SECTIONS:     Name: .shstrtab
>>> +SECTIONS:     Type: SHT_STRTAB (0x3)
>>> SECTIONS:     Flags [ (0x0)
>>> SECTIONS:     ]
>>> SECTIONS:   }
>>> SECTIONS:   Section {
>>> SECTIONS:     Index: 18
>>> -SECTIONS:     Name: .strtab (151)
>>> +SECTIONS:     Name: .symtab
>>> +SECTIONS:     Type: SHT_SYMTAB (0x2)
>>> +SECTIONS:     Flags [ (0x0)
>>> +SECTIONS:     ]
>>> +SECTIONS:   }
>>> +SECTIONS:   Section {
>>> +SECTIONS:     Index: 19
>>> +SECTIONS:     Name: .strtab
>>> SECTIONS:     Type: SHT_STRTAB (0x3)
>>> SECTIONS:     Flags [ (0x0)
>>> SECTIONS:     ]
>>> 
>>> Added: lld/trunk/test/elf/eh_frame_hdr.test
>>> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/eh_frame_hdr.test?rev=193662&view=auto
>>> ==============================================================================
>>> --- lld/trunk/test/elf/eh_frame_hdr.test (added)
>>> +++ lld/trunk/test/elf/eh_frame_hdr.test Tue Oct 29 19:02:04 2013
>>> @@ -0,0 +1,26 @@
>>> +#RUN: yaml2obj -format=elf %s > %t
>>> +#RUN: lld -flavor gnu -target x86_64-linux %t --noinhibit-exec \
>>> +#RUN:   -o %t1
>>> +#RUN: llvm-readobj -s %t1 | FileCheck %s
>>> +
>>> +!ELF
>>> +FileHeader:
>>> +  Class: ELFCLASS64
>>> +  Data: ELFDATA2LSB
>>> +  Type: ET_REL
>>> +  Machine: EM_X86_64
>>> +
>>> +Sections:
>>> +- Name: .eh_frame
>>> +  Type: SHT_PROGBITS
>>> +  Content: "00"
>>> +  AddressAlign: 8
>>> +  Flags: [SHF_ALLOC]
>>> +
>>> +Symbols:
>>> +  Local:
>>> +  - Name: .eh_frame
>>> +    Type: STT_SECTION
>>> +    Section: .eh_frame
>>> +
>>> +#CHECK: .eh_frame_hdr
>>> 
>>> Modified: lld/trunk/test/elf/entry.objtxt
>>> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/entry.objtxt?rev=193662&r1=193661&r2=193662&view=diff
>>> ==============================================================================
>>> --- lld/trunk/test/elf/entry.objtxt (original)
>>> +++ lld/trunk/test/elf/entry.objtxt Tue Oct 29 19:02:04 2013
>>> @@ -11,7 +11,7 @@
>>> # RUN: lld -flavor gnu %s -e _entrypoint --noinhibit-exec -o %t1
>>> # RUN: llvm-nm -n %t1 | FileCheck %s
>>> #
>>> -# CHECK:  004001b0 T main
>>> +# CHECK:  004001e0 T main
>>> # CHECK:  00401080 D _DYNAMIC
>>> # CHECK:  00401080 A _end
>>> # CHECK:  00401080 A end
>>> 
>>> Modified: lld/trunk/test/elf/ifunc.test
>>> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/ifunc.test?rev=193662&r1=193661&r2=193662&view=diff
>>> ==============================================================================
>>> --- lld/trunk/test/elf/ifunc.test (original)
>>> +++ lld/trunk/test/elf/ifunc.test Tue Oct 29 19:02:04 2013
>>> @@ -60,7 +60,7 @@ BIN-NEXT: {{[0-9a-f]+}} 00000000 0000000
>>> 
>>> RELATIVEADDEND:      Relocations [
>>> RELATIVEADDEND-NEXT:   Section (1) .rela.plt {
>>> -RELATIVEADDEND-NEXT:     0x401000 R_X86_64_IRELATIVE - 0x4000E0
>>> +RELATIVEADDEND-NEXT:     0x401000 R_X86_64_IRELATIVE - 0x400120
>>> RELATIVEADDEND-NEXT:   }
>>> RELATIVEADDEND-NEXT: ]
>>> 
>>> 
>>> Modified: lld/trunk/test/elf/phdr.test
>>> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/phdr.test?rev=193662&r1=193661&r2=193662&view=diff
>>> ==============================================================================
>>> --- lld/trunk/test/elf/phdr.test (original)
>>> +++ lld/trunk/test/elf/phdr.test Tue Oct 29 19:02:04 2013
>>> @@ -11,8 +11,8 @@ I386-NEXT:     Type: PT_PHDR (0x6)
>>> I386-NEXT:     Offset: 0x34
>>> I386-NEXT:     VirtualAddress: 0x34
>>> I386-NEXT:     PhysicalAddress: 0x34
>>> -I386-NEXT:     FileSize: 192
>>> -I386-NEXT:     MemSize: 192
>>> +I386-NEXT:     FileSize: 224
>>> +I386-NEXT:     MemSize: 224
>>> I386-NEXT:     Flags [ (0x5)
>>> I386-NEXT:       PF_R (0x4)
>>> I386-NEXT:       PF_X (0x1)
>>> @@ -21,9 +21,9 @@ I386-NEXT:     Alignment: 8
>>> I386-NEXT:   }
>>> I386-NEXT:   ProgramHeader {
>>> I386-NEXT:     Type: PT_INTERP (0x3)
>>> -I386-NEXT:     Offset: 0xF4
>>> -I386-NEXT:     VirtualAddress: 0xF4
>>> -I386-NEXT:     PhysicalAddress: 0xF4
>>> +I386-NEXT:     Offset: 0x114
>>> +I386-NEXT:     VirtualAddress: 0x114
>>> +I386-NEXT:     PhysicalAddress: 0x114
>>> I386-NEXT:     FileSize: 28
>>> I386-NEXT:     MemSize: 28
>>> I386-NEXT:     Flags [ (0x4)
>>> @@ -36,8 +36,8 @@ I386-NEXT:     Type: PT_LOAD (0x1)
>>> I386-NEXT:     Offset: 0x0
>>> I386-NEXT:     VirtualAddress: 0x0
>>> I386-NEXT:     PhysicalAddress: 0x0
>>> -I386-NEXT:     FileSize: 532
>>> -I386-NEXT:     MemSize: 532
>>> +I386-NEXT:     FileSize: 572
>>> +I386-NEXT:     MemSize: 572
>>> I386-NEXT:     Flags [ (0x5)
>>> I386-NEXT:       PF_R (0x4)
>>> I386-NEXT:       PF_X (0x1)
>>> @@ -71,10 +71,22 @@ I386-NEXT:     ]
>>> I386-NEXT:     Alignment: 4096
>>> I386-NEXT:   }
>>> I386-NEXT:   ProgramHeader {
>>> +I386-NEXT:     Type: PT_GNU_EH_FRAME (0x6474E550)
>>> +I386-NEXT:     Offset: 0x1F4
>>> +I386-NEXT:     VirtualAddress: 0x1F4
>>> +I386-NEXT:     PhysicalAddress: 0x1F4
>>> +I386-NEXT:     FileSize: 8
>>> +I386-NEXT:     MemSize: 8
>>> +I386-NEXT:     Flags [ (0x4)
>>> +I386-NEXT:       PF_R (0x4)
>>> +I386-NEXT:     ]
>>> +I386-NEXT:     Alignment: 4
>>> +I386-NEXT:   }
>>> +I386-NEXT:   ProgramHeader {
>>> I386-NEXT:     Type: PT_DYNAMIC (0x2)
>>> -I386-NEXT:     Offset: 0x1D4
>>> -I386-NEXT:     VirtualAddress: 0x1D4
>>> -I386-NEXT:     PhysicalAddress: 0x1D4
>>> +I386-NEXT:     Offset: 0x1FC
>>> +I386-NEXT:     VirtualAddress: 0x1FC
>>> +I386-NEXT:     PhysicalAddress: 0x1FC
>>> I386-NEXT:     FileSize: 64
>>> I386-NEXT:     MemSize: 64
>>> I386-NEXT:     Flags [ (0x4)
>>> 
>>> Modified: lld/trunk/test/elf/symbols.test
>>> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/symbols.test?rev=193662&r1=193661&r2=193662&view=diff
>>> ==============================================================================
>>> --- lld/trunk/test/elf/symbols.test (original)
>>> +++ lld/trunk/test/elf/symbols.test Tue Oct 29 19:02:04 2013
>>> @@ -20,7 +20,7 @@ RUN: lld -flavor gnu -shared -target i38
>>> RUN: llvm-nm -n %t1 | FileCheck -check-prefix CHECKSHAREDSYMS %s
>>> 
>>> CHECKSYMS:  00000000 a 1.c
>>> -CHECKSYMS:  00000114 T main
>>> +CHECKSYMS:  00000134 T main
>>> CHECKSYMS:  00001000 A __bss_start
>>> CHECKSYMS:  00001000 B a
>>> CHECKSYMS:  00001004 A __bss_end
>>> @@ -28,6 +28,6 @@ CHECKSYMS:  00001004 A _end
>>> CHECKSYMS:  00001004 A end
>>> 
>>> CHECKSHAREDSYMS:  00000000 a 1.c
>>> -CHECKSHAREDSYMS:  0000010c T main
>>> +CHECKSHAREDSYMS:  0000012c T main
>>> CHECKSHAREDSYMS:  00001000 B a
>>> CHECKSHAREDSYMS:  00001004 A _end
>>> 
>>> 
>>> _______________________________________________
>>> llvm-commits mailing list
>>> llvm-commits at cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>> 
>> 
> 
> 
> -- 
> Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by the Linux Foundation
> 




More information about the llvm-commits mailing list