Home | History | Annotate | Download | only in sys
      1 /*  $NetBSD: cdefs_aout.h,v 1.20 2006/05/18 17:55:38 christos Exp $ */
      2 
      3 /*
      4  * Written by J.T. Conklin <jtc (at) wimsey.com> 01/17/95.
      5  * Public domain.
      6  */
      7 
      8 #ifndef _SYS_CDEFS_AOUT_H_
      9 #define _SYS_CDEFS_AOUT_H_
     10 
     11 #define _C_LABEL(x)   __CONCAT(_,x)
     12 #define _C_LABEL_STRING(x)  "_"x
     13 
     14 #define ___RENAME(x)
     15 
     16 #define __indr_reference(sym,alias) /* nada, since we do weak refs */
     17 
     18 #ifdef __GNUC__
     19 #if __STDC__
     20   #ifndef   DONT_USE_STRONG_WEAK_ALIAS
     21     #define __strong_alias(alias,sym)               \
     22         __asm(".global " _C_LABEL_STRING(#alias) "\n"     \
     23           _C_LABEL_STRING(#alias) " = " _C_LABEL_STRING(#sym));
     24     #define __weak_alias(alias,sym)           \
     25         __asm(".weak " _C_LABEL_STRING(#alias) "\n"     \
     26           _C_LABEL_STRING(#alias) " = " _C_LABEL_STRING(#sym));
     27 
     28     /* Do not use __weak_extern, use __weak_reference instead */
     29     #define __weak_extern(sym)            \
     30         __asm(".weak " _C_LABEL_STRING(#sym));
     31 
     32     #if __GNUC_PREREQ__(4, 0)
     33       #define __weak_reference(sym) __attribute__((__weakref__))
     34     #else
     35       #define __weak_reference(sym) ; __asm(".weak " _C_LABEL_STRING(#sym))
     36     #endif
     37 
     38     #define __warn_references(sym,msg)          \
     39       __asm(".stabs \"" msg "\",30,0,0,0");       \
     40       __asm(".stabs \"_" #sym "\",1,0,0,0");
     41   #else
     42     #define __strong_alias(alias,sym)   /* NOTHING */
     43     #define __weak_alias(alias,sym)     /* NOTHING */
     44     #define __weak_extern(sym)          /* NOTHING */
     45     #define __weak_reference(sym)       /* NOTHING */
     46 
     47     #if defined(__CC_ARM) || defined(__APPLE__)
     48       #define __warn_references(sym,msg)
     49     #else
     50       #define __warn_references(sym,msg)              \
     51               __asm(".stabs \"" msg "\",30,0,0,0");   \
     52               __asm(".stabs \"_" #sym "\",1,0,0,0");
     53     #endif
     54   #endif
     55 #else   /* __STDC__ */
     56   #define __weak_alias(alias,sym) ___weak_alias(_/**/alias,_/**/sym)
     57   #define ___weak_alias(alias,sym)          \
     58       __asm(".weak alias\nalias = sym");
     59   /* Do not use __weak_extern, use __weak_reference instead */
     60   #define __weak_extern(sym) ___weak_extern(_/**/sym)
     61   #define ___weak_extern(sym)           \
     62       __asm(".weak sym");
     63 
     64   #if __GNUC_PREREQ__(4, 0)
     65     #define __weak_reference(sym) __attribute__((__weakref__))
     66   #else
     67     #define ___weak_reference(sym)  ; __asm(".weak sym");
     68     #define __weak_reference(sym) ___weak_reference(_/**/sym)
     69   #endif
     70 
     71   #define __warn_references(sym,msg)          \
     72     __asm(".stabs msg,30,0,0,0");         \
     73     __asm(".stabs \"_/**/sym\",1,0,0,0");
     74 #endif /* __STDC__ */
     75 #else /* __GNUC__ */
     76   #define __warn_references(sym,msg)
     77 #endif /* __GNUC__ */
     78 
     79 #if defined(__sh__)   /* XXX SH COFF */
     80 #undef __indr_reference(sym,alias)
     81 #undef __warn_references(sym,msg)
     82 #define __warn_references(sym,msg)
     83 #endif
     84 
     85 #define __IDSTRING(_n,_s)           \
     86   __asm(".data ; .asciz \"" _s "\" ; .text")
     87 
     88 #undef __KERNEL_RCSID
     89 
     90 //#define __RCSID(_s) __IDSTRING(rcsid,_s)
     91 #define __RCSID(_s)
     92 #define __SCCSID(_s)
     93 #define __SCCSID2(_s)
     94 #if 0 /* XXX userland __COPYRIGHTs have \ns in them */
     95 #define __COPYRIGHT(_s) __IDSTRING(copyright,_s)
     96 #else
     97 #define __COPYRIGHT(_s)             \
     98   static const char copyright[] __attribute__((__unused__)) = _s
     99 #endif
    100 
    101 #if defined(USE_KERNEL_RCSIDS) || !defined(_KERNEL)
    102 #define __KERNEL_RCSID(_n,_s) __IDSTRING(__CONCAT(rcsid,_n),_s)
    103 #else
    104 #define __KERNEL_RCSID(_n,_s)
    105 #endif
    106 #define __KERNEL_SCCSID(_n,_s)
    107 #define __KERNEL_COPYRIGHT(_n, _s) __IDSTRING(__CONCAT(copyright,_n),_s)
    108 
    109 #ifndef __lint__
    110 #define __link_set_make_entry(set, sym, type)       \
    111   static void const * const         \
    112       __link_set_##set##_sym_##sym __used = &sym;   \
    113   __asm(".stabs \"___link_set_" #set "\", " #type ", 0, 0, _" #sym)
    114 #else
    115 #define __link_set_make_entry(set, sym, type)       \
    116   extern void const * const __link_set_##set##_sym_##sym
    117 #endif /* __lint__ */
    118 
    119 #define __link_set_add_text(set, sym) __link_set_make_entry(set, sym, 23)
    120 #define __link_set_add_rodata(set, sym) __link_set_make_entry(set, sym, 23)
    121 #define __link_set_add_data(set, sym) __link_set_make_entry(set, sym, 25)
    122 #define __link_set_add_bss(set, sym)  __link_set_make_entry(set, sym, 27)
    123 
    124 #define __link_set_decl(set, ptype)         \
    125 extern struct {               \
    126   int __ls_length;            \
    127   ptype *__ls_items[1];           \
    128 } __link_set_##set
    129 
    130 #define __link_set_start(set) (&(__link_set_##set).__ls_items[0])
    131 #define __link_set_end(set)           \
    132   (&(__link_set_##set).__ls_items[(__link_set_##set).__ls_length])
    133 
    134 #define __link_set_count(set) ((__link_set_##set).__ls_length)
    135 
    136 #endif /* !_SYS_CDEFS_AOUT_H_ */
    137