mirror of
https://github.com/torvalds/linux.git
synced 2026-05-24 15:12:13 +02:00
x86/asm: Annotate special section entries
In preparation for the objtool klp diff subcommand, add annotations for special section entries. This will enable objtool to determine the size and location of the entries and to extract them when needed. Acked-by: Petr Mladek <pmladek@suse.com> Tested-by: Joe Lawrence <joe.lawrence@redhat.com> Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
This commit is contained in:
parent
58f36a5756
commit
aca282ab7e
|
|
@ -198,6 +198,7 @@ static inline int alternatives_text_reserved(void *start, void *end)
|
|||
|
||||
#define ALTINSTR_ENTRY(ft_flags) \
|
||||
".pushsection .altinstructions,\"a\"\n" \
|
||||
ANNOTATE_DATA_SPECIAL \
|
||||
" .long 771b - .\n" /* label */ \
|
||||
" .long 774f - .\n" /* new instruction */ \
|
||||
" .4byte " __stringify(ft_flags) "\n" /* feature + flags */ \
|
||||
|
|
@ -207,6 +208,7 @@ static inline int alternatives_text_reserved(void *start, void *end)
|
|||
|
||||
#define ALTINSTR_REPLACEMENT(newinstr) /* replacement */ \
|
||||
".pushsection .altinstr_replacement, \"ax\"\n" \
|
||||
ANNOTATE_DATA_SPECIAL \
|
||||
"# ALT: replacement\n" \
|
||||
"774:\n\t" newinstr "\n775:\n" \
|
||||
".popsection\n"
|
||||
|
|
@ -337,6 +339,7 @@ void nop_func(void);
|
|||
* instruction. See apply_alternatives().
|
||||
*/
|
||||
.macro altinstr_entry orig alt ft_flags orig_len alt_len
|
||||
ANNOTATE_DATA_SPECIAL
|
||||
.long \orig - .
|
||||
.long \alt - .
|
||||
.4byte \ft_flags
|
||||
|
|
@ -365,6 +368,7 @@ void nop_func(void);
|
|||
.popsection ; \
|
||||
.pushsection .altinstr_replacement,"ax" ; \
|
||||
743: \
|
||||
ANNOTATE_DATA_SPECIAL ; \
|
||||
newinst ; \
|
||||
744: \
|
||||
.popsection ;
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@
|
|||
#ifndef _ASM_X86_ASM_H
|
||||
#define _ASM_X86_ASM_H
|
||||
|
||||
#include <linux/annotate.h>
|
||||
|
||||
#ifdef __ASSEMBLER__
|
||||
# define __ASM_FORM(x, ...) x,## __VA_ARGS__
|
||||
# define __ASM_FORM_RAW(x, ...) x,## __VA_ARGS__
|
||||
|
|
@ -132,6 +134,7 @@ static __always_inline __pure void *rip_rel_ptr(void *p)
|
|||
# define _ASM_EXTABLE_TYPE(from, to, type) \
|
||||
.pushsection "__ex_table","a" ; \
|
||||
.balign 4 ; \
|
||||
ANNOTATE_DATA_SPECIAL ; \
|
||||
.long (from) - . ; \
|
||||
.long (to) - . ; \
|
||||
.long type ; \
|
||||
|
|
@ -179,6 +182,7 @@ static __always_inline __pure void *rip_rel_ptr(void *p)
|
|||
# define _ASM_EXTABLE_TYPE(from, to, type) \
|
||||
" .pushsection \"__ex_table\",\"a\"\n" \
|
||||
" .balign 4\n" \
|
||||
ANNOTATE_DATA_SPECIAL \
|
||||
" .long (" #from ") - .\n" \
|
||||
" .long (" #to ") - .\n" \
|
||||
" .long " __stringify(type) " \n" \
|
||||
|
|
@ -187,6 +191,7 @@ static __always_inline __pure void *rip_rel_ptr(void *p)
|
|||
# define _ASM_EXTABLE_TYPE_REG(from, to, type, reg) \
|
||||
" .pushsection \"__ex_table\",\"a\"\n" \
|
||||
" .balign 4\n" \
|
||||
ANNOTATE_DATA_SPECIAL \
|
||||
" .long (" #from ") - .\n" \
|
||||
" .long (" #to ") - .\n" \
|
||||
DEFINE_EXTABLE_TYPE_REG \
|
||||
|
|
|
|||
|
|
@ -57,6 +57,7 @@
|
|||
#define _BUG_FLAGS_ASM(ins, file, line, flags, size, extra) \
|
||||
"1:\t" ins "\n" \
|
||||
".pushsection __bug_table,\"aw\"\n" \
|
||||
ANNOTATE_DATA_SPECIAL \
|
||||
__BUG_ENTRY(file, line, flags) \
|
||||
"\t.org 2b + " size "\n" \
|
||||
".popsection\n" \
|
||||
|
|
|
|||
|
|
@ -101,6 +101,7 @@ static __always_inline bool _static_cpu_has(u16 bit)
|
|||
asm goto(ALTERNATIVE_TERNARY("jmp 6f", %c[feature], "", "jmp %l[t_no]")
|
||||
".pushsection .altinstr_aux,\"ax\"\n"
|
||||
"6:\n"
|
||||
ANNOTATE_DATA_SPECIAL
|
||||
" testb %[bitnum], %a[cap_byte]\n"
|
||||
" jnz %l[t_yes]\n"
|
||||
" jmp %l[t_no]\n"
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@
|
|||
#define JUMP_TABLE_ENTRY(key, label) \
|
||||
".pushsection __jump_table, \"aw\" \n\t" \
|
||||
_ASM_ALIGN "\n\t" \
|
||||
ANNOTATE_DATA_SPECIAL \
|
||||
".long 1b - . \n\t" \
|
||||
".long " label " - . \n\t" \
|
||||
_ASM_PTR " " key " - . \n\t" \
|
||||
|
|
|
|||
|
|
@ -9,9 +9,10 @@
|
|||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
#define UNWIND_HINT(type, sp_reg, sp_offset, signal) \
|
||||
#define UNWIND_HINT(type, sp_reg, sp_offset, signal) \
|
||||
"987: \n\t" \
|
||||
".pushsection .discard.unwind_hints\n\t" \
|
||||
ANNOTATE_DATA_SPECIAL \
|
||||
/* struct unwind_hint */ \
|
||||
".long 987b - .\n\t" \
|
||||
".short " __stringify(sp_offset) "\n\t" \
|
||||
|
|
@ -78,6 +79,7 @@
|
|||
.macro UNWIND_HINT type:req sp_reg=0 sp_offset=0 signal=0
|
||||
.Lhere_\@:
|
||||
.pushsection .discard.unwind_hints
|
||||
ANNOTATE_DATA_SPECIAL
|
||||
/* struct unwind_hint */
|
||||
.long .Lhere_\@ - .
|
||||
.short \sp_offset
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user