/* For C file, we already have NOKPROBE_SYMBOL macro */
/* Insert a comma if args are non-empty */ #define COMMA(x...) __COMMA(x) #define __COMMA(...) , ##__VA_ARGS__
/* * Combine multiple asm inline constraint args into a single arg for passing to * another macro.
*/ #define ASM_OUTPUT(x...) x #define ASM_INPUT(x...) x
/* * This output constraint should be used for any inline asm which has a "call" * instruction. Otherwise the asm may be inserted before the frame pointer * gets set up by the containing function. If you forget to do this, objtool * may print a "call without frame pointer save/setup" warning.
*/ registerunsignedlong current_stack_pointer asm(_ASM_SP); #define ASM_CALL_CONSTRAINT "+r" (current_stack_pointer) #endif/* __ASSEMBLER__ */
#define _ASM_EXTABLE(from, to) \
_ASM_EXTABLE_TYPE(from, to, EX_TYPE_DEFAULT)
#define _ASM_EXTABLE_UA(from, to) \
_ASM_EXTABLE_TYPE(from, to, EX_TYPE_UACCESS)
#define _ASM_EXTABLE_FAULT(from, to) \
_ASM_EXTABLE_TYPE(from, to, EX_TYPE_FAULT)
/* * Both i386 and x86_64 returns 64-bit values in edx:eax for certain * instructions, but GCC's "A" constraint has different meanings. * For i386, "A" means exactly edx:eax, while for x86_64 it * means rax *or* rdx. * * These helpers wrapping these semantic differences save one instruction * clearing the high half of 'low':
*/ #ifdef CONFIG_X86_64 # define EAX_EDX_DECLARE_ARGS(val, low, high) unsignedlong low, high # define EAX_EDX_VAL(val, low, high) ((low) | (high) << 32) # define EAX_EDX_RET(val, low, high) "=a" (low), "=d" (high) #else # define EAX_EDX_DECLARE_ARGS(val, low, high) u64 val # define EAX_EDX_VAL(val, low, high) (val) # define EAX_EDX_RET(val, low, high) "=A" (val) #endif
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.