mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-02-17 08:21:13 +00:00
[lld-macho][nfc] Represent the image loader cache with a ConcatInputSection
We don't need to define any special behavior for this section, so creating a subclass for it is redundant. Reviewed By: #lld-macho, thakis Differential Revision: https://reviews.llvm.org/D104199
This commit is contained in:
parent
b2a0739012
commit
c5c05ffa45
@ -477,15 +477,6 @@ void StubHelperSection::setup() {
|
||||
/*noDeadStrip=*/false);
|
||||
}
|
||||
|
||||
ImageLoaderCacheSection::ImageLoaderCacheSection()
|
||||
: ConcatInputSection(segment_names::data, section_names::data) {
|
||||
uint8_t *arr = bAlloc.Allocate<uint8_t>(target->wordSize);
|
||||
memset(arr, 0, target->wordSize);
|
||||
data = {arr, target->wordSize};
|
||||
align = target->wordSize;
|
||||
live = true;
|
||||
}
|
||||
|
||||
LazyPointerSection::LazyPointerSection()
|
||||
: SyntheticSection(segment_names::data, section_names::lazySymbolPtr) {
|
||||
align = target->wordSize;
|
||||
|
@ -326,16 +326,6 @@ public:
|
||||
Defined *dyldPrivate = nullptr;
|
||||
};
|
||||
|
||||
// This section contains space for just a single word, and will be used by dyld
|
||||
// to cache an address to the image loader it uses. Note that unlike the other
|
||||
// synthetic sections, which are OutputSections, the ImageLoaderCacheSection is
|
||||
// an InputSection that gets merged into the __data OutputSection.
|
||||
class ImageLoaderCacheSection : public ConcatInputSection {
|
||||
public:
|
||||
ImageLoaderCacheSection();
|
||||
uint64_t getSize() const override { return target->wordSize; }
|
||||
};
|
||||
|
||||
// Note that this section may also be targeted by non-lazy bindings. In
|
||||
// particular, this happens when branch relocations target weak symbols.
|
||||
class LazyPointerSection : public SyntheticSection {
|
||||
@ -600,8 +590,8 @@ struct InStruct {
|
||||
LazyPointerSection *lazyPointers = nullptr;
|
||||
StubsSection *stubs = nullptr;
|
||||
StubHelperSection *stubHelper = nullptr;
|
||||
ImageLoaderCacheSection *imageLoaderCache = nullptr;
|
||||
UnwindInfoSection *unwindInfo = nullptr;
|
||||
ConcatInputSection *imageLoaderCache = nullptr;
|
||||
};
|
||||
|
||||
extern InStruct in;
|
||||
|
@ -1070,8 +1070,18 @@ void macho::createSyntheticSections() {
|
||||
in.lazyPointers = make<LazyPointerSection>();
|
||||
in.stubs = make<StubsSection>();
|
||||
in.stubHelper = make<StubHelperSection>();
|
||||
in.imageLoaderCache = make<ImageLoaderCacheSection>();
|
||||
in.unwindInfo = makeUnwindInfoSection();
|
||||
|
||||
// This section contains space for just a single word, and will be used by
|
||||
// dyld to cache an address to the image loader it uses.
|
||||
ArrayRef<uint8_t> data{bAlloc.Allocate<uint8_t>(target->wordSize),
|
||||
target->wordSize};
|
||||
in.imageLoaderCache = make<ConcatInputSection>(
|
||||
segment_names::data, section_names::data, /*file=*/nullptr, data,
|
||||
/*align=*/target->wordSize, /*flags=*/S_REGULAR);
|
||||
// References from dyld are not visible to us, so ensure this section is
|
||||
// always treated as live.
|
||||
in.imageLoaderCache->live = true;
|
||||
}
|
||||
|
||||
OutputSection *macho::firstTLVDataSection = nullptr;
|
||||
|
Loading…
x
Reference in New Issue
Block a user