root/include/asm-generic/export.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 #ifndef __ASM_GENERIC_EXPORT_H
   2 #define __ASM_GENERIC_EXPORT_H
   3 
   4 #ifndef KSYM_FUNC
   5 #define KSYM_FUNC(x) x
   6 #endif
   7 #ifdef CONFIG_HAVE_ARCH_PREL32_RELOCATIONS
   8 #define KSYM_ALIGN 4
   9 #elif defined(CONFIG_64BIT)
  10 #define KSYM_ALIGN 8
  11 #else
  12 #define KSYM_ALIGN 4
  13 #endif
  14 #ifndef KCRC_ALIGN
  15 #define KCRC_ALIGN 4
  16 #endif
  17 
  18 .macro __put, val, name
  19 #ifdef CONFIG_HAVE_ARCH_PREL32_RELOCATIONS
  20         .long   \val - ., \name - ., 0
  21 #elif defined(CONFIG_64BIT)
  22         .quad   \val, \name, 0
  23 #else
  24         .long   \val, \name, 0
  25 #endif
  26 .endm
  27 
  28 /*
  29  * note on .section use: @progbits vs %progbits nastiness doesn't matter,
  30  * since we immediately emit into those sections anyway.
  31  */
  32 .macro ___EXPORT_SYMBOL name,val,sec
  33 #ifdef CONFIG_MODULES
  34         .globl __ksymtab_\name
  35         .section ___ksymtab\sec+\name,"a"
  36         .balign KSYM_ALIGN
  37 __ksymtab_\name:
  38         __put \val, __kstrtab_\name
  39         .previous
  40         .section __ksymtab_strings,"a"
  41 __kstrtab_\name:
  42         .asciz "\name"
  43         .previous
  44 #ifdef CONFIG_MODVERSIONS
  45         .section ___kcrctab\sec+\name,"a"
  46         .balign KCRC_ALIGN
  47 __kcrctab_\name:
  48 #if defined(CONFIG_MODULE_REL_CRCS)
  49         .long __crc_\name - .
  50 #else
  51         .long __crc_\name
  52 #endif
  53         .weak __crc_\name
  54         .previous
  55 #endif
  56 #endif
  57 .endm
  58 
  59 #if defined(CONFIG_TRIM_UNUSED_KSYMS)
  60 
  61 #include <linux/kconfig.h>
  62 #include <generated/autoksyms.h>
  63 
  64 .macro __ksym_marker sym
  65         .section ".discard.ksym","a"
  66 __ksym_marker_\sym:
  67          .previous
  68 .endm
  69 
  70 #define __EXPORT_SYMBOL(sym, val, sec)                          \
  71         __ksym_marker sym;                                      \
  72         __cond_export_sym(sym, val, sec, __is_defined(__KSYM_##sym))
  73 #define __cond_export_sym(sym, val, sec, conf)                  \
  74         ___cond_export_sym(sym, val, sec, conf)
  75 #define ___cond_export_sym(sym, val, sec, enabled)              \
  76         __cond_export_sym_##enabled(sym, val, sec)
  77 #define __cond_export_sym_1(sym, val, sec) ___EXPORT_SYMBOL sym, val, sec
  78 #define __cond_export_sym_0(sym, val, sec) /* nothing */
  79 
  80 #else
  81 #define __EXPORT_SYMBOL(sym, val, sec) ___EXPORT_SYMBOL sym, val, sec
  82 #endif
  83 
  84 #define EXPORT_SYMBOL(name)                                     \
  85         __EXPORT_SYMBOL(name, KSYM_FUNC(name),)
  86 #define EXPORT_SYMBOL_GPL(name)                                 \
  87         __EXPORT_SYMBOL(name, KSYM_FUNC(name), _gpl)
  88 #define EXPORT_DATA_SYMBOL(name)                                \
  89         __EXPORT_SYMBOL(name, name,)
  90 #define EXPORT_DATA_SYMBOL_GPL(name)                            \
  91         __EXPORT_SYMBOL(name, name,_gpl)
  92 
  93 #endif

/* [<][>][^][v][top][bottom][index][help] */