HomePhabricator

[ELF] Support INSERT [AFTER|BEFORE] for orphan sections

Authored by MaskRay on Feb 10 2020, 3:58 PM.

Description

[ELF] Support INSERT [AFTER|BEFORE] for orphan sections

D43468+D44380 added INSERT [AFTER|BEFORE] for non-orphan sections. This patch
makes INSERT work for orphan sections as well.

SECTIONS {...} INSERT [AFTER|BEFORE] .foo does not set hasSectionCommands, so the result
will be similar to a regular link without a linker script. The differences when hasSectionCommands is set include:

  • image base is different
  • -z noseparate-code/-z noseparate-loadable-segments are unavailable
  • some special symbols such as _end _etext _edata are not defined

The behavior is similar to GNU ld:
INSERT is not considered an external linker script.

This feature makes the section layout more flexible. It can be used to:

  • Place .nv_fatbin before other readonly SHT_PROGBITS sections to mitigate relocation overflows.
  • Disturb the layout to expose address sensitive application bugs.

Reviewed By: grimar

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

Details

Committed
MaskRayFeb 12 2020, 8:21 AM
Reviewer
grimar
Differential Revision
D74375: [ELF] Support INSERT [AFTER|BEFORE] for orphan sections
Parents
rGb498d99338f8: [ELF] Start a new PT_LOAD if LMA region is different
Branches
Unknown
Tags
Unknown