mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00

While the GCC and Clang compilers already define __ASSEMBLER__ automatically when compiling assembly code, __ASSEMBLY__ is a macro that only gets defined by the Makefiles in the kernel. This can be very confusing when switching between userspace and kernelspace coding, or when dealing with UAPI headers that rather should use __ASSEMBLER__ instead. So let's standardize on the __ASSEMBLER__ macro that is provided by the compilers now. This is mostly a mechanical patch (done with a simple "sed -i" statement), with some manual tweaks in <asm/frame.h>, <asm/hw_irq.h> and <asm/setup.h> that mentioned this macro in comments with some missing underscores. Signed-off-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Ingo Molnar <mingo@kernel.org> Cc: Brian Gerst <brgerst@gmail.com> Cc: Juergen Gross <jgross@suse.com> Cc: H. Peter Anvin <hpa@zytor.com> Cc: Kees Cook <keescook@chromium.org> Cc: Linus Torvalds <torvalds@linux-foundation.org> Link: https://lore.kernel.org/r/20250314071013.1575167-38-thuth@redhat.com
89 lines
2.2 KiB
C
89 lines
2.2 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef _ASM_X86_NOPS_H
|
|
#define _ASM_X86_NOPS_H
|
|
|
|
#include <asm/asm.h>
|
|
|
|
/*
|
|
* Define nops for use with alternative() and for tracing.
|
|
*/
|
|
|
|
#ifndef CONFIG_64BIT
|
|
|
|
/*
|
|
* Generic 32bit nops from GAS:
|
|
*
|
|
* 1: nop
|
|
* 2: movl %esi,%esi
|
|
* 3: leal 0x0(%esi),%esi
|
|
* 4: leal 0x0(%esi,%eiz,1),%esi
|
|
* 5: leal %ds:0x0(%esi,%eiz,1),%esi
|
|
* 6: leal 0x0(%esi),%esi
|
|
* 7: leal 0x0(%esi,%eiz,1),%esi
|
|
* 8: leal %ds:0x0(%esi,%eiz,1),%esi
|
|
*
|
|
* Except 5 and 8, which are DS prefixed 4 and 7 resp, where GAS would emit 2
|
|
* nop instructions.
|
|
*/
|
|
#define BYTES_NOP1 0x90
|
|
#define BYTES_NOP2 0x89,0xf6
|
|
#define BYTES_NOP3 0x8d,0x76,0x00
|
|
#define BYTES_NOP4 0x8d,0x74,0x26,0x00
|
|
#define BYTES_NOP5 0x3e,BYTES_NOP4
|
|
#define BYTES_NOP6 0x8d,0xb6,0x00,0x00,0x00,0x00
|
|
#define BYTES_NOP7 0x8d,0xb4,0x26,0x00,0x00,0x00,0x00
|
|
#define BYTES_NOP8 0x3e,BYTES_NOP7
|
|
|
|
#define ASM_NOP_MAX 8
|
|
|
|
#else
|
|
|
|
/*
|
|
* Generic 64bit nops from GAS:
|
|
*
|
|
* 1: nop
|
|
* 2: osp nop
|
|
* 3: nopl (%eax)
|
|
* 4: nopl 0x00(%eax)
|
|
* 5: nopl 0x00(%eax,%eax,1)
|
|
* 6: osp nopl 0x00(%eax,%eax,1)
|
|
* 7: nopl 0x00000000(%eax)
|
|
* 8: nopl 0x00000000(%eax,%eax,1)
|
|
* 9: cs nopl 0x00000000(%eax,%eax,1)
|
|
* 10: osp cs nopl 0x00000000(%eax,%eax,1)
|
|
* 11: osp osp cs nopl 0x00000000(%eax,%eax,1)
|
|
*/
|
|
#define BYTES_NOP1 0x90
|
|
#define BYTES_NOP2 0x66,BYTES_NOP1
|
|
#define BYTES_NOP3 0x0f,0x1f,0x00
|
|
#define BYTES_NOP4 0x0f,0x1f,0x40,0x00
|
|
#define BYTES_NOP5 0x0f,0x1f,0x44,0x00,0x00
|
|
#define BYTES_NOP6 0x66,BYTES_NOP5
|
|
#define BYTES_NOP7 0x0f,0x1f,0x80,0x00,0x00,0x00,0x00
|
|
#define BYTES_NOP8 0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00
|
|
#define BYTES_NOP9 0x2e,BYTES_NOP8
|
|
#define BYTES_NOP10 0x66,BYTES_NOP9
|
|
#define BYTES_NOP11 0x66,BYTES_NOP10
|
|
|
|
#define ASM_NOP9 _ASM_BYTES(BYTES_NOP9)
|
|
#define ASM_NOP10 _ASM_BYTES(BYTES_NOP10)
|
|
#define ASM_NOP11 _ASM_BYTES(BYTES_NOP11)
|
|
|
|
#define ASM_NOP_MAX 11
|
|
|
|
#endif /* CONFIG_64BIT */
|
|
|
|
#define ASM_NOP1 _ASM_BYTES(BYTES_NOP1)
|
|
#define ASM_NOP2 _ASM_BYTES(BYTES_NOP2)
|
|
#define ASM_NOP3 _ASM_BYTES(BYTES_NOP3)
|
|
#define ASM_NOP4 _ASM_BYTES(BYTES_NOP4)
|
|
#define ASM_NOP5 _ASM_BYTES(BYTES_NOP5)
|
|
#define ASM_NOP6 _ASM_BYTES(BYTES_NOP6)
|
|
#define ASM_NOP7 _ASM_BYTES(BYTES_NOP7)
|
|
#define ASM_NOP8 _ASM_BYTES(BYTES_NOP8)
|
|
|
|
#ifndef __ASSEMBLER__
|
|
extern const unsigned char * const x86_nops[];
|
|
#endif
|
|
|
|
#endif /* _ASM_X86_NOPS_H */
|