Project

General

Profile

Statistics
| Revision:

root / lab4 / .minix-src / include / sys / cdefs_aout.h @ 14

History | View | Annotate | Download (3.83 KB)

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@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
#if __STDC__
15
#define        ___RENAME(x)        __asm(___STRING(_C_LABEL(x)))
16
#else
17
#define        ___RENAME(x)        ____RENAME(_/**/x)
18
#define        ____RENAME(x)        __asm(___STRING(x))
19
#endif
20

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

    
23
#ifdef __GNUC__
24
#if __STDC__
25
#define        __strong_alias(alias,sym)                                               \
26
    __asm(".global " _C_LABEL_STRING(#alias) "\n"                        \
27
            _C_LABEL_STRING(#alias) " = " _C_LABEL_STRING(#sym));
28
#define        __weak_alias(alias,sym)                                                \
29
    __asm(".weak " _C_LABEL_STRING(#alias) "\n"                        \
30
            _C_LABEL_STRING(#alias) " = " _C_LABEL_STRING(#sym));
31

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

    
36
#if __GNUC_PREREQ__(4, 0)
37
#define        __weak_reference(sym)        __attribute__((__weakref__))
38
#else
39
#define        __weak_reference(sym)        ; __asm(".weak " _C_LABEL_STRING(#sym))
40
#endif
41

    
42
#define        __warn_references(sym,msg)                                        \
43
        __asm(".stabs \"" msg "\",30,0,0,0");                                \
44
        __asm(".stabs \"_" #sym "\",1,0,0,0");
45
#else /* __STDC__ */
46
#define        __weak_alias(alias,sym) ___weak_alias(_/**/alias,_/**/sym)
47
#define        ___weak_alias(alias,sym)                                        \
48
    __asm(".weak alias\nalias = sym");
49
/* Do not use __weak_extern, use __weak_reference instead */
50
#define        __weak_extern(sym) ___weak_extern(_/**/sym)
51
#define        ___weak_extern(sym)                                                \
52
    __asm(".weak sym");
53

    
54
#if __GNUC_PREREQ__(4, 0)
55
#define        __weak_reference(sym)        __attribute__((__weakref__))
56
#else
57
#define        ___weak_reference(sym)        ; __asm(".weak sym");
58
#define        __weak_reference(sym)        ___weak_reference(_/**/sym)
59
#endif
60

    
61
#define        __warn_references(sym,msg)                                        \
62
        __asm(".stabs msg,30,0,0,0");                                        \
63
        __asm(".stabs \"_/**/sym\",1,0,0,0");
64
#endif /* __STDC__ */
65
#else /* __GNUC__ */
66
#define        __warn_references(sym,msg)
67
#endif /* __GNUC__ */
68

    
69
#if defined(__sh__)                /* XXX SH COFF */
70
#undef __indr_reference(sym,alias)
71
#undef __warn_references(sym,msg)
72
#define        __warn_references(sym,msg)
73
#endif
74

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

    
78
#undef __KERNEL_RCSID
79

    
80
#define        __RCSID(_s)        __IDSTRING(rcsid,_s)
81
#define        __SCCSID(_s)
82
#define        __SCCSID2(_s)
83
#if 0        /* XXX userland __COPYRIGHTs have \ns in them */
84
#define        __COPYRIGHT(_s)        __IDSTRING(copyright,_s)
85
#else
86
#define        __COPYRIGHT(_s)                                                        \
87
        static const char copyright[] __attribute__((__unused__)) = _s
88
#endif
89

    
90
#if defined(USE_KERNEL_RCSIDS) || !defined(_KERNEL)
91
#define        __KERNEL_RCSID(_n,_s) __IDSTRING(__CONCAT(rcsid,_n),_s)
92
#else
93
#define        __KERNEL_RCSID(_n,_s)
94
#endif
95
#define        __KERNEL_SCCSID(_n,_s)
96
#define        __KERNEL_COPYRIGHT(_n, _s) __IDSTRING(__CONCAT(copyright,_n),_s)
97

    
98
#ifndef __lint__
99
#define        __link_set_make_entry(set, sym, type)                                \
100
        static void const * const                                        \
101
            __link_set_##set##_sym_##sym __used = &sym;                \
102
        __asm(".stabs \"___link_set_" #set "\", " #type ", 0, 0, _" #sym)
103
#else
104
#define        __link_set_make_entry(set, sym, type)                                \
105
        extern void const * const __link_set_##set##_sym_##sym
106
#endif /* __lint__ */
107

    
108
#define        __link_set_add_text(set, sym)        __link_set_make_entry(set, sym, 23)
109
#define        __link_set_add_rodata(set, sym)        __link_set_make_entry(set, sym, 23)
110
#define        __link_set_add_data(set, sym)        __link_set_make_entry(set, sym, 25)
111
#define        __link_set_add_bss(set, sym)        __link_set_make_entry(set, sym, 27)
112

    
113
#define        __link_set_decl(set, ptype)                                        \
114
extern struct {                                                                \
115
        int        __ls_length;                                                \
116
        ptype        *__ls_items[1];                                                \
117
} __link_set_##set
118

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

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

    
125
#endif /* !_SYS_CDEFS_AOUT_H_ */