[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