[lld] r249367 - [elf2] Add __preinit_array, and __fini_array start and end symbols.
Michael Spencer via llvm-commits
llvm-commits at lists.llvm.org
Mon Oct 5 19:17:04 PDT 2015
On Mon, Oct 5, 2015 at 6:30 PM, Rui Ueyama <ruiu at google.com> wrote:
> 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.
>
Both fixed in r249368
- Michael Spencer.
>>
>> -- 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
>>
>
More information about the llvm-commits
mailing list