at v2.6.27 2.1 kB view raw
1#ifndef _LINUX_LINKAGE_H 2#define _LINUX_LINKAGE_H 3 4#include <linux/compiler.h> 5#include <asm/linkage.h> 6 7#define notrace __attribute__((no_instrument_function)) 8 9#ifdef __cplusplus 10#define CPP_ASMLINKAGE extern "C" 11#else 12#define CPP_ASMLINKAGE 13#endif 14 15#ifndef asmlinkage 16#define asmlinkage CPP_ASMLINKAGE 17#endif 18 19#ifndef asmregparm 20# define asmregparm 21#endif 22 23#define __page_aligned_data __section(.data.page_aligned) __aligned(PAGE_SIZE) 24#define __page_aligned_bss __section(.bss.page_aligned) __aligned(PAGE_SIZE) 25 26/* 27 * This is used by architectures to keep arguments on the stack 28 * untouched by the compiler by keeping them live until the end. 29 * The argument stack may be owned by the assembly-language 30 * caller, not the callee, and gcc doesn't always understand 31 * that. 32 * 33 * We have the return value, and a maximum of six arguments. 34 * 35 * This should always be followed by a "return ret" for the 36 * protection to work (ie no more work that the compiler might 37 * end up needing stack temporaries for). 38 */ 39/* Assembly files may be compiled with -traditional .. */ 40#ifndef __ASSEMBLY__ 41#ifndef asmlinkage_protect 42# define asmlinkage_protect(n, ret, args...) do { } while (0) 43#endif 44#endif 45 46#ifndef __ALIGN 47#define __ALIGN .align 4,0x90 48#define __ALIGN_STR ".align 4,0x90" 49#endif 50 51#ifdef __ASSEMBLY__ 52 53#define ALIGN __ALIGN 54#define ALIGN_STR __ALIGN_STR 55 56#ifndef ENTRY 57#define ENTRY(name) \ 58 .globl name; \ 59 ALIGN; \ 60 name: 61#endif 62 63#ifndef WEAK 64#define WEAK(name) \ 65 .weak name; \ 66 name: 67#endif 68 69#define KPROBE_ENTRY(name) \ 70 .pushsection .kprobes.text, "ax"; \ 71 ENTRY(name) 72 73#define KPROBE_END(name) \ 74 END(name); \ 75 .popsection 76 77#ifndef END 78#define END(name) \ 79 .size name, .-name 80#endif 81 82/* If symbol 'name' is treated as a subroutine (gets called, and returns) 83 * then please use ENDPROC to mark 'name' as STT_FUNC for the benefit of 84 * static analysis tools such as stack depth analyzer. 85 */ 86#ifndef ENDPROC 87#define ENDPROC(name) \ 88 .type name, @function; \ 89 END(name) 90#endif 91 92#endif 93 94#define NORET_TYPE /**/ 95#define ATTRIB_NORET __attribute__((noreturn)) 96#define NORET_AND noreturn, 97 98#endif