mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-12-27 10:01:39 -05:00
x86/asm: Remove ANNOTATE_DATA_SPECIAL usage
Instead of manually annotating each __ex_table entry, just make the section mergeable and store the entry size in the ELF section header. Either way works for objtool create_fake_symbols(), this way produces cleaner code generation. Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org> Signed-off-by: Ingo Molnar <mingo@kernel.org> Cc: Linus Torvalds <torvalds@linux-foundation.org> Link: https://patch.msgid.link/b858cb7891c1ba0080e22a9c32595e6c302435e2.1764694625.git.jpoimboe@kernel.org
This commit is contained in:
committed by
Ingo Molnar
parent
a818f28f01
commit
f387d0e102
@@ -5,7 +5,6 @@ generic-y += device.h
|
|||||||
generic-y += dma-mapping.h
|
generic-y += dma-mapping.h
|
||||||
generic-y += emergency-restart.h
|
generic-y += emergency-restart.h
|
||||||
generic-y += exec.h
|
generic-y += exec.h
|
||||||
generic-y += extable.h
|
|
||||||
generic-y += ftrace.h
|
generic-y += ftrace.h
|
||||||
generic-y += hw_irq.h
|
generic-y += hw_irq.h
|
||||||
generic-y += irq_regs.h
|
generic-y += irq_regs.h
|
||||||
|
|||||||
@@ -20,3 +20,4 @@ DEFINE(UM_KERN_GDT_ENTRY_TLS_ENTRIES, GDT_ENTRY_TLS_ENTRIES);
|
|||||||
DEFINE(UM_SECCOMP_ARCH_NATIVE, SECCOMP_ARCH_NATIVE);
|
DEFINE(UM_SECCOMP_ARCH_NATIVE, SECCOMP_ARCH_NATIVE);
|
||||||
|
|
||||||
DEFINE(ALT_INSTR_SIZE, sizeof(struct alt_instr));
|
DEFINE(ALT_INSTR_SIZE, sizeof(struct alt_instr));
|
||||||
|
DEFINE(EXTABLE_SIZE, sizeof(struct exception_table_entry));
|
||||||
|
|||||||
@@ -126,18 +126,21 @@ static __always_inline __pure void *rip_rel_ptr(void *p)
|
|||||||
|
|
||||||
#ifdef __KERNEL__
|
#ifdef __KERNEL__
|
||||||
|
|
||||||
|
#ifndef COMPILE_OFFSETS
|
||||||
|
#include <asm/asm-offsets.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
# include <asm/extable_fixup_types.h>
|
# include <asm/extable_fixup_types.h>
|
||||||
|
|
||||||
/* Exception table entry */
|
/* Exception table entry */
|
||||||
#ifdef __ASSEMBLER__
|
#ifdef __ASSEMBLER__
|
||||||
|
|
||||||
# define _ASM_EXTABLE_TYPE(from, to, type) \
|
# define _ASM_EXTABLE_TYPE(from, to, type) \
|
||||||
.pushsection "__ex_table","a" ; \
|
.pushsection "__ex_table", "aM", @progbits, EXTABLE_SIZE ; \
|
||||||
.balign 4 ; \
|
.balign 4 ; \
|
||||||
ANNOTATE_DATA_SPECIAL ; \
|
.long (from) - . ; \
|
||||||
.long (from) - . ; \
|
.long (to) - . ; \
|
||||||
.long (to) - . ; \
|
.long type ; \
|
||||||
.long type ; \
|
|
||||||
.popsection
|
.popsection
|
||||||
|
|
||||||
# ifdef CONFIG_KPROBES
|
# ifdef CONFIG_KPROBES
|
||||||
@@ -180,18 +183,18 @@ static __always_inline __pure void *rip_rel_ptr(void *p)
|
|||||||
".purgem extable_type_reg\n"
|
".purgem extable_type_reg\n"
|
||||||
|
|
||||||
# define _ASM_EXTABLE_TYPE(from, to, type) \
|
# define _ASM_EXTABLE_TYPE(from, to, type) \
|
||||||
" .pushsection \"__ex_table\",\"a\"\n" \
|
" .pushsection __ex_table, \"aM\", @progbits, " \
|
||||||
|
__stringify(EXTABLE_SIZE) "\n" \
|
||||||
" .balign 4\n" \
|
" .balign 4\n" \
|
||||||
ANNOTATE_DATA_SPECIAL \
|
|
||||||
" .long (" #from ") - .\n" \
|
" .long (" #from ") - .\n" \
|
||||||
" .long (" #to ") - .\n" \
|
" .long (" #to ") - .\n" \
|
||||||
" .long " __stringify(type) " \n" \
|
" .long " __stringify(type) " \n" \
|
||||||
" .popsection\n"
|
" .popsection\n"
|
||||||
|
|
||||||
# define _ASM_EXTABLE_TYPE_REG(from, to, type, reg) \
|
# define _ASM_EXTABLE_TYPE_REG(from, to, type, reg) \
|
||||||
" .pushsection \"__ex_table\",\"a\"\n" \
|
" .pushsection __ex_table, \"aM\", @progbits, " \
|
||||||
|
__stringify(EXTABLE_SIZE) "\n" \
|
||||||
" .balign 4\n" \
|
" .balign 4\n" \
|
||||||
ANNOTATE_DATA_SPECIAL \
|
|
||||||
" .long (" #from ") - .\n" \
|
" .long (" #from ") - .\n" \
|
||||||
" .long (" #to ") - .\n" \
|
" .long (" #to ") - .\n" \
|
||||||
DEFINE_EXTABLE_TYPE_REG \
|
DEFINE_EXTABLE_TYPE_REG \
|
||||||
|
|||||||
@@ -126,4 +126,5 @@ static void __used common(void)
|
|||||||
|
|
||||||
BLANK();
|
BLANK();
|
||||||
DEFINE(ALT_INSTR_SIZE, sizeof(struct alt_instr));
|
DEFINE(ALT_INSTR_SIZE, sizeof(struct alt_instr));
|
||||||
|
DEFINE(EXTABLE_SIZE, sizeof(struct exception_table_entry));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
/* SPDX-License-Identifier: GPL-2.0 */
|
/* SPDX-License-Identifier: GPL-2.0 */
|
||||||
|
#define COMPILE_OFFSETS
|
||||||
#include <linux/stddef.h>
|
#include <linux/stddef.h>
|
||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
#include <linux/elf.h>
|
#include <linux/elf.h>
|
||||||
@@ -7,6 +8,7 @@
|
|||||||
#include <linux/audit.h>
|
#include <linux/audit.h>
|
||||||
#include <asm/mman.h>
|
#include <asm/mman.h>
|
||||||
#include <asm/seccomp.h>
|
#include <asm/seccomp.h>
|
||||||
|
#include <asm/extable.h>
|
||||||
|
|
||||||
/* workaround for a warning with -Wmissing-prototypes */
|
/* workaround for a warning with -Wmissing-prototypes */
|
||||||
void foo(void);
|
void foo(void);
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#define __GENERATING_BOUNDS_H
|
#define __GENERATING_BOUNDS_H
|
||||||
|
#define COMPILE_OFFSETS
|
||||||
/* Include headers that define the enum constants of interest */
|
/* Include headers that define the enum constants of interest */
|
||||||
#include <linux/page-flags.h>
|
#include <linux/page-flags.h>
|
||||||
#include <linux/mmzone.h>
|
#include <linux/mmzone.h>
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
// SPDX-License-Identifier: GPL-2.0
|
// SPDX-License-Identifier: GPL-2.0
|
||||||
|
#define COMPILE_OFFSETS
|
||||||
#include <linux/kbuild.h>
|
#include <linux/kbuild.h>
|
||||||
#include <linux/mod_devicetable.h>
|
#include <linux/mod_devicetable.h>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user