linux/include/linux/linkage.h
<<
>>
Prefs
   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