Index: ELF/LinkerScript.cpp =================================================================== --- ELF/LinkerScript.cpp +++ ELF/LinkerScript.cpp @@ -513,6 +513,11 @@ s->alignment = subalign; } + // Set the partition field as what OutputSection::recordSection() does. + // Partitions cannot be used with the SECTIONS command, so this is always + // 1. + sec->partition = 1; + sec->sectionIndex = i++; } } Index: test/ELF/linkerscript/dynamic.s =================================================================== --- test/ELF/linkerscript/dynamic.s +++ test/ELF/linkerscript/dynamic.s @@ -1,9 +1,13 @@ # REQUIRES: x86 + +## Test that DT_INIT_ARRAYSZ/DT_FINI_ARRAYSZ/DT_PREINIT_ARRAYSZ are computed +## correctly, no matter their associated sections are orphans or not. + # RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t1.o # RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %p/Inputs/shared.s -o %t2.o -# RUN: ld.lld -shared %t2.o -o %t2.so +# RUN: ld.lld -shared %t2.o -soname=so -o %t2.so -# RUN: echo "SECTIONS { }" > %t.script +# RUN: echo "SECTIONS { .init_array : { *(.init_array} } }" > %t.script # RUN: ld.lld %t1.o %t2.so -o %t # RUN: llvm-readobj --dynamic-table %t | FileCheck %s