Skip to content

objtool, x86/alternative: Convert objtool annotations and x86 alternatives to assembler macros

Josh Poimboeuf lkml 1 version In review

Get series with b4
b4 am [email protected]

Versions newest first

  1. v1 Latest8 patches 11 repliesIn review

Patches in v1 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/8objtool: Rename ANNOTYPE_IGNORE_ALTS -> ANNOTYPE_IGNORE_ALTERNATIVEinclude/linux/annotate.h include/linux/objtool_types.h tools/include/linux/objtool_types.h +1 more+6 -60 replies
2/8objtool: Make ANNOTYPE_DATA_SPECIAL unique across all annotationsinclude/linux/objtool_types.h tools/include/linux/objtool_types.h+2 -40 replies
3/8objtool: Rename C ANNOTATE_REACHABLE to ANNOTATE_REACHABLE_LABELarch/x86/include/asm/bug.h arch/x86/include/asm/irq_stack.h include/linux/annotate.h+3 -30 replies
4/8objtool: Rename asm ANNOTATE_NOCFI_SYM to ANNOTATE_NOCFIarch/x86/platform/efi/efi_stub_64.S include/linux/annotate.h+2 -20 replies
5/8objtool: Convert annotations to assembler macrosarch/x86/include/asm/asm.h arch/x86/include/asm/jump_label.h include/linux/annotate.h+72 -692 replies
6/8x86/asm: Use unique code labels in __FILL_RETURN_BUFFERarch/x86/include/asm/nospec-branch.h+4 -40 replies
7/8x86/asm: Remove newlines in alternativesarch/x86/include/asm/paravirt_types.h arch/x86/include/asm/processor.h arch/x86/include/asm/smap.h +1 more+7 -71 reply
8/8x86/alternative: Convert alternatives to assembler macrosarch/x86/include/asm/alternative.h include/linux/annotate.h+107 -966 replies

Reviews trailers per patch

No Reviewed-by, Acked-by or Tested-by trailers for v1 yet.

Read the v1 thread

Cover letter [PATCH 0/8] objtool, x86/alternative: Convert objtool annotations and x86 alternatives to assembler macros

Convert objtool annotations and x86 alternatives to assembler macros. This creates a shared C/asm alternative implementation and makes the code generation significantly more readable.

Patches 1-5: convert objtool
Patches 6-8: convert alternatives

Based on tip/master.

Before:
-----
# ./arch/x86/include/asm/smap.h:47: alternative("", "stac", X86_FEATURE_SMAP);
# 47 "./arch/x86/include/asm/smap.h" 1
# ALT: oldinstr
771:

772:
# ALT: padding
.skip -(((775f-774f)-(772b-771b)) > 0) * ((775f-774f)-(772b-771b)),0x90 773:
.pushsection .altinstructions, "aM", @progbits, 14
.long 771b - .
.long 774f - .
.4byte ( 9*32+20)
.byte 773b-771b
.byte 775f-774f
.popsection
.pushsection .altinstr_replacement, "ax"
.pushsection .discard.annotate_data, "M", @progbits, 8; .long 1b - ., 1; .popsection # ALT: replacement
774:
stac
775:
.popsection
-----

After:
-----
# ./arch/x86/include/asm/smap.h:47: alternative("", "stac", X86_FEATURE_SMAP);
# 47 "./arch/x86/include/asm/smap.h" 1

	ALTERNATIVE "", "stac", "( 9*32+20)"

-----

Future work:
- BUG()/WARN()
- static_cpu_has()
- static calls/branches
- exceptions
- smp locks
- unwind hints

Josh Poimboeuf (8):
objtool: Rename ANNOTYPE_IGNORE_ALTS -> ANNOTYPE_IGNORE_ALTERNATIVE
objtool: Make ANNOTYPE_DATA_SPECIAL unique across all annotations
objtool: Rename C ANNOTATE_REACHABLE to ANNOTATE_REACHABLE_LABEL
objtool: Rename asm ANNOTATE_NOCFI_SYM to ANNOTATE_NOCFI
objtool: Convert annotations to assembler macros x86/asm: Use unique code labels in __FILL_RETURN_BUFFER x86/asm: Remove newlines in alternatives x86/alternative: Convert alternatives to assembler macros

 arch/x86/include/asm/alternative.h    | 196 +++++++++++++-------------
 arch/x86/include/asm/asm.h            |   8 +-
 arch/x86/include/asm/bug.h            |   2 +-
 arch/x86/include/asm/irq_stack.h      |   2 +-
 arch/x86/include/asm/jump_label.h     |   1 +
 arch/x86/include/asm/nospec-branch.h  |   8 +-
 arch/x86/include/asm/paravirt_types.h |   2 +-
 arch/x86/include/asm/processor.h      |   2 +-
 arch/x86/include/asm/smap.h           |   8 +-
 arch/x86/include/asm/vmware.h         |   2 +-
 arch/x86/platform/efi/efi_stub_64.S   |   2 +-
 include/linux/annotate.h              | 133 ++++++++---------
 include/linux/objtool_types.h         |   5 +-
 tools/include/linux/objtool_types.h   |   5 +-
 tools/objtool/check.c                 |   4 +-
 15 files changed, 196 insertions(+), 184 deletions(-)
Signature · 1 line
2.52.0