[lld] r249367 - [elf2] Add __preinit_array, and __fini_array start and end symbols.
Rui Ueyama via llvm-commits
llvm-commits at lists.llvm.org
Mon Oct 5 18:30:40 PDT 2015
On Mon, Oct 5, 2015 at 6:28 PM, Sean Silva via llvm-commits <
llvm-commits at lists.llvm.org> wrote:
>
>
> On Mon, Oct 5, 2015 at 6:16 PM, Michael J. Spencer via llvm-commits <
> llvm-commits at lists.llvm.org> wrote:
>
>> Author: mspencer
>> Date: Mon Oct 5 20:16:17 2015
>> New Revision: 249367
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=249367&view=rev
>> Log:
>> [elf2] Add __preinit_array, and __fini_array start and end symbols.
>>
>> Added:
>> lld/trunk/test/elf2/pre_init_fini_array.s
>> - copied, changed from r249365, lld/trunk/test/elf2/init_array.s
>> lld/trunk/test/elf2/pre_init_fini_array_missing.s
>> Removed:
>> lld/trunk/test/elf2/init_array.s
>> lld/trunk/test/elf2/init_array_missing.s
>> Modified:
>> lld/trunk/ELF/Writer.cpp
>>
>> Modified: lld/trunk/ELF/Writer.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Writer.cpp?rev=249367&r1=249366&r2=249367&view=diff
>>
>> ==============================================================================
>> --- lld/trunk/ELF/Writer.cpp (original)
>> +++ lld/trunk/ELF/Writer.cpp Mon Oct 5 20:16:17 2015
>> @@ -329,13 +329,24 @@ template <class ELFT> void Writer<ELFT>:
>> DynamicSec.FiniArraySec =
>> Map.lookup({".fini_array", SHT_FINI_ARRAY, SHF_WRITE | SHF_ALLOC});
>>
>> - if (OutputSection<ELFT> *OS = DynamicSec.InitArraySec) {
>> - Symtab.addSyntheticSym<ELFT>("__init_array_start", *OS, 0);
>> - Symtab.addSyntheticSym<ELFT>("__init_array_end", *OS, OS->getSize());
>> - } else {
>> - Symtab.addIgnoredSym<ELFT>("__init_array_start");
>> - Symtab.addIgnoredSym<ELFT>("__init_array_end");
>> - }
>> + auto addStartEnd = [&Symtab](StringRef StartName, StringRef EndName,
>> + OutputSection<ELFT> *OS) {
>> + if (OS) {
>> + Symtab.addSyntheticSym<ELFT>(StartName, *OS, 0);
>> + Symtab.addSyntheticSym<ELFT>(EndName, *OS, OS->getSize());
>> + }
>> + else {
>>
>
> format
>
Also I'd use shorter names (drop "Name" from the parameters) and early
return.
> -- Sean Silva
>
>
>> + Symtab.addIgnoredSym<ELFT>(StartName);
>> + Symtab.addIgnoredSym<ELFT>(EndName);
>> + }
>> + };
>> +
>> + addStartEnd("__preinit_array_start", "__preinit_array_end",
>> + DynamicSec.PreInitArraySec);
>> + addStartEnd("__init_array_start", "__init_array_end",
>> + DynamicSec.InitArraySec);
>> + addStartEnd("__fini_array_start", "__fini_array_end",
>> + DynamicSec.FiniArraySec);
>>
>> // FIXME: Try to avoid the extra walk over all global symbols.
>> std::vector<DefinedCommon<ELFT> *> CommonSymbols;
>>
>> Removed: lld/trunk/test/elf2/init_array.s
>> URL:
>> http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf2/init_array.s?rev=249366&view=auto
>>
>> ==============================================================================
>> --- lld/trunk/test/elf2/init_array.s (original)
>> +++ lld/trunk/test/elf2/init_array.s (removed)
>> @@ -1,90 +0,0 @@
>> -// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
>> -// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux
>> %p/Inputs/shared.s -o %t2
>> -// RUN: lld -flavor gnu2 %t2 -o t2.so -shared
>> -// RUN: lld -flavor gnu2 %t t2.so -o %t2
>> -// RUN: llvm-readobj -symbols -sections -dynamic-table %t2 | FileCheck %s
>> -// RUN: llvm-objdump -d %t2 | FileCheck --check-prefix=DISASM %s
>> -// REQUIRES: x86
>> -
>> -.globl _start
>> -_start:
>> - call __init_array_start
>> - call __init_array_end
>> -
>> -
>> -.section .init_array,"aw", at init_array
>> - .quad 0
>> -
>> -.section .preinit_array,"aw", at preinit_array
>> - .quad 0
>> - .byte 0
>> -
>> -.section .fini_array,"aw", at fini_array
>> - .quad 0
>> - .short 0
>> -
>> -// CHECK: Name: .init_array
>> -// CHECK-NEXT: Type: SHT_INIT_ARRAY
>> -// CHECK-NEXT: Flags [
>> -// CHECK-NEXT: SHF_ALLOC
>> -// CHECK-NEXT: SHF_WRITE
>> -// CHECK-NEXT: ]
>> -// CHECK-NEXT: Address: [[INIT_ADDR:.*]]
>> -// CHECK-NEXT: Offset:
>> -// CHECK-NEXT: Size: [[INIT_SIZE:.*]]
>> -
>> -
>> -// CHECK: Name: .preinit_array
>> -// CHECK-NEXT: Type: SHT_PREINIT_ARRAY
>> -// CHECK-NEXT: Flags [
>> -// CHECK-NEXT: SHF_ALLOC
>> -// CHECK-NEXT: SHF_WRITE
>> -// CHECK-NEXT: ]
>> -// CHECK-NEXT: Address: [[PREINIT_ADDR:.*]]
>> -// CHECK-NEXT: Offset:
>> -// CHECK-NEXT: Size: [[PREINIT_SIZE:.*]]
>> -
>> -
>> -// CHECK: Name: .fini_array
>> -// CHECK-NEXT: Type: SHT_FINI_ARRAY
>> -// CHECK-NEXT: Flags [
>> -// CHECK-NEXT: SHF_ALLOC
>> -// CHECK-NEXT: SHF_WRITE
>> -// CHECK-NEXT: ]
>> -// CHECK-NEXT: Address: [[FINI_ADDR:.*]]
>> -// CHECK-NEXT: Offset:
>> -// CHECK-NEXT: Size: [[FINI_SIZE:.*]]
>> -
>> -// CHECK: Name: __init_array_end
>> -// CHECK-NEXT: Value: 0x13008
>> -// CHECK-NEXT: Size: 0
>> -// CHECK-NEXT: Binding: Local
>> -// CHECK-NEXT: Type: None
>> -// CHECK-NEXT: Other: 0
>> -// CHECK-NEXT: Section: .init_array
>> -// CHECK-NEXT: }
>> -// CHECK-NEXT: Symbol {
>> -// CHECK-NEXT: Name: __init_array_start
>> -// CHECK-NEXT: Value: [[INIT_ADDR]]
>> -// CHECK-NEXT: Size: 0
>> -// CHECK-NEXT: Binding: Local
>> -// CHECK-NEXT: Type: None
>> -// CHECK-NEXT: Other: 0
>> -// CHECK-NEXT: Section: .init_array
>> -// CHECK-NEXT: }
>> -
>> -
>> -// CHECK: DynamicSection
>> -// CHECK: PREINIT_ARRAY [[PREINIT_ADDR]]
>> -// CHECK: PREINIT_ARRAYSZ [[PREINIT_SIZE]] (bytes)
>> -// CHECK: INIT_ARRAY [[INIT_ADDR]]
>> -// CHECK: INIT_ARRAYSZ [[INIT_SIZE]] (bytes)
>> -// CHECK: FINI_ARRAY [[FINI_ADDR]]
>> -// CHECK: FINI_ARRAYSZ [[FINI_SIZE]] (bytes)
>> -
>> -
>> -// 0x13000 - (0x12000 + 5) = 4091
>> -// 0x13008 - (0x12005 + 5) = 4094
>> -// DISASM: _start:
>> -// DISASM-NEXT: 12000: e8 fb 0f 00 00 callq 4091
>> -// DISASM-NEXT: 12005: e8 fe 0f 00 00 callq 4094
>>
>> Removed: lld/trunk/test/elf2/init_array_missing.s
>> URL:
>> http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf2/init_array_missing.s?rev=249366&view=auto
>>
>> ==============================================================================
>> --- lld/trunk/test/elf2/init_array_missing.s (original)
>> +++ lld/trunk/test/elf2/init_array_missing.s (removed)
>> @@ -1,18 +0,0 @@
>> -// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
>> -// RUN: lld -flavor gnu2 %t -o %t2
>> -// RUN: llvm-objdump -d %t2 | FileCheck %s
>> -// REQUIRES: x86
>> -
>> -.globl _start
>> -_start:
>> - call __init_array_start
>> - call __init_array_end
>> -
>> -// With no .init_array section the symbols resolve to 0
>> -// 0 - (0x11000 + 5) = -69637
>> -// 0 - (0x11005 + 5) = -69642
>> -
>> -// CHECK: Disassembly of section .text:
>> -// CHECK-NEXT: _start:
>> -// CHECK-NEXT: 11000: e8 fb ef fe ff callq -69637
>> -// CHECK-NEXT: 11005: e8 f6 ef fe ff callq -69642
>>
>> Copied: lld/trunk/test/elf2/pre_init_fini_array.s (from r249365,
>> lld/trunk/test/elf2/init_array.s)
>> URL:
>> http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf2/pre_init_fini_array.s?p2=lld/trunk/test/elf2/pre_init_fini_array.s&p1=lld/trunk/test/elf2/init_array.s&r1=249365&r2=249367&rev=249367&view=diff
>>
>> ==============================================================================
>> --- lld/trunk/test/elf2/init_array.s (original)
>> +++ lld/trunk/test/elf2/pre_init_fini_array.s Mon Oct 5 20:16:17 2015
>> @@ -8,8 +8,12 @@
>>
>> .globl _start
>> _start:
>> + call __preinit_array_start
>> + call __preinit_array_end
>> call __init_array_start
>> call __init_array_end
>> + call __fini_array_start
>> + call __fini_array_end
>>
>>
>> .section .init_array,"aw", at init_array
>> @@ -55,7 +59,25 @@ _start:
>> // CHECK-NEXT: Offset:
>> // CHECK-NEXT: Size: [[FINI_SIZE:.*]]
>>
>> -// CHECK: Name: __init_array_end
>> +// CHECK: Name: __fini_array_end
>> +// CHECK-NEXT: Value: 0x1301B
>> +// CHECK-NEXT: Size: 0
>> +// CHECK-NEXT: Binding: Local
>> +// CHECK-NEXT: Type: None
>> +// CHECK-NEXT: Other: 0
>> +// CHECK-NEXT: Section: .fini_array
>> +// CHECK-NEXT: }
>> +// CHECK-NEXT: Symbol {
>> +// CHECK-NEXT: Name: __fini_array_start
>> +// CHECK-NEXT: Value: [[FINI_ADDR]]
>> +// CHECK-NEXT: Size: 0
>> +// CHECK-NEXT: Binding: Local
>> +// CHECK-NEXT: Type: None
>> +// CHECK-NEXT: Other: 0
>> +// CHECK-NEXT: Section: .fini_array
>> +// CHECK-NEXT: }
>> +// CHECK-NEXT: Symbol {
>> +// CHECK-NEXT: Name: __init_array_end
>> // CHECK-NEXT: Value: 0x13008
>> // CHECK-NEXT: Size: 0
>> // CHECK-NEXT: Binding: Local
>> @@ -72,7 +94,24 @@ _start:
>> // CHECK-NEXT: Other: 0
>> // CHECK-NEXT: Section: .init_array
>> // CHECK-NEXT: }
>> -
>> +// CHECK-NEXT: Symbol {
>> +// CHECK-NEXT: Name: __preinit_array_end
>> +// CHECK-NEXT: Value: 0x13011
>> +// CHECK-NEXT: Size: 0
>> +// CHECK-NEXT: Binding: Local
>> +// CHECK-NEXT: Type: None
>> +// CHECK-NEXT: Other: 0
>> +// CHECK-NEXT: Section: .preinit_array
>> +// CHECK-NEXT: }
>> +// CHECK-NEXT: Symbol {
>> +// CHECK-NEXT: Name: __preinit_array_start
>> +// CHECK-NEXT: Value: [[PREINIT_ADDR]]
>> +// CHECK-NEXT: Size: 0
>> +// CHECK-NEXT: Binding: Local
>> +// CHECK-NEXT: Type: None
>> +// CHECK-NEXT: Other: 0
>> +// CHECK-NEXT: Section: .preinit_array
>> +// CHECK-NEXT: }
>>
>> // CHECK: DynamicSection
>> // CHECK: PREINIT_ARRAY [[PREINIT_ADDR]]
>> @@ -83,8 +122,16 @@ _start:
>> // CHECK: FINI_ARRAYSZ [[FINI_SIZE]] (bytes)
>>
>>
>> -// 0x13000 - (0x12000 + 5) = 4091
>> -// 0x13008 - (0x12005 + 5) = 4094
>> +// 0x13008 - (0x12000 + 5) = 4099
>> +// 0x13011 - (0x12005 + 5) = 4103
>> +// 0x13000 - (0x1200a + 5) = 4081
>> +// 0x13008 - (0x1200f + 5) = 4084
>> +// 0x13011 - (0x12014 + 5) = 4088
>> +// 0x1301B - (0x12019 + 5) = 4093
>> // DISASM: _start:
>> -// DISASM-NEXT: 12000: e8 fb 0f 00 00 callq 4091
>> -// DISASM-NEXT: 12005: e8 fe 0f 00 00 callq 4094
>> +// DISASM-NEXT: 12000: e8 {{.*}} callq 4099
>> +// DISASM-NEXT: 12005: e8 {{.*}} callq 4103
>> +// DISASM-NEXT: 1200a: e8 {{.*}} callq 4081
>> +// DISASM-NEXT: 1200f: e8 {{.*}} callq 4084
>> +// DISASM-NEXT: 12014: e8 {{.*}} callq 4088
>> +// DISASM-NEXT: 12019: e8 {{.*}} callq 4093
>>
>> Added: lld/trunk/test/elf2/pre_init_fini_array_missing.s
>> URL:
>> http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf2/pre_init_fini_array_missing.s?rev=249367&view=auto
>>
>> ==============================================================================
>> --- lld/trunk/test/elf2/pre_init_fini_array_missing.s (added)
>> +++ lld/trunk/test/elf2/pre_init_fini_array_missing.s Mon Oct 5 20:16:17
>> 2015
>> @@ -0,0 +1,30 @@
>> +// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
>> +// RUN: lld -flavor gnu2 %t -o %t2
>> +// RUN: llvm-objdump -d %t2 | FileCheck %s
>> +// REQUIRES: x86
>> +
>> +.globl _start
>> +_start:
>> + call __preinit_array_start
>> + call __preinit_array_end
>> + call __init_array_start
>> + call __init_array_end
>> + call __fini_array_start
>> + call __fini_array_end
>> +
>> +// With no .init_array section the symbols resolve to 0
>> +// 0 - (0x11000 + 5) = -69637
>> +// 0 - (0x11005 + 5) = -69642
>> +// 0 - (0x1100a + 5) = -69647
>> +// 0 - (0x1100f + 5) = -69652
>> +// 0 - (0x11014 + 5) = -69657
>> +// 0 - (0x11019 + 5) = -69662
>> +
>> +// CHECK: Disassembly of section .text:
>> +// CHECK-NEXT: _start:
>> +// CHECK-NEXT: 11000: e8 fb ef fe ff callq -69637
>> +// CHECK-NEXT: 11005: e8 f6 ef fe ff callq -69642
>> +// CHECK-NEXT: 1100a: e8 f1 ef fe ff callq -69647
>> +// CHECK-NEXT: 1100f: e8 ec ef fe ff callq -69652
>> +// CHECK-NEXT: 11014: e8 e7 ef fe ff callq -69657
>> +// CHECK-NEXT: 11019: e8 e2 ef fe ff callq -69662
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20151005/fafe4d4f/attachment.html>
More information about the llvm-commits
mailing list