RTEMS CPU Kit with SuperCore
4.11.3
Main Page
Related Pages
Modules
+
Data Structures
Data Structures
+
Data Fields
+
All
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
+
Variables
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
+
Files
File List
+
Globals
+
All
_
a
b
c
d
e
f
g
h
i
j
l
m
n
o
p
q
r
s
t
u
v
w
x
+
Functions
_
a
b
c
d
e
f
g
i
j
l
m
n
o
p
q
r
s
t
u
v
w
+
Variables
_
b
c
d
i
r
+
Typedefs
a
b
c
d
f
h
i
m
o
p
q
r
s
t
u
w
x
+
Enumerations
b
c
d
e
h
i
m
o
p
r
s
t
w
+
Enumerator
c
i
m
p
r
s
t
w
+
Macros
_
a
b
c
d
e
f
g
h
i
l
m
n
o
p
r
s
t
w
mnt
data0
chrisj
rtems
releases
rtems-release.git
4.11.3
ws-rtems
rtems-4.11.3
cpukit
libnetworking
sys
linker_set.h
Go to the documentation of this file.
1
/*-
2
* Copyright (c) 1999 John D. Polstra
3
* Copyright (c) 1999,2001 Peter Wemm <peter@FreeBSD.org>
4
* All rights reserved.
5
*
6
* Redistribution and use in source and binary forms, with or without
7
* modification, are permitted provided that the following conditions
8
* are met:
9
* 1. Redistributions of source code must retain the above copyright
10
* notice, this list of conditions and the following disclaimer.
11
* 2. Redistributions in binary form must reproduce the above copyright
12
* notice, this list of conditions and the following disclaimer in the
13
* documentation and/or other materials provided with the distribution.
14
*
15
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25
* SUCH DAMAGE.
26
*
27
* $FreeBSD: src/sys/sys/linker_set.h,v 1.13 2002/09/23 06:11:29 peter Exp $
28
*/
29
30
#ifndef _SYS_LINKER_SET_H_
31
#define _SYS_LINKER_SET_H_
32
33
/* FIXME: These macros should not be here
34
* BSD has them macros in sys/cdefs.h
35
* older rtems had them in rtems/bsd/sys/cdefs.h
36
* newlib has some of them in sys/cdefs.h
37
*/
38
39
#if defined(__rtems__)
40
#ifndef __used
41
#define __used __attribute__((__used__))
42
#endif
43
#ifndef __CONCAT
44
#define __CONCAT1(x,y) x ## y
45
#define __CONCAT(x,y) __CONCAT1(x,y)
46
#endif
47
#endif
48
49
/*
50
* The following macros are used to declare global sets of objects, which
51
* are collected by the linker into a `linker_set' as defined below.
52
* For ELF, this is done by constructing a separate segment for each set.
53
*/
54
55
/*
56
* Private macros, not to be used outside this header file.
57
*/
58
#ifdef __GNUC__
59
#define __MAKE_SET(set, sym) \
60
static void const * const __set_##set##_sym_##sym \
61
__attribute((section("set_" #set))) __used = &sym
62
#else
/* !__GNUC__ */
63
#ifndef lint
64
#error "This file needs to be compiled by GCC or lint"
65
#endif
/* lint */
66
#define __MAKE_SET(set, sym) extern void const * const (__set_##set##_sym_##sym)
67
#endif
/* __GNUC__ */
68
69
/*
70
* Public macros.
71
*/
72
#define TEXT_SET(set, sym) __MAKE_SET(set, sym)
73
#define DATA_SET(set, sym) __MAKE_SET(set, sym)
74
#define BSS_SET(set, sym) __MAKE_SET(set, sym)
75
#define ABS_SET(set, sym) __MAKE_SET(set, sym)
76
#define SET_ENTRY(set, sym) __MAKE_SET(set, sym)
77
78
/*
79
* Initialize before referring to a give linker set
80
*/
81
#define SET_DECLARE(set, ptype) \
82
extern ptype *__CONCAT(__start_set_,set)[]; \
83
extern ptype *__CONCAT(__stop_set_,set)[]
84
85
#define SET_BEGIN(set) \
86
(__CONCAT(__start_set_,set))
87
#define SET_LIMIT(set) \
88
(__CONCAT(__stop_set_,set))
89
90
/*
91
* Iterate over all the elements of a set.
92
*
93
* Sets always contain addresses of things, and "pvar" points to words
94
* containing those addresses. Thus is must be declared as "type **pvar",
95
* and the address of each set item is obtained inside the loop by "*pvar".
96
*/
97
#define SET_FOREACH(pvar, set) \
98
for (pvar = SET_BEGIN(set); pvar < SET_LIMIT(set); pvar++)
99
100
#define SET_ITEM(set, i) \
101
((SET_BEGIN(set))[i])
102
103
/*
104
* Provide a count of the items in a set.
105
*/
106
#define SET_COUNT(set) \
107
(SET_LIMIT(set) - SET_BEGIN(set))
108
109
#endif
/* _SYS_LINKER_SET_H_ */
Generated by
1.8.13