HomePhabricator

[yaml2obj] - Change how we handle implicit sections.

Description

[yaml2obj] - Change how we handle implicit sections.

We have a few sections that can be added implicitly to the output:
".dynsym", ".dynstr", ".symtab", ".strtab" and ".shstrtab".

Problem appears when such section is listed explicitly in YAML.
In that case it's content is written twice:
first time during writing of regular sections listed in the document
and second time during special handling.

Because of that their file offsets can become unexpectedly broken:
(yaml file for sample below lists .dynsym explicitly before .text.foo)

Before patch:

[Nr] Name              Type             Address           Offset
     Size              EntSize          Flags  Link  Info  Align
[ 0]                   NULL             0000000000000000  00000000
     0000000000000000  0000000000000000           0     0     0
[ 1] .dynsym           DYNSYM           0000000000000100  00000250
     0000000000000030  0000000000000018   A       6     0     8
[ 2] .text.foo         PROGBITS         0000000000000200  00000200
     0000000000000000  0000000000000000  AX       0     0     0

After patch:
Section Headers:

[Nr] Name         Type             Address           Offset
     Size              EntSize          Flags  Link  Info  Align
[ 0]                   NULL             0000000000000000  00000000
     0000000000000000  0000000000000000           0     0     0
[ 1] .dynsym           DYNSYM           0000000000000100  00000200
     0000000000000030  0000000000000018   A       6     0     8
[ 2] .text.foo         PROGBITS         0000000000000200  00000230
     0000000000000000  0000000000000000  AX       0     0     0

This patch reorganizes our code and fixes the issue described.

Differential revision: https://reviews.llvm.org/D62809

Details

Committed
grimarJun 5 2019, 6:16 AM
Differential Revision
D62809: [yaml2obj] - Change how we handle implicit sections.
Parents
rL362601: [ARM] Allow "-march=foo+fp" to vary with foo
Branches
Unknown
Tags
Unknown