summaryrefslogtreecommitdiffstats
path: root/lld/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h
diff options
context:
space:
mode:
authorSimon Atanasyan <simon@atanasyan.com>2014-06-01 06:28:42 +0000
committerSimon Atanasyan <simon@atanasyan.com>2014-06-01 06:28:42 +0000
commitb635d0458933d56c5cbbdaf2eac323fb571c0cd9 (patch)
treefe09879209119eef77b482c1040fcedf204f0e7a /lld/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h
parent2fd910dc72c1993846fc964d4d56ea2622d0cacf (diff)
downloadbcm5719-llvm-b635d0458933d56c5cbbdaf2eac323fb571c0cd9.tar.gz
bcm5719-llvm-b635d0458933d56c5cbbdaf2eac323fb571c0cd9.zip
[Mips] Implement .{ctors,dtors}.<priority> sections ordering.
Arrange .ctors/.dtors sections in the following order: .ctors from crtbegin.o or crtbegin?.o .ctors from regular object files .ctors.* (sorted) from regular object files .ctors from crtend.o or crtend?.o This order is specific for MIPS traget. For example, on X86 the .ctors.* sections are merged into the .init_array section. llvm-svn: 209987
Diffstat (limited to 'lld/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h')
-rw-r--r--lld/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h17
1 files changed, 17 insertions, 0 deletions
diff --git a/lld/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h b/lld/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h
index b2eb496a8c5..fb5fbddff12 100644
--- a/lld/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h
+++ b/lld/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h
@@ -43,6 +43,23 @@ public:
order);
}
+ StringRef getSectionName(const DefinedAtom *da) const override {
+ return llvm::StringSwitch<StringRef>(da->customSectionName())
+ .StartsWith(".ctors", ".ctors")
+ .StartsWith(".dtors", ".dtors")
+ .Default(TargetLayout<ELFType>::getSectionName(da));
+ }
+
+ Layout::SegmentType getSegmentType(Section<ELFType> *section) const override {
+ switch (section->order()) {
+ case DefaultLayout<ELFType>::ORDER_CTORS:
+ case DefaultLayout<ELFType>::ORDER_DTORS:
+ return llvm::ELF::PT_LOAD;
+ default:
+ return TargetLayout<ELFType>::getSegmentType(section);
+ }
+ }
+
/// \brief GP offset relative to .got section.
uint64_t getGPOffset() const { return 0x7FF0; }
OpenPOWER on IntegriCloud