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