summaryrefslogtreecommitdiff
path: root/lld/ELF/LinkerScript.cpp
diff options
context:
space:
mode:
authorJustin Cady <desk@justincady.com>2023-03-06 09:35:39 -0500
committerJustin Cady <desk@justincady.com>2023-03-07 12:44:02 -0500
commit447aa48b4a02fa9e22fa45b2fb7a85c12df2e6c3 (patch)
treef113c8926475b5bf37c14afd9e82f64348b004be /lld/ELF/LinkerScript.cpp
parentba45f63782fa04a530d451dedb3cd58ed6e99664 (diff)
[ELF] Add REVERSE input section description keyword
The `REVERSE` keyword is described here: https://sourceware.org/bugzilla/show_bug.cgi?id=27565 It complements `SORT` by allowing the order of input sections to be reversed. This is particularly useful for order-dependent sections such as .init_array, where `REVERSE` can be used to either detect static initialization order fiasco issues or as a mechanism to maintain .ctors element order while transitioning to the modern .init_array. Such a transition is described here: https://discourse.llvm.org/t/is-it-possible-to-manually-specify-init-array-order/68649 Differential Revision: https://reviews.llvm.org/D145381
Diffstat (limited to 'lld/ELF/LinkerScript.cpp')
-rw-r--r--lld/ELF/LinkerScript.cpp2
1 files changed, 2 insertions, 0 deletions
diff --git a/lld/ELF/LinkerScript.cpp b/lld/ELF/LinkerScript.cpp
index 668a79b5edd7..9207751cb7d2 100644
--- a/lld/ELF/LinkerScript.cpp
+++ b/lld/ELF/LinkerScript.cpp
@@ -457,6 +457,8 @@ static void sortSections(MutableArrayRef<InputSectionBase *> vec,
return llvm::stable_sort(vec, nameComparator);
case SortSectionPolicy::Priority:
return llvm::stable_sort(vec, priorityComparator);
+ case SortSectionPolicy::Reverse:
+ return std::reverse(vec.begin(), vec.end());
}
}