llvm-project/lld/test/ELF/linkerscript
James Henderson 8d0efdd5db [ELF] Reset OutputSection size prior to processing linker script commands
The size of an OutputSection is calculated early, to aid handling of compressed
debug sections. However, subsequent to this point, unused synthetic sections are
removed. In the event that an OutputSection, from which such an InputSection is
removed, is still required (e.g. because it has a symbol assignment), and no longer
has any InputSections, dot assignments, or BYTE()-family directives, the size
member is never updated when processing the commands. If the removed InputSection
had a non-zero size (such as a .got.plt section), the section ends up with the
wrong size in the output.

The fix is to reset the OutputSection size prior to processing the linker script
commands relating to that OutputSection. This ensures that the size is correct even
in the above situation.

Additionally, to reduce the risk of developers misusing OutputSection Size and
InputSection OutSecOff, they are set to simply the number of InputSections in an
OutputSection, and the corresponding index respectively. We cannot completely
stop using them, due to SHF_LINK_ORDER sections requiring them.

Compressed debug sections also require the full size. This is now calculated in
maybeCompress for these kinds of sections.

Reviewers: ruiu, rafael

Differential Revision: https://reviews.llvm.org/D38361

llvm-svn: 320472
2017-12-12 11:51:13 +00:00
..
Inputs Add missing test. NFC. 2017-11-30 22:29:14 +00:00
absolute-expr.s Remove string table offsets from tests. 2016-11-01 21:26:28 +00:00
absolute.s Support ABSOLUTE on the right hand side in linker scripts 2017-03-15 03:33:23 +00:00
absolute2.s Consider ForceAbsolute again in moveAbsRight. 2017-09-20 19:24:57 +00:00
addr-zero.s Add a test that now passes. 2017-03-17 13:19:15 +00:00
addr.s Remove useless file prefix. 2016-09-02 20:40:53 +00:00
align-empty.s Don't depend on lld creating space for the headers. 2016-09-30 00:06:24 +00:00
align-section-offset.s If user requested section alignment is greater than MaxPageSize, propagate it to segment headers correctly. 2017-07-24 21:27:02 +00:00
align-section.s Don't crash on an empty section with an ALIGN. 2017-07-22 00:00:51 +00:00
align.s [ELF] - Linkerscript: fix issue with SUBALIGN. 2017-10-25 14:50:51 +00:00
alignof.s [ELF] Print file:line for 'undefined section' errors 2016-11-28 09:58:04 +00:00
alternate-sections.s Replace MergeOutputSection with a synthetic section. 2017-02-03 13:06:18 +00:00
arm-exidx-order.s [ELF] Change default output section type to SHT_NOBITS 2017-12-11 23:25:27 +00:00
arm-exidx-phdrs.s Always create a PT_ARM_EXIDX if needed. 2016-11-28 00:40:21 +00:00
arm-lscript.s Do not track section types of previous sections, always use PROGBITS for dummy sections. 2017-05-24 16:48:31 +00:00
assert.s [ELF] - Make ASSERT() return Dot instead of evaluated value. 2017-02-21 07:33:38 +00:00
at-addr.s [ELF] Don't output headers into a segment if there's no space for them 2017-08-23 18:44:34 +00:00
at.s [ELF] Don't output headers into a segment if there's no space for them 2017-08-23 18:44:34 +00:00
bss-fill.s [ELF] - Do not crash when linkerscript applies fill to .bss. 2017-05-30 05:48:09 +00:00
comdat-gc.s Linkerscript: don't crash when GC .debug_line 2016-09-26 09:04:16 +00:00
common-assign.s [ELF] - Do not crash when assign common symbol's values in script 2017-01-20 09:45:36 +00:00
common-exclude.s Currently lld creates a single section to collect all commons. There is no way 2017-09-08 16:22:43 +00:00
common-filespec.s Currently lld creates a single section to collect all commons. There is no way 2017-09-08 16:22:43 +00:00
common.s Currently lld creates a single section to collect all commons. There is no way 2017-09-08 16:22:43 +00:00
compress-debug-sections.s Update testcases for llvm-dwarfdump command line interface change 2017-09-11 23:34:12 +00:00
constructor.s [ELF] - Committed missing ld.ldd invocation to constructor.s 2017-01-23 16:55:13 +00:00
copy-rel-symbol-value-err.s Handle copy relocations in symbol assignments. 2017-11-30 17:51:10 +00:00
copy-rel-symbol-value.s Handle copy relocations in symbol assignments. 2017-11-30 17:51:10 +00:00
data-commands-gc.s Check the produced file instead of stderr. 2017-06-28 01:46:31 +00:00
data-commands.s [ELF] Fix test case thinko from r289152 2016-12-09 21:51:37 +00:00
data-segment-relro.s [ELF] - Do --hash-style=both by default. 2017-10-06 09:37:44 +00:00
define.s [ELF] - Linkerscript: implement DEFINED() command. 2016-09-23 13:17:23 +00:00
diagnostic.s [ELF] - Do not report multiple errors for single one in ScriptLexer::setError. 2017-08-23 08:48:39 +00:00
discard-interp.s Don't depend on lld creating space for the headers. 2016-09-30 00:06:24 +00:00
discard-print-gc.s Fix --print-gc-sections with linker scripts. 2017-02-17 19:37:30 +00:00
discard-section-err.s Currently lld creates a single section to collect all commons. There is no way 2017-09-08 16:22:43 +00:00
discard-section-metadata.s Change section flag character for SHF_LINK_ORDER to "o". 2017-04-04 22:35:16 +00:00
discard-section.s Alternative fix for reloc tareting discarded section 2016-10-12 12:31:34 +00:00
dot-is-not-abs.s The expr '.' is not absolute. 2016-10-31 21:36:23 +00:00
double-bss.s Rewrite CommonInputSection as a synthetic input section. 2016-11-05 23:05:47 +00:00
dynamic-sym.s Allow use define symbols to override linker defined ones. 2016-11-17 21:20:16 +00:00
dynamic.s Remove useless file prefix. 2016-09-02 20:40:53 +00:00
early-assign-symbol.s Consider only A.Sec in moveAbsRight. 2017-09-20 18:56:08 +00:00
edata-etext.s Change the error message format for undefined symbols. 2017-03-30 19:13:47 +00:00
eh-frame-hdr.s Revert "Add terminator to .eh_frame sections" 2017-02-28 18:55:08 +00:00
eh-frame-reloc-out-of-range.s [ELF] When a relocation is out of range print the value and the range 2017-12-11 20:47:21 +00:00
eh-frame.s [ELF] Propely handle .eh_frame in linker scripts 2017-03-10 20:00:42 +00:00
ehdr_start.s [ELF] Define __ehdr_start unconditionally even when using linker script 2017-05-10 16:20:33 +00:00
emit-reloc-section-names.s [ELF] - Produce relocation section name consistent with output section name when --emit-reloc used with linker script. 2017-12-01 09:04:52 +00:00
emit-reloc.s [ELF] - Do --hash-style=both by default. 2017-10-06 09:37:44 +00:00
emit-relocs-discard.s [ELF] - Added support of linkerscript's "/DISCARD/" for --emit-relocs 2017-02-17 19:46:47 +00:00
emit-relocs-ehframe-discard.s [ELF] - Added support of linkerscript's "/DISCARD/" for --emit-relocs 2017-02-17 19:46:47 +00:00
emit-relocs-multiple.s [ELF] - Produce relocation section name consistent with output section name when --emit-reloc used with linker script. 2017-12-01 09:04:52 +00:00
empty-load.s Don't create a bogus PT_PHDR if we don't allocate the headers. 2017-01-20 20:46:15 +00:00
empty-tls.s Don't crash if PT_TLS is empty. 2016-07-29 19:24:27 +00:00
entry.s Remove `REQUIRES: shell` hack to workaround an echo issue. 2016-12-09 18:49:37 +00:00
exclude-multiple.s [ELF] - Linkerscript: reimplement readSectionExcludes() 2016-09-21 08:53:21 +00:00
excludefile.s [ELF] Recommit r299635 to pad x86 executable sections with 0xcc 2017-04-07 10:36:42 +00:00
exidx-crash.s Fix REQUIRES line. 2017-07-18 22:14:26 +00:00
expr-invalid-sec.s [ELF] - Linkerscript: improved error reporting. 2017-06-07 08:54:43 +00:00
expr-sections.s Handle & and | of non abs values. 2017-03-17 14:55:36 +00:00
extend-pt-load.s [ELF] Change default output section type to SHT_NOBITS 2017-12-11 23:25:27 +00:00
filename-spec.s Currently lld uses base names of files to match against file patterns in 2017-08-24 22:01:40 +00:00
fill-exec-sections.s [ELF] Recommit r299635 to pad x86 executable sections with 0xcc 2017-04-07 10:36:42 +00:00
fill.s Fix FILL linker script command. 2017-04-13 23:40:00 +00:00
got-write-offset.s [ELF] Fix writing the content of the .got section in a wrong place. 2017-07-14 08:10:45 +00:00
group.s Remove `REQUIRES: shell` hack to workaround an echo issue. 2016-12-09 18:49:37 +00:00
header-addr.s [ELF] - Do --hash-style=both by default. 2017-10-06 09:37:44 +00:00
header-phdr.s Fix header location with PHDR. 2017-09-28 18:12:13 +00:00
huge-temporary-file.s [ELF] - Fix for huge-temporary-file.s 2017-01-17 14:06:44 +00:00
image-base.s [ELF] Set Dot initially to --image-base value when using linker scripts 2017-10-10 10:09:35 +00:00
implicit-program-header.s [ELF] - Do --hash-style=both by default. 2017-10-06 09:37:44 +00:00
include-cycle.s [ELF] Fix issue with test when build path contains '@' 2017-09-11 15:55:54 +00:00
input-order.s Remove useless file prefix. 2016-09-02 20:40:53 +00:00
input-sec-dup.s Make tests less dependent on the exact layout. 2016-09-20 15:08:24 +00:00
lazy-symbols.s [ELF] Insert linkerscript symbols directly into symbol table 2017-02-21 22:32:51 +00:00
linker-script-in-search-path.s [ELF] Fall back to search dirs for linker scripts specified with -T 2017-11-20 15:43:20 +00:00
linkerscript.s [ELF] Fall back to search dirs for linker scripts specified with -T 2017-11-20 15:43:20 +00:00
loadaddr.s [ELF] Print file:line for 'undefined section' errors 2016-11-28 09:58:04 +00:00
locationcountererr.s [ELF] - Improve diagnostic messages for move location counter errors. 2017-02-21 14:50:38 +00:00
locationcountererr2.s [ELF] - Allow moving location counter backward in some cases. 2017-07-12 14:50:25 +00:00
memory-at.s [ELF] - Linkerscript: set load address correctly if MEMORY command used. 2017-09-06 09:35:09 +00:00
memory-err.s [ELF] - Don't segfault when accessing location counter inside MEMORY command. 2017-08-17 08:47:21 +00:00
memory.s [ELF, LinkerScript] Memory region name parsing fix 2017-07-26 21:51:09 +00:00
memory2.s [ELF] - Fix calculation of memory region offset. 2017-07-25 08:29:29 +00:00
memory3.s [ELF] - Linkerscript: fixed non-determinism when handling MEMORY. 2017-11-03 08:21:51 +00:00
merge-sections-reloc.s Remove useless file prefix. 2016-09-02 20:40:53 +00:00
merge-sections-syms.s Replace MergeOutputSection with a synthetic section. 2017-02-03 13:06:18 +00:00
merge-sections.s [ELF] Change default output section type to SHT_NOBITS 2017-12-11 23:25:27 +00:00
multi-sections-constraint.s Make test less dependent on the section order. 2016-09-20 20:48:54 +00:00
multiple-tbss.s Fix VA computation for tbss. 2016-09-22 12:35:44 +00:00
no-pt-load.s Avoid accessing an end() iterator. 2016-11-17 14:18:08 +00:00
no-space.s [ELF] - Do --hash-style=both by default. 2017-10-06 09:37:44 +00:00
noload.s Fix a test that didn't actually test anything. 2017-12-08 00:00:37 +00:00
non-absolute.s [ELF] - Linkerscript: properly mark minus expression with non-absolute flag 2017-02-01 09:01:16 +00:00
non-absolute2.s Handle symbol assignments before the first section switch. 2017-02-06 22:21:46 +00:00
non-alloc-segment.s [LLD][LinkerScript] Allow non-alloc sections to be assigned to segments. 2017-07-03 10:11:25 +00:00
non-alloc.s [ELF] - Do --hash-style=both by default. 2017-10-06 09:37:44 +00:00
numbers.s Make a few tests shorter. NFC. 2017-04-12 22:38:02 +00:00
obj-symbol-value.s Change our linker script expr representation. 2017-03-17 13:05:04 +00:00
openbsd-bootdata.s [ELF] - Teach LLD to recognize PT_OPENBSD_BOOTDATA 2016-12-06 17:57:42 +00:00
openbsd-randomize.s [ELF] Choose default segment when it is not specified 2016-10-19 15:04:49 +00:00
openbsd-wxneeded.s [ELF] - Update testcases after llvm change. 2016-10-18 11:11:03 +00:00
operators.s [ELF] - Do not crash when ALIGN/DATA_SEGMENT_ALIGN expression used with zero value. 2017-07-28 09:27:49 +00:00
orphan-align.s Don't depend on lld creating space for the headers. 2016-09-30 00:06:24 +00:00
orphan-discard.s [ELF] When placing orphans, handle case when last section is dead 2017-10-23 00:51:08 +00:00
orphan-end.s Tweak orphan section placement. 2017-09-19 17:29:58 +00:00
orphan-first-cmd.s [ELF] - Linkerscript: make section with no content to be SHT_PROGBITS by default. 2017-04-14 09:37:00 +00:00
orphan-phdrs.s [LLD] Fix findOrphanPos to consistently ignore "dead" OutputSection's 2017-10-10 10:05:52 +00:00
orphan-report.s [ELF] - Implement --orphan-handling option. 2017-10-25 15:20:30 +00:00
orphan.s ELF: Place relro sections after non-relro sections in r/w segment. 2017-01-10 01:21:30 +00:00
orphans.s Revert "Revert "Only restrict order if both sections are in the script."" 2016-09-20 22:43:15 +00:00
ouputformat.s Remove useless file prefix. 2016-09-02 20:40:53 +00:00
out-of-order.s [ELF] - Do --hash-style=both by default. 2017-10-06 09:37:44 +00:00
output-too-large.s [LLD] Mark a number of x86 only tests to require x86 2017-07-18 18:40:50 +00:00
outputarch.s [ELF] - Linkerscript - fix handling of OUTPUT_ARCH command. 2017-02-08 09:59:06 +00:00
outsections-addr.s Make a few tests shorter. NFC. 2017-04-12 22:38:02 +00:00
page-size-align.s Use the correct MaxPageSize. 2016-12-07 20:10:43 +00:00
page-size.s Make a few tests shorter. NFC. 2017-04-12 22:38:02 +00:00
phdr-check.s [ELF] Don't output headers into a segment if there's no space for them 2017-08-23 18:44:34 +00:00
phdrs-flags.s [ELF] Choose default segment when it is not specified 2016-10-19 15:04:49 +00:00
phdrs.s Change which input sections we concatenate 2017-01-05 14:20:35 +00:00
provide-shared.s Add missing test. NFC. 2017-11-30 22:29:14 +00:00
pt_gnu_eh_frame.s [ELF] Fix crash when .eh_frame(_hdr) is discarded 2017-03-14 08:49:09 +00:00
region-alias.s [ELF] - Linkerscript: implement REGION_ALIAS. 2017-09-08 08:23:15 +00:00
repsection-symbol.s [ELF] - Do --hash-style=both by default. 2017-10-06 09:37:44 +00:00
repsection-va.s Make test less dependent on the section order. 2016-09-20 20:48:54 +00:00
rosegment.s Disable --rosegment when we have linker scripts. 2016-09-20 15:22:27 +00:00
searchdir.s Remove `REQUIRES: shell` hack to workaround an echo issue. 2016-12-09 18:49:37 +00:00
section-align.s [ELF] Handle output section alignment in linker scripts 2017-02-07 23:42:31 +00:00
section-metadata.s Fix pr32816. 2017-05-01 20:32:39 +00:00
sections-constraint.s Order writable executable sections before writable ones. 2017-05-26 17:23:25 +00:00
sections-constraint2.s Fix constraint checking in ONLY_IF_RO. 2016-09-16 20:34:02 +00:00
sections-constraint3.s Only process commands in a ONLY_IF_RO if it matches. 2016-09-16 21:05:36 +00:00
sections-constraint4.s [ELF] Linkerscript: fixed bug about commands processing. 2016-09-17 09:50:10 +00:00
sections-constraint5.s Implement ONLY_IF_RO/ONLY_IF_RW like bfd. 2016-09-21 18:33:44 +00:00
sections-gc.s [ELF] - Do not segfault when using --gc-sections with linker script 2017-02-21 15:46:43 +00:00
sections-gc2.s Fully precise gc handling of __start and __stop symbols. 2017-03-06 18:48:18 +00:00
sections-keep.s Include version string into ".comment" section. 2016-11-10 20:20:37 +00:00
sections-padding.s [ELF] Recommit r299635 to pad x86 executable sections with 0xcc 2017-04-07 10:36:42 +00:00
sections-sort.s [ELF] - Do --hash-style=both by default. 2017-10-06 09:37:44 +00:00
sections.s Error on trying to discard .dynamic. 2017-06-16 23:45:35 +00:00
segment-headers.s [ELF] Don't output headers into a segment if there's no space for them 2017-08-23 18:44:34 +00:00
segment-none.s [LLD][LinkerScript] Add support for segment NONE. 2017-06-19 15:28:58 +00:00
segment-start.s [ELF] - Do --hash-style=both by default. 2017-10-06 09:37:44 +00:00
sizeof.s Allow SIZEOF() command on nonexistent section. 2016-11-17 20:27:10 +00:00
sizeofheaders.s Disable --rosegment when we have linker scripts. 2016-09-20 15:22:27 +00:00
sort-constructors.s Remove useless file prefix. 2016-09-02 20:40:53 +00:00
sort-init.s [ELF] - Linkerscript: implemented SORT_BY_INIT_PRIORITY. 2016-09-15 19:15:12 +00:00
sort-nested.s Make tests less dependent on the exact layout. 2016-09-20 15:08:24 +00:00
sort-non-script.s [ELF] - Do --hash-style=both by default. 2017-10-06 09:37:44 +00:00
sort.s [ELF] - Accept --sort-section=xxx command form. 2016-12-16 11:59:52 +00:00
sort2.s Don't depend on lld creating space for the headers. 2016-09-30 00:06:24 +00:00
start-end.s Remove useless file prefix. 2016-09-02 20:40:53 +00:00
subalign.s [ELF] - Linkerscript: fix issue with SUBALIGN. 2017-10-25 14:50:51 +00:00
symbol-assignexpr.s [ELF] - Linkerscript: Add `~` as separate math token. 2017-10-12 08:40:12 +00:00
symbol-conflict.s The expr '.' is not absolute. 2016-10-31 21:36:23 +00:00
symbol-memoryexpr.s Add memory ORIGIN and LENGTH expression support 2017-05-09 18:24:38 +00:00
symbol-only-flags.s [ELF] Change default output section type to SHT_NOBITS 2017-12-11 23:25:27 +00:00
symbol-only.s [ELF] Change default output section type to SHT_NOBITS 2017-12-11 23:25:27 +00:00
symbol-ordering-file.s [ELF] - Fix "--symbol-ordering-file doesn't work with linker scripts" 2017-08-04 10:25:29 +00:00
symbol-reserved.s [ELF] Generate symbol assignments for predefined symbols 2017-09-01 02:23:31 +00:00
symbolreferenced.s Remove useless file prefix. 2016-09-02 20:40:53 +00:00
symbols-non-alloc.s Set non alloc section address to 0 earlier. 2017-06-13 20:57:43 +00:00
symbols-synthetic.s Revert "Add terminator to .eh_frame sections" 2017-02-28 18:55:08 +00:00
symbols.s [ELF] - Simplify and improve symbols.s testcase. 2017-09-08 09:31:01 +00:00
tbss.s Don't depend on lld creating space for the headers. 2016-09-30 00:06:24 +00:00
thunk-gen-mips.s [ELF][MIPS] Fix crash in LLD when linking code that needs PIC thunks 2017-11-20 15:37:19 +00:00
ttext-script.s Prefer -Ttext over linker script values. 2017-06-20 01:51:50 +00:00
undef.s Remove useless file prefix. 2016-09-02 20:40:53 +00:00
unused-synthetic.s [ELF] Reset OutputSection size prior to processing linker script commands 2017-12-12 11:51:13 +00:00
va.s Start linker scripts at 0. 2016-09-30 00:16:11 +00:00
version-linker-symbol.s Create reserved symbols early so they can be versioned. 2017-12-11 17:23:28 +00:00
visibility.s Correctly merge visibility of linkerscript created symbols. 2016-10-31 13:14:53 +00:00
wildcards.s Include version string into ".comment" section. 2016-11-10 20:20:37 +00:00
wildcards2.s Make tests less dependent on the exact layout. 2016-09-20 15:08:24 +00:00