[PATCH] D81887: [lld-macho] Refactor segment/section creation, sorting, and merging

Jez Ng via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Jun 15 15:29:54 PDT 2020


int3 created this revision.
int3 added a reviewer: lld-macho.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
int3 updated this revision to Diff 270884.
int3 edited the summary of this revision.
int3 added a comment.

format commit msg


There were a few issues with the previous setup:

1. The section sorting comparator used a declarative map of section names to determine the correct order, but it turns out we need to match on more than just names -- in particular, an upcoming diff will sort based on whether the S_ZERO_FILL flag is set. This diff changes the sorter to a more imperative but flexible form.

2. We were sorting OutputSections stored in a MapVector, which left the MapVector in an inconsistent state -- the wrong keys map to the wrong values! In practice, we weren't doing key lookups (only container iteration) after the sort, so this was fine, but it was still a dubious state of affairs. This diff copies the OutputSections to a vector before sorting them.

3. We were adding unneeded OutputSections to OutputSegments and then filtering them out later, which meant that we had to remember whether an OutputSegment was in a pre- or post-filtered state. This diff only adds the sections to the segments if they are needed.

In addition to those major changes, two minor ones worth noting:

1. I renamed all OutputSection variable names to `osec`, to parallel `isec`. Previously we were using some inconsistent combination of `osec`, `os`, and `section`.

2. I added a check (and a test) for InputSections with names that clashed with those of our synthetic OutputSections.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D81887

Files:
  lld/MachO/MergedOutputSection.h
  lld/MachO/OutputSection.cpp
  lld/MachO/OutputSection.h
  lld/MachO/OutputSegment.cpp
  lld/MachO/OutputSegment.h
  lld/MachO/SyntheticSections.cpp
  lld/MachO/SyntheticSections.h
  lld/MachO/Writer.cpp
  lld/test/MachO/invalid/reserved-section-name.s

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D81887.270884.patch
Type: text/x-patch
Size: 17565 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200615/b815f757/attachment-0001.bin>


More information about the llvm-commits mailing list