[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