123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- #ifndef _LINUX_LINKAGE_H
- #define _LINUX_LINKAGE_H
- #include <linux/compiler.h>
- #include <asm/linkage.h>
- #ifdef __cplusplus
- #define CPP_ASMLINKAGE extern "C"
- #else
- #define CPP_ASMLINKAGE
- #endif
- #ifndef asmlinkage
- #define asmlinkage CPP_ASMLINKAGE
- #endif
- #ifndef asmregparm
- # define asmregparm
- #endif
- #define __page_aligned_data __section(.data.page_aligned) __aligned(PAGE_SIZE)
- #define __page_aligned_bss __section(.bss.page_aligned) __aligned(PAGE_SIZE)
- /*
- * This is used by architectures to keep arguments on the stack
- * untouched by the compiler by keeping them live until the end.
- * The argument stack may be owned by the assembly-language
- * caller, not the callee, and gcc doesn't always understand
- * that.
- *
- * We have the return value, and a maximum of six arguments.
- *
- * This should always be followed by a "return ret" for the
- * protection to work (ie no more work that the compiler might
- * end up needing stack temporaries for).
- */
- /* Assembly files may be compiled with -traditional .. */
- #ifndef __ASSEMBLY__
- #ifndef asmlinkage_protect
- # define asmlinkage_protect(n, ret, args...) do { } while (0)
- #endif
- #endif
- #ifndef __ALIGN
- #define __ALIGN .align 4,0x90
- #define __ALIGN_STR ".align 4,0x90"
- #endif
- #ifdef __ASSEMBLY__
- #define ALIGN __ALIGN
- #define ALIGN_STR __ALIGN_STR
- #ifndef ENTRY
- #define ENTRY(name) \
- .globl name; \
- ALIGN; \
- name:
- #endif
- #ifndef WEAK
- #define WEAK(name) \
- .weak name; \
- name:
- #endif
- #define KPROBE_ENTRY(name) \
- .pushsection .kprobes.text, "ax"; \
- ENTRY(name)
- #define KPROBE_END(name) \
- END(name); \
- .popsection
- #ifndef END
- #define END(name) \
- .size name, .-name
- #endif
- /* If symbol 'name' is treated as a subroutine (gets called, and returns)
- * then please use ENDPROC to mark 'name' as STT_FUNC for the benefit of
- * static analysis tools such as stack depth analyzer.
- */
- #ifndef ENDPROC
- #define ENDPROC(name) \
- .type name, @function; \
- END(name)
- #endif
- #endif
- #define NORET_TYPE /**/
- #define ATTRIB_NORET __attribute__((noreturn))
- #define NORET_AND noreturn,
- #endif
|