summaryrefslogtreecommitdiffstats
path: root/lldb/packages/Python/lldbsuite/test/python_api/value/main.c
diff options
context:
space:
mode:
authorFangrui Song <maskray@google.com>2019-11-18 21:56:58 -0800
committerFangrui Song <i@maskray.me>2019-11-19 08:54:06 -0800
commit6b0eb5a6727590472e2e9cbf65fa2d7c3a18d2b5 (patch)
treeccd22fedb70f012bf9bf624d44adef37e308d47b /lldb/packages/Python/lldbsuite/test/python_api/value/main.c
parent3a76b8a538c0d20efe823f03a133c778e842270e (diff)
downloadbcm5719-llvm-6b0eb5a6727590472e2e9cbf65fa2d7c3a18d2b5.tar.gz
bcm5719-llvm-6b0eb5a6727590472e2e9cbf65fa2d7c3a18d2b5.zip
[ELF] Improve --gc-sections compatibility with GNU ld regarding section groups
Based on D70020 by serge-sans-paille. The ELF spec says: > Furthermore, there may be internal references among these sections that would not make sense if one of the sections were removed or replaced by a duplicate from another object. Therefore, such groups must be included or omitted from the linked object as a unit. A section cannot be a member of more than one group. GNU ld has 2 behaviors that we don't have: - Group members (nextInSectionGroup != nullptr) are subject to garbage collection. This includes non-SHF_ALLOC SHT_NOTE sections. In particular, discarding non-SHF_ALLOC SHT_NOTE sections is an expected behavior by the Annobin project. See https://developers.redhat.com/blog/2018/02/20/annobin-storing-information-binaries/ for more information. - Groups members are retained or discarded as a unit. Members may have internal references that are not expressed as SHF_LINK_ORDER, relocations, etc. It seems that we should be more conservative here: if a section is marked live, mark all the other member within the group. Both behaviors are reasonable. This patch implements them. A new field InputSectionBase::nextInSectionGroup tracks the next member within a group. on ELF64, this increases sizeof(InputSectionBase) froms 144 to 152. InputSectionBase::dependentSections tracks section dependencies, which is used by both --gc-sections and /DISCARD/. We can't overload it for the "next member" semantic, because we should allow /DISCARD/ to discard sections independent of --gc-sections (GNU ld behavior). This behavior may be reasonably used by `/DISCARD/ : { *(.ARM.exidx*) }` or `/DISCARD/ : { *(.note*) }` (new test `linkerscript/discard-group.s`). Reviewed By: ruiu Differential Revision: https://reviews.llvm.org/D70146
Diffstat (limited to 'lldb/packages/Python/lldbsuite/test/python_api/value/main.c')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud