From: Andi Kleen <andi@firstfloor.org>
To: linux-kernel@vger.kernel.org
Cc: x86@kernel.org, mmarek@suse.cz, linux-kbuild@vger.kernel.org,
JBeulich@suse.com, akpm@linux-foundation.org,
Andi Kleen <ak@linux.intel.com>
Subject: [PATCH 55/74] lto, workaround: Add workaround for initcall reordering
Date: Sat, 18 Aug 2012 19:56:51 -0700 [thread overview]
Message-ID: <1345345030-22211-56-git-send-email-andi@firstfloor.org> (raw)
In-Reply-To: <1345345030-22211-1-git-send-email-andi@firstfloor.org>
From: Andi Kleen <ak@linux.intel.com>
Work around a LTO gcc problem: when there is no reference to a variable
in a module it will be moved to the end of the program. This causes
reordering of initcalls which the kernel does not like.
Add a dummy reference function to avoid this. The function is
deleted by the linker.
This replaces a previous much slower workaround.
Thanks to Honza Hubicka for suggesting this technique.
Signed-off-by: Andi Kleen <ak@linux.intel.com>
---
include/linux/init.h | 20 +++++++++++++++++++-
1 files changed, 19 insertions(+), 1 deletions(-)
diff --git a/include/linux/init.h b/include/linux/init.h
index c2f06b3..e425800 100644
--- a/include/linux/init.h
+++ b/include/linux/init.h
@@ -176,6 +176,23 @@ extern bool initcall_debug;
#ifndef __ASSEMBLY__
+#ifdef CONFIG_LTO
+/* Work around a LTO gcc problem: when there is no reference to a variable
+ * in a module it will be moved to the end of the program. This causes
+ * reordering of initcalls which the kernel does not like.
+ * Add a dummy reference function to avoid this. The function is
+ * deleted by the linker.
+ */
+#define LTO_REFERENCE_INITCALL(x) \
+ ; /* yes this is needed */ \
+ static __used __exit void *reference_##x(void) \
+ { \
+ return &x; \
+ }
+#else
+#define LTO_REFERENCE_INITCALL(x)
+#endif
+
/* initcalls are now grouped by functionality into separate
* subsections. Ordering inside the subsections is determined
* by link order.
@@ -188,7 +205,8 @@ extern bool initcall_debug;
#define __define_initcall(level,fn,id) \
static initcall_t __initcall_##fn##id __used \
- __attribute__((__section__(".initcall" level ".init"))) = fn
+ __attribute__((__section__(".initcall" level ".init"))) = fn \
+ LTO_REFERENCE_INITCALL(__initcall_##fn##id)
/*
* Early initcalls run before initializing SMP.
--
1.7.7.6
next prev parent reply other threads:[~2012-08-19 2:57 UTC|newest]
Thread overview: 128+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-19 2:55 RFC: Link Time Optimization support for the kernel Andi Kleen
2012-08-19 2:55 ` [PATCH 01/74] Add __visible Andi Kleen
2012-08-19 2:55 ` [PATCH 02/74] sections: Make all standard section identifiers __visible Andi Kleen
2012-08-19 2:55 ` [PATCH 03/74] sections: Make external kallsyms tables __visible Andi Kleen
2012-08-19 7:53 ` Jan Beulich
2012-08-19 15:29 ` Andi Kleen
2012-08-19 2:56 ` [PATCH 04/74] sections: Add __visible to ia64 sections Andi Kleen
2012-08-19 2:56 ` [PATCH 05/74] sections: Add __visible to m68k sections Andi Kleen
2012-08-19 2:56 ` [PATCH 06/74] sections: Add __visible to powerpc sections Andi Kleen
2012-08-19 2:56 ` [PATCH 07/74] sections: Add __visible to sh sections Andi Kleen
2012-08-19 2:56 ` [PATCH 08/74] sections: Add __visible to tile sections Andi Kleen
2012-08-19 2:56 ` [PATCH 09/74] sections: Add __visible to x86 sections Andi Kleen
2012-08-19 2:56 ` [PATCH 10/74] sections: Add __visible to drivers/{base,pci} sections Andi Kleen
2012-08-19 2:56 ` [PATCH 11/74] sections: Add __visible to rapidio sections Andi Kleen
2012-08-19 2:56 ` [PATCH 12/74] sections: Add __visible to jump_label sections Andi Kleen
2012-08-19 2:56 ` [PATCH 13/74] sections: Add __visible to init/* sections Andi Kleen
2012-08-19 2:56 ` [PATCH 14/74] sections: Add __visible to kernel/* sections Andi Kleen
2012-08-19 2:56 ` [PATCH 15/74] sections: Add __visible to kernel/trace/* sections Andi Kleen
2012-08-19 2:56 ` [PATCH 16/74] sections: Add __visible to lib/* sections Andi Kleen
2012-08-19 2:56 ` [PATCH 17/74] lto: Make asmlinkage __visible Andi Kleen
2012-08-19 2:56 ` [PATCH 18/74] lto, wan/sbni: Make inline assembler symbols visible and assembler global Andi Kleen
2012-08-19 2:56 ` [PATCH 19/74] x86, lto: Add missing asmlinkages and __visible Andi Kleen
2012-08-19 2:56 ` [PATCH 20/74] x86, lto: Change dotraplinkage into __visible on 32bit Andi Kleen
2012-09-01 14:44 ` Michal Marek
2012-08-19 2:56 ` [PATCH 21/74] lto: Make lockdep_sys_exit asmlinkage Andi Kleen
2012-08-19 2:56 ` [PATCH 22/74] lto: Change kernel_execve to asmlinkage for all architectures Andi Kleen
2012-08-19 2:56 ` [PATCH 23/74] lto, mutex: Mark __visible Andi Kleen
2012-08-19 2:56 ` [PATCH 24/74] lto: Mark do_exit asmlinkage Andi Kleen
2012-08-19 2:56 ` [PATCH 25/74] x86, lto: Fix sys_call_table type in asm/syscall.h v2 Andi Kleen
2012-08-19 2:56 ` [PATCH 26/74] lto, sound: Fix export symbols for !CONFIG_MODULES Andi Kleen
2012-08-20 8:30 ` Takashi Iwai
2012-08-20 9:45 ` Andi Kleen
2012-08-20 9:53 ` Takashi Iwai
2012-08-19 2:56 ` [PATCH 27/74] lto: Mark EXPORT_SYMBOL symbols __visible Andi Kleen
2012-08-20 6:54 ` Rusty Russell
2012-08-20 9:49 ` Andi Kleen
2012-08-19 2:56 ` [PATCH 28/74] lto: Make ksymtab and kcrctab symbols and __this_module __visible Andi Kleen
2012-08-19 2:56 ` [PATCH 29/74] x86, lto: Make amd.c vide visible Andi Kleen
2012-08-19 2:56 ` [PATCH 30/74] x86, lto: Fix AMD K6 indirect call check Andi Kleen
2012-08-19 2:56 ` [PATCH 31/74] x86, lto: Make various variables used by assembler code __visible Andi Kleen
2012-08-19 2:56 ` [PATCH 32/74] lto, PNP: Fix the inline assembler to use asmlinkage symbols Andi Kleen
2012-08-19 2:56 ` [PATCH 33/74] x86, lto, apm: Make APM data structure used from assembler visible Andi Kleen
2012-08-19 2:56 ` [PATCH 34/74] x86, lto, lguest: Fix C functions used by inline assembler Andi Kleen
2012-08-19 2:56 ` [PATCH 35/74] lto, crypto, aes: mark AES tables __visible Andi Kleen
2012-08-20 8:21 ` Herbert Xu
2012-08-19 2:56 ` [PATCH 36/74] lto, crypto, camelia: Make camelia tables used by assembler __visible Andi Kleen
2012-08-20 8:21 ` Herbert Xu
2012-08-19 2:56 ` [PATCH 37/74] lto, KVM: Don't assume asm statements end up in the same assembler file Andi Kleen
2012-08-19 8:59 ` Avi Kivity
2012-08-19 15:09 ` Andi Kleen
2012-08-19 15:12 ` Avi Kivity
2012-08-19 15:20 ` Andi Kleen
2012-08-19 2:56 ` [PATCH 38/74] lto, watchdog/hpwdt.c: Make assembler label global Andi Kleen
2012-08-22 19:25 ` Wim Van Sebroeck
2012-08-22 20:11 ` Mingarelli, Thomas
2012-08-19 2:56 ` [PATCH 39/74] x86, lto: Mark vdso variables __visible Andi Kleen
2012-08-19 2:56 ` [PATCH 40/74] lto, powerpc: Disable LTO for the powerpc VDSO Andi Kleen
2012-08-19 2:56 ` [PATCH 41/74] x86, lto: Disable LTO for the x86 VDSO Andi Kleen
2012-08-19 2:56 ` [PATCH 42/74] lto, raid: disable LTO for the Altivec RAID code Andi Kleen
2012-08-19 2:56 ` [PATCH 43/74] lto, workaround: Disable LTO for sys_ni to work around alias bugs Andi Kleen
2012-08-19 2:56 ` [PATCH 44/74] lto: Mark functions used by the vsyscall init code visible Andi Kleen
2012-09-01 15:26 ` Michal Marek
2012-09-01 17:16 ` Andi Kleen
2012-09-01 17:26 ` Andi Kleen
2012-08-19 2:56 ` [PATCH 45/74] lto: Mark rwsem functions that can be called from assembler asmlinkage Andi Kleen
2012-08-19 2:56 ` [PATCH 46/74] x86, lto: Disable fancy hweight optimizations for LTO Andi Kleen
2012-08-19 8:28 ` Jan Beulich
2012-08-19 15:15 ` Andi Kleen
2012-08-20 10:57 ` Jan Beulich
2012-08-20 11:18 ` Andi Kleen
2012-08-20 12:38 ` Jan Beulich
2012-08-20 9:15 ` Avi Kivity
2012-08-20 9:42 ` Andi Kleen
2012-08-19 2:56 ` [PATCH 47/74] x86, lto: Fix kprobes " Andi Kleen
2012-08-19 2:56 ` [PATCH 48/74] x86, lto: Use inline assembler instead of global register variable to get sp Andi Kleen
2012-08-19 8:37 ` Jan Beulich
2012-08-19 15:18 ` Andi Kleen
2012-08-19 2:56 ` [PATCH 49/74] x86, lto, paravirt: Add __visible/asmlinkage to xen paravirt ops Andi Kleen
2012-08-19 2:56 ` [PATCH 50/74] x86, lto: Make empty_zero_page __visible for LTO Andi Kleen
2012-08-19 2:56 ` [PATCH 51/74] x86, lto, efi: Mark the efi variable used from assembler __visible Andi Kleen
2012-08-19 2:56 ` [PATCH 52/74] x86, lto, paravirt: Don't rely on local assembler labels Andi Kleen
2012-08-19 8:26 ` Jeremy Fitzhardinge
2012-08-19 2:56 ` [PATCH 53/74] x86, lto, paravirt: Make paravirt thunks global Andi Kleen
2012-08-19 8:27 ` Jeremy Fitzhardinge
2012-08-19 15:25 ` Andi Kleen
2012-08-19 2:56 ` [PATCH 54/74] x86, lto, vdso: Don't duplicate vvar address variables Andi Kleen
2012-08-20 17:47 ` Andrew Lutomirski
2012-08-19 2:56 ` Andi Kleen [this message]
2012-08-19 8:46 ` [PATCH 55/74] lto, workaround: Add workaround for initcall reordering Jan Beulich
2012-08-19 15:01 ` Andi Kleen
2012-08-20 11:00 ` Jan Beulich
2012-08-19 2:56 ` [PATCH 56/74] lto, workaround: Add workaround for missing LTO symbols in igb Andi Kleen
2012-08-22 8:43 ` Arnd Bergmann
2012-08-22 12:36 ` Andi Kleen
2012-08-19 2:56 ` [PATCH 57/74] lto, workaround: Add workaround for LTO build problem in pvrusb2-audio Andi Kleen
2012-08-19 2:56 ` [PATCH 58/74] lto, workaround: Work around LTO compiler problem in atheros driver Andi Kleen
2012-08-19 2:56 ` [PATCH 59/74] lto: Handle LTO common symbols in module loader Andi Kleen
2012-08-19 8:53 ` Jan Beulich
2012-08-19 15:23 ` Andi Kleen
2012-08-19 2:56 ` [PATCH 60/74] lto, Kbuild, bloat-o-meter: fix static detection Andi Kleen
2012-08-19 2:56 ` [PATCH 61/74] Kbuild, lto: Drop .number postfixes in modpost Andi Kleen
2012-08-19 2:56 ` [PATCH 62/74] Kbuild, lto: add ld-version and ld-ifversion macros Andi Kleen
2012-08-19 2:56 ` [PATCH 63/74] Kbuild, lto: Print correct info messages for vmlinux link Andi Kleen
2012-08-19 2:57 ` [PATCH 64/74] Kbuild, lto: Add a gcc-ld script to let run gcc as ld Andi Kleen
2012-08-19 2:57 ` [PATCH 65/74] Kbuild, lto: Disable LTO for asm-offsets.c Andi Kleen
2012-08-19 2:57 ` [PATCH 66/74] Kbuild, lto: Handle basic LTO in modpost Andi Kleen
2012-08-19 2:57 ` [PATCH 67/74] Kbuild, lto: Add Link Time Optimization support Andi Kleen
2012-08-19 2:57 ` [PATCH 68/74] Kbuild, lto: Add LTO build Documentation Andi Kleen
2012-08-19 2:57 ` [PATCH 69/74] lto: Increase kallsyms max symbol length Andi Kleen
2012-08-19 2:57 ` [PATCH 70/74] Kbuild, lto: Handle longer symbols in kallsyms.c Andi Kleen
2012-08-19 2:57 ` [PATCH 71/74] lto, kprobes: Use KSYM_NAME_LEN to size identifier buffers Andi Kleen
2012-08-21 4:44 ` Ananth N Mavinakayanahalli
2012-08-19 2:57 ` [PATCH 72/74] lto: Mark spinlocks noinline when inline spinlocks are disabled Andi Kleen
2012-08-19 2:57 ` [PATCH 73/74] lto, module: Warn about modules that are not fully LTOed Andi Kleen
2012-08-19 2:57 ` [PATCH 74/74] lto, workaround: Mark do_futex noinline to prevent clobbering ebp Andi Kleen
2012-08-23 0:17 ` H. Peter Anvin
2012-08-23 2:14 ` H. Peter Anvin
2012-08-23 2:29 ` Andi Kleen
2012-08-23 3:14 ` H. Peter Anvin
2012-08-20 7:48 ` RFC: Link Time Optimization support for the kernel Ingo Molnar
2012-08-20 10:10 ` Andi Kleen
2012-08-21 7:49 ` Ingo Molnar
2012-08-21 14:05 ` Don Zickus
2012-08-21 14:26 ` Avi Kivity
2012-08-21 17:02 ` Andi Kleen
2012-08-23 15:02 ` Jan Hubicka
2012-08-22 8:58 ` Arnd Bergmann
2012-08-22 12:35 ` Andi Kleen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1345345030-22211-56-git-send-email-andi@firstfloor.org \
--to=andi@firstfloor.org \
--cc=JBeulich@suse.com \
--cc=ak@linux.intel.com \
--cc=akpm@linux-foundation.org \
--cc=linux-kbuild@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mmarek@suse.cz \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).