summaryrefslogtreecommitdiff
path: root/lib/CodeGen
diff options
context:
space:
mode:
authorDuncan Sands <baldrick@free.fr>2011-09-02 18:07:19 +0000
committerDuncan Sands <baldrick@free.fr>2011-09-02 18:07:19 +0000
commit147272b8a70db7984a6bdfad3b5efabcb794a42e (patch)
tree9af9b3f2b5be4e345c0cb17cb6b36b0566931fdb /lib/CodeGen
parent98f213cd60f21437846ce4075c0fe15d7f09a3fd (diff)
downloadllvm-147272b8a70db7984a6bdfad3b5efabcb794a42e.tar.gz
llvm-147272b8a70db7984a6bdfad3b5efabcb794a42e.tar.bz2
llvm-147272b8a70db7984a6bdfad3b5efabcb794a42e.tar.xz
Darwin wants ctors/dtors to be ordered the other way round to linux.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@139015 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen')
-rw-r--r--lib/CodeGen/AsmPrinter/AsmPrinter.cpp11
1 files changed, 10 insertions, 1 deletions
diff --git a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
index 6084a3c8f5..ddf5f9ccde 100644
--- a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
+++ b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
@@ -1265,7 +1265,16 @@ void AsmPrinter::EmitXXStructorList(const Constant *List) {
}
// Emit the function pointers in reverse priority order.
- std::sort(Structors.rbegin(), Structors.rend(), priority_order);
+ switch (MAI->getStructorOutputOrder()) {
+ case Structors::None:
+ break;
+ case Structors::PriorityOrder:
+ std::sort(Structors.begin(), Structors.end(), priority_order);
+ break;
+ case Structors::ReversePriorityOrder:
+ std::sort(Structors.rbegin(), Structors.rend(), priority_order);
+ break;
+ }
for (unsigned i = 0, e = Structors.size(); i != e; ++i)
EmitGlobalConstant(Structors[i].second);
}