summarylogtreecommitdiffstats
path: root/0012-init-lto-fix-PREL32-relocations.patch
diff options
context:
space:
mode:
Diffstat (limited to '0012-init-lto-fix-PREL32-relocations.patch')
-rw-r--r--0012-init-lto-fix-PREL32-relocations.patch77
1 files changed, 0 insertions, 77 deletions
diff --git a/0012-init-lto-fix-PREL32-relocations.patch b/0012-init-lto-fix-PREL32-relocations.patch
deleted file mode 100644
index 9fa77b777fbb..000000000000
--- a/0012-init-lto-fix-PREL32-relocations.patch
+++ /dev/null
@@ -1,77 +0,0 @@
-From bbc874d7b9d64809d9aab8ff9a188c02003971ad Mon Sep 17 00:00:00 2001
-From: Sami Tolvanen <samitolvanen@google.com>
-Date: Sun, 22 Mar 2020 17:01:40 -0700
-Subject: [PATCH 12/24] init: lto: fix PREL32 relocations
-
-With LTO, the compiler can rename static functions to avoid global
-naming collisions. As initcall functions are typically static,
-renaming can break references to them in inline assembly. This
-change adds a global stub with a stable name for each initcall to
-fix the issue when PREL32 relocations are used.
-
-Signed-off-by: Sami Tolvanen <samitolvanen@google.com>
----
- include/linux/init.h | 31 +++++++++++++++++++++++++++----
- 1 file changed, 27 insertions(+), 4 deletions(-)
-
-diff --git a/include/linux/init.h b/include/linux/init.h
-index af638cd6dd52..cea63f7e7705 100644
---- a/include/linux/init.h
-+++ b/include/linux/init.h
-@@ -209,26 +209,49 @@ extern bool initcall_debug;
- */
- #define __initcall_section(__sec, __iid) \
- #__sec ".init.." #__iid
-+
-+/*
-+ * With LTO, the compiler can rename static functions to avoid
-+ * global naming collisions. We use a global stub function for
-+ * initcalls to create a stable symbol name whose address can be
-+ * taken in inline assembly when PREL32 relocations are used.
-+ */
-+#define __initcall_stub(fn, __iid, id) \
-+ __initcall_name(initstub, __iid, id)
-+
-+#define __define_initcall_stub(__stub, fn) \
-+ int __init __stub(void); \
-+ int __init __stub(void) \
-+ { \
-+ return fn(); \
-+ } \
-+ __ADDRESSABLE(__stub)
- #else
- #define __initcall_section(__sec, __iid) \
- #__sec ".init"
-+
-+#define __initcall_stub(fn, __iid, id) fn
-+
-+#define __define_initcall_stub(__stub, fn) \
-+ __ADDRESSABLE(fn)
- #endif
-
- #ifdef CONFIG_HAVE_ARCH_PREL32_RELOCATIONS
--#define ____define_initcall(fn, __name, __sec) \
-- __ADDRESSABLE(fn) \
-+#define ____define_initcall(fn, __stub, __name, __sec) \
-+ __define_initcall_stub(__stub, fn) \
- asm(".section \"" __sec "\", \"a\" \n" \
- __stringify(__name) ": \n" \
-- ".long " #fn " - . \n" \
-+ ".long " __stringify(__stub) " - . \n" \
- ".previous \n");
- #else
--#define ____define_initcall(fn, __name, __sec) \
-+#define ____define_initcall(fn, __unused, __name, __sec) \
- static initcall_t __name __used \
- __attribute__((__section__(__sec))) = fn;
- #endif
-
- #define __unique_initcall(fn, id, __sec, __iid) \
- ____define_initcall(fn, \
-+ __initcall_stub(fn, __iid, id), \
- __initcall_name(initcall, __iid, id), \
- __initcall_section(__sec, __iid))
-
---
-2.28.0
-