summaryrefslogtreecommitdiff
path: root/StdLib/Include/sys/cdefs_aout.h
blob: c7920a02b1780428f8073b4e981cd9a9f16af42c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
/*  $NetBSD: cdefs_aout.h,v 1.20 2006/05/18 17:55:38 christos Exp $ */

/*
 * Written by J.T. Conklin <jtc@wimsey.com> 01/17/95.
 * Public domain.
 */

#ifndef _SYS_CDEFS_AOUT_H_
#define _SYS_CDEFS_AOUT_H_

#define _C_LABEL(x)   __CONCAT(_,x)
#define _C_LABEL_STRING(x)  "_"x

#if __STDC__
#define ___RENAME(x)  __asm(___STRING(_C_LABEL(x)))
#else
#define ___RENAME(x)  ____RENAME(_/**/x)
#define ____RENAME(x) __asm(___STRING(x))
#endif

#define __indr_reference(sym,alias) /* nada, since we do weak refs */

#ifdef __GNUC__
#if __STDC__
    #ifndef   DONT_USE_STRONG_WEAK_ALIAS
#define __strong_alias(alias,sym)               \
    __asm(".global " _C_LABEL_STRING(#alias) "\n"     \
      _C_LABEL_STRING(#alias) " = " _C_LABEL_STRING(#sym));
#define __weak_alias(alias,sym)           \
    __asm(".weak " _C_LABEL_STRING(#alias) "\n"     \
      _C_LABEL_STRING(#alias) " = " _C_LABEL_STRING(#sym));

/* Do not use __weak_extern, use __weak_reference instead */
#define __weak_extern(sym)            \
    __asm(".weak " _C_LABEL_STRING(#sym));

#if __GNUC_PREREQ__(4, 0)
#define __weak_reference(sym) __attribute__((__weakref__))
#else
#define __weak_reference(sym) ; __asm(".weak " _C_LABEL_STRING(#sym))
#endif

#define __warn_references(sym,msg)          \
  __asm(".stabs \"" msg "\",30,0,0,0");       \
  __asm(".stabs \"_" #sym "\",1,0,0,0");
    #else
      #define __strong_alias(alias,sym)   /* NOTHING */
      #define __weak_alias(alias,sym)     /* NOTHING */
      #define __weak_extern(sym)          /* NOTHING */
      #define __weak_reference(sym)       /* NOTHING */

      #define __warn_references(sym,msg)          \
              __asm(".stabs \"" msg "\",30,0,0,0");       \
              __asm(".stabs \"_" #sym "\",1,0,0,0");
    #endif
#else /* __STDC__ */
#define __weak_alias(alias,sym) ___weak_alias(_/**/alias,_/**/sym)
#define ___weak_alias(alias,sym)          \
    __asm(".weak alias\nalias = sym");
/* Do not use __weak_extern, use __weak_reference instead */
#define __weak_extern(sym) ___weak_extern(_/**/sym)
#define ___weak_extern(sym)           \
    __asm(".weak sym");

#if __GNUC_PREREQ__(4, 0)
#define __weak_reference(sym) __attribute__((__weakref__))
#else
#define ___weak_reference(sym)  ; __asm(".weak sym");
#define __weak_reference(sym) ___weak_reference(_/**/sym)
#endif

#define __warn_references(sym,msg)          \
  __asm(".stabs msg,30,0,0,0");         \
  __asm(".stabs \"_/**/sym\",1,0,0,0");
#endif /* __STDC__ */
#else /* __GNUC__ */
#define __warn_references(sym,msg)
#endif /* __GNUC__ */

#if defined(__sh__)   /* XXX SH COFF */
#undef __indr_reference(sym,alias)
#undef __warn_references(sym,msg)
#define __warn_references(sym,msg)
#endif

#define __IDSTRING(_n,_s)           \
  __asm(".data ; .asciz \"" _s "\" ; .text")

#undef __KERNEL_RCSID

//#define __RCSID(_s) __IDSTRING(rcsid,_s)
#define __RCSID(_s)
#define __SCCSID(_s)
#define __SCCSID2(_s)
#if 0 /* XXX userland __COPYRIGHTs have \ns in them */
#define __COPYRIGHT(_s) __IDSTRING(copyright,_s)
#else
#define __COPYRIGHT(_s)             \
  static const char copyright[] __attribute__((__unused__)) = _s
#endif

#if defined(USE_KERNEL_RCSIDS) || !defined(_KERNEL)
#define __KERNEL_RCSID(_n,_s) __IDSTRING(__CONCAT(rcsid,_n),_s)
#else
#define __KERNEL_RCSID(_n,_s)
#endif
#define __KERNEL_SCCSID(_n,_s)
#define __KERNEL_COPYRIGHT(_n, _s) __IDSTRING(__CONCAT(copyright,_n),_s)

#ifndef __lint__
#define __link_set_make_entry(set, sym, type)       \
  static void const * const         \
      __link_set_##set##_sym_##sym __used = &sym;   \
  __asm(".stabs \"___link_set_" #set "\", " #type ", 0, 0, _" #sym)
#else
#define __link_set_make_entry(set, sym, type)       \
  extern void const * const __link_set_##set##_sym_##sym
#endif /* __lint__ */

#define __link_set_add_text(set, sym) __link_set_make_entry(set, sym, 23)
#define __link_set_add_rodata(set, sym) __link_set_make_entry(set, sym, 23)
#define __link_set_add_data(set, sym) __link_set_make_entry(set, sym, 25)
#define __link_set_add_bss(set, sym)  __link_set_make_entry(set, sym, 27)

#define __link_set_decl(set, ptype)         \
extern struct {               \
  int __ls_length;            \
  ptype *__ls_items[1];           \
} __link_set_##set

#define __link_set_start(set) (&(__link_set_##set).__ls_items[0])
#define __link_set_end(set)           \
  (&(__link_set_##set).__ls_items[(__link_set_##set).__ls_length])

#define __link_set_count(set) ((__link_set_##set).__ls_length)

#endif /* !_SYS_CDEFS_AOUT_H_ */