summaryrefslogtreecommitdiffstats
path: root/toolkit/library/StaticXULComponentsEnd/StaticXULComponentsEnd.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/library/StaticXULComponentsEnd/StaticXULComponentsEnd.cpp')
-rw-r--r--toolkit/library/StaticXULComponentsEnd/StaticXULComponentsEnd.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/toolkit/library/StaticXULComponentsEnd/StaticXULComponentsEnd.cpp b/toolkit/library/StaticXULComponentsEnd/StaticXULComponentsEnd.cpp
new file mode 100644
index 000000000..28fd9d484
--- /dev/null
+++ b/toolkit/library/StaticXULComponentsEnd/StaticXULComponentsEnd.cpp
@@ -0,0 +1,13 @@
+#include "mozilla/Module.h"
+
+/* Ensure end_kPStaticModules is at the end of the .kPStaticModules section
+ * on Windows. Somehow, placing the object last is not enough with PGO/LTCG. */
+#ifdef _MSC_VER
+/* Sections on Windows are in two parts, separated with $. When linking,
+ * sections with the same first part are all grouped, and ordered
+ * alphabetically with the second part as sort key. */
+# pragma section(".kPStaticModules$Z", read)
+# undef NSMODULE_SECTION
+# define NSMODULE_SECTION __declspec(allocate(".kPStaticModules$Z"), dllexport)
+#endif
+NSMODULE_DEFN(end_kPStaticModules) = nullptr;