mirror of https://gitee.com/openkylin/linux.git
tile: support static_key usage in non-module __exit sections
Previously, all the __exit sections were just dropped by the link phase. However, if there are static_key (jump label) constructs in __exit sections that are not modules, the link fails with the message: `.exit.text' referenced in section `__jump_table' of xxx.o: defined in discarded section `.exit.text' of xxx.o Support this usage by keeping the .exit.text sections in the final image if JUMP_LABEL is defined, then discarding them once initialization is complete. Link: http://lkml.kernel.org/r/bfd7c107c610c30e992868ebfe2a5d796a097464.1467837322.git.jbaron@akamai.com Signed-off-by: Jason Baron <jbaron@akamai.com> Signed-off-by: Chris Metcalf <cmetcalf@mellanox.com> Cc: "David S. Miller" <davem@davemloft.net> Cc: Arnd Bergmann <arnd@arndb.de> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Heiko Carstens <heiko.carstens@de.ibm.com> Cc: Joe Perches <joe@perches.com> Cc: Martin Schwidefsky <schwidefsky@de.ibm.com> Cc: Michael Ellerman <mpe@ellerman.id.au> Cc: Paul Mackerras <paulus@samba.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
10d7227bb9
commit
c14b4bcfd9
|
@ -60,6 +60,18 @@ SECTIONS
|
|||
/* "Init" is divided into two areas with very different virtual addresses. */
|
||||
INIT_TEXT_SECTION(PAGE_SIZE)
|
||||
|
||||
/*
|
||||
* Some things, like the __jump_table, may contain symbol references
|
||||
* to __exit text, so include such text in the final image if so.
|
||||
* In that case we also override the _einittext from INIT_TEXT_SECTION.
|
||||
*/
|
||||
#ifdef CONFIG_JUMP_LABEL
|
||||
.exit.text : {
|
||||
EXIT_TEXT
|
||||
_einittext = .;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Now we skip back to PAGE_OFFSET for the data. */
|
||||
. = (. - TEXT_OFFSET + PAGE_OFFSET);
|
||||
#undef LOAD_OFFSET
|
||||
|
|
Loading…
Reference in New Issue