From 9de946fa1fb355ded560fd4435c954bdb45bc804 Mon Sep 17 00:00:00 2001 From: Davide Italiano Date: Fri, 1 May 2015 19:20:48 +0000 Subject: [PATCH] [ELF] Fix test for .init_array. Change the test so that it tests the right functionality. Also put a description with the code from which the test was generated. Reported by Simon Atanasysan. llvm-svn: 236334 --- .../ELF/X86_64/X86_64RelocationHandler.cpp | 2 +- lld/test/elf/init_array.test | 67 ++++++++++++++++------ 2 files changed, 50 insertions(+), 19 deletions(-) diff --git a/lld/lib/ReaderWriter/ELF/X86_64/X86_64RelocationHandler.cpp b/lld/lib/ReaderWriter/ELF/X86_64/X86_64RelocationHandler.cpp index b5f6493..7a7a1dc 100644 --- a/lld/lib/ReaderWriter/ELF/X86_64/X86_64RelocationHandler.cpp +++ b/lld/lib/ReaderWriter/ELF/X86_64/X86_64RelocationHandler.cpp @@ -24,7 +24,7 @@ static void reloc64(uint8_t *location, uint64_t P, uint64_t S, int64_t A) { /// \brief R_X86_64_PC32 - word32: S + A - P static void relocPC32(uint8_t *location, uint64_t P, uint64_t S, int64_t A) { uint32_t result = (uint32_t)(S + A - P); - write32le(location, result + read32le(location)); + write32le(location, result | read32le(location)); } /// \brief R_X86_64_32 - word32: S + A diff --git a/lld/test/elf/init_array.test b/lld/test/elf/init_array.test index 3e92403..096ca53 100644 --- a/lld/test/elf/init_array.test +++ b/lld/test/elf/init_array.test @@ -1,5 +1,18 @@ +# Test .init_array. +# Generated from the following C code: +# +# static void +# init () {} +# +# static void (*const init_array []) () +# __attribute__ ((used, section (".init_array"), aligned (sizeof (void *)))) +# = { init }; +# +# int +# main() { return (0); } + #RUN: yaml2obj -format=elf %s -o=%t.o -#RUN: lld -flavor gnu -target x86_64 %t.o -o %t1 -e=main +#RUN: lld -flavor gnu -target x86_64 %t.o -o %t -e=main #RUN: llvm-objdump -t -section-headers %t | FileCheck %s #CHECK: .init_array {{[0-9]+}} [[ADDR:[0-9]+]] @@ -17,26 +30,32 @@ Sections: Type: SHT_PROGBITS Flags: [ SHF_ALLOC, SHF_EXECINSTR ] AddressAlign: 0x0000000000000010 - Content: 554889E5B800000000C745FC000000008B0C2500000000894DF85DC3 - - Name: .rela.text - Type: SHT_RELA - Link: .symtab - AddressAlign: 0x0000000000000008 - Info: .text - Relocations: - - Offset: 0x0000000000000013 - Symbol: a - Type: R_X86_64_32S + Content: 554889E5B800000000C745FC000000005DC366666666662E0F1F840000000000554889E55DC3 - Name: .data Type: SHT_PROGBITS Flags: [ SHF_WRITE, SHF_ALLOC ] AddressAlign: 0x0000000000000004 - Content: '05000000' + Content: '' - Name: .bss Type: SHT_NOBITS Flags: [ SHF_WRITE, SHF_ALLOC ] AddressAlign: 0x0000000000000004 Content: '' + - Name: .init_array + Type: SHT_INIT_ARRAY + Flags: [ SHF_ALLOC ] + AddressAlign: 0x0000000000000008 + Content: '0000000000000000' + - Name: .rela.init_array + Type: SHT_RELA + Link: .symtab + AddressAlign: 0x0000000000000008 + Info: .init_array + Relocations: + - Offset: 0x0000000000000000 + Symbol: .text + Type: R_X86_64_64 + Addend: 32 - Name: .comment Type: SHT_PROGBITS Flags: [ SHF_MERGE, SHF_STRINGS ] @@ -50,7 +69,7 @@ Sections: Type: SHT_PROGBITS Flags: [ SHF_ALLOC ] AddressAlign: 0x0000000000000008 - Content: 1400000000000000017A5200017810011B0C0708900100001C0000001C000000000000001C00000000410E108602430D0600000000000000 + Content: 1400000000000000017A5200017810011B0C070890010000180000001C000000000000001200000000410E108602430D060000001800000038000000000000000600000000410E108602430D06000000 - Name: .rela.eh_frame Type: SHT_RELA Link: .symtab @@ -60,8 +79,21 @@ Sections: - Offset: 0x0000000000000020 Symbol: .text Type: R_X86_64_PC32 + - Offset: 0x000000000000003C + Symbol: .text + Type: R_X86_64_PC32 + Addend: 32 Symbols: Local: + - Name: init + Type: STT_FUNC + Section: .text + Value: 0x0000000000000020 + Size: 0x0000000000000006 + - Name: init_array + Type: STT_OBJECT + Section: .init_array + Size: 0x0000000000000008 - Name: .text Type: STT_SECTION Section: .text @@ -71,6 +103,9 @@ Symbols: - Name: .bss Type: STT_SECTION Section: .bss + - Name: .init_array + Type: STT_SECTION + Section: .init_array - Name: .comment Type: STT_SECTION Section: .comment @@ -81,12 +116,8 @@ Symbols: Type: STT_SECTION Section: .eh_frame Global: - - Name: a - Type: STT_OBJECT - Section: .data - Size: 0x0000000000000004 - Name: main Type: STT_FUNC Section: .text - Size: 0x000000000000001C + Size: 0x0000000000000012 ... -- 2.7.4