[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