author | Hajime Tazaki <tazaki@sfc.wide.ad.jp> |
Tue, 04 Mar 2014 11:01:04 +0900 | |
changeset 578 | 71461e470024 |
parent 451 | 0d12323b6961 |
permissions | -rw-r--r-- |
181
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
1 |
|
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
2 |
#include "libc.h" |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
3 |
|
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
4 |
struct Libc g_libc; |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
5 |
|
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
6 |
// macros stolen from glibc. |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
7 |
#define weak_alias(name, aliasname) \ |
367
be749a6bbde0
coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents:
300
diff
changeset
|
8 |
extern __typeof (name) aliasname __attribute__ ((weak, alias (# name))) |
181
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
9 |
|
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
10 |
extern "C" { |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
11 |
|
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
12 |
// Step 2. Very dirty trick to force redirection to library functions |
289
096bb07cdd73
update DCE macro not to collapse the stack under 32bit environment (this is really dirty workaround)
Hajime Tazaki <tazaki@nict.go.jp>
parents:
265
diff
changeset
|
13 |
// This will work only with GCC. Number 128 was picked to be arbitrarily large to allow |
181
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
14 |
// function calls with a large number of arguments. |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
15 |
// \see http://tigcc.ticalc.org/doc/gnuexts.html#SEC67___builtin_apply_args |
289
096bb07cdd73
update DCE macro not to collapse the stack under 32bit environment (this is really dirty workaround)
Hajime Tazaki <tazaki@nict.go.jp>
parents:
265
diff
changeset
|
16 |
// FIXME: 120925: 128 was heuristically picked to pass the test under 32bits environment. |
181
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
17 |
#define NATIVE DCE |
451
0d12323b6961
Bug 1624 - glibc-2.15/2.16 on 32bit oses broke dce-iperf
Hajime Tazaki <tazaki@nict.go.jp>
parents:
367
diff
changeset
|
18 |
#define NATIVET DCET |
181
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
19 |
#define NATIVE_WITH_ALIAS DCE_WITH_ALIAS |
185
7ec11ce9a4ad
Alexander Afanasyev Adding a couple of more libc exports that allow to run almost an
frederic.urbani@inria.fr
parents:
181
diff
changeset
|
20 |
#define NATIVE_WITH_ALIAS2 DCE_WITH_ALIAS2 |
181
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
21 |
|
578
71461e470024
(temporal) Bug 1773 - DCE doesn't run on Fedora 19, Ubuntu 13.10 (64bits)
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
451
diff
changeset
|
22 |
#define GCC_BT_NUM_ARGS 128 |
71461e470024
(temporal) Bug 1773 - DCE doesn't run on Fedora 19, Ubuntu 13.10 (64bits)
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
451
diff
changeset
|
23 |
|
207
e7e165717a73
First changes to support or re-support Ubuntu 10.04.
frederic.urbani@inria.fr
parents:
185
diff
changeset
|
24 |
#define GCC_BUILTIN_APPLY(export_symbol, func_to_call) \ |
367
be749a6bbde0
coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents:
300
diff
changeset
|
25 |
void export_symbol (...) { \ |
be749a6bbde0
coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents:
300
diff
changeset
|
26 |
void *args = __builtin_apply_args (); \ |
578
71461e470024
(temporal) Bug 1773 - DCE doesn't run on Fedora 19, Ubuntu 13.10 (64bits)
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
451
diff
changeset
|
27 |
void *result = __builtin_apply (g_libc.func_to_call ## _fn, args, GCC_BT_NUM_ARGS); \ |
367
be749a6bbde0
coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents:
300
diff
changeset
|
28 |
__builtin_return (result); \ |
207
e7e165717a73
First changes to support or re-support Ubuntu 10.04.
frederic.urbani@inria.fr
parents:
185
diff
changeset
|
29 |
} |
e7e165717a73
First changes to support or re-support Ubuntu 10.04.
frederic.urbani@inria.fr
parents:
185
diff
changeset
|
30 |
|
e7e165717a73
First changes to support or re-support Ubuntu 10.04.
frederic.urbani@inria.fr
parents:
185
diff
changeset
|
31 |
#define GCC_BUILTIN_APPLYT(rtype, export_symbol, func_to_call) \ |
367
be749a6bbde0
coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents:
300
diff
changeset
|
32 |
rtype export_symbol (...) { \ |
be749a6bbde0
coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents:
300
diff
changeset
|
33 |
void *args = __builtin_apply_args (); \ |
578
71461e470024
(temporal) Bug 1773 - DCE doesn't run on Fedora 19, Ubuntu 13.10 (64bits)
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents:
451
diff
changeset
|
34 |
void *result = __builtin_apply ((void (*) (...)) g_libc.func_to_call ## _fn, args, GCC_BT_NUM_ARGS); \ |
367
be749a6bbde0
coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents:
300
diff
changeset
|
35 |
__builtin_return (result); \ |
207
e7e165717a73
First changes to support or re-support Ubuntu 10.04.
frederic.urbani@inria.fr
parents:
185
diff
changeset
|
36 |
} |
e7e165717a73
First changes to support or re-support Ubuntu 10.04.
frederic.urbani@inria.fr
parents:
185
diff
changeset
|
37 |
|
181
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
38 |
|
367
be749a6bbde0
coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents:
300
diff
changeset
|
39 |
#define DCE(name) \ |
be749a6bbde0
coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents:
300
diff
changeset
|
40 |
GCC_BUILTIN_APPLY (name,name) |
207
e7e165717a73
First changes to support or re-support Ubuntu 10.04.
frederic.urbani@inria.fr
parents:
185
diff
changeset
|
41 |
|
e7e165717a73
First changes to support or re-support Ubuntu 10.04.
frederic.urbani@inria.fr
parents:
185
diff
changeset
|
42 |
#define DCET(rtype,name) \ |
367
be749a6bbde0
coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents:
300
diff
changeset
|
43 |
GCC_BUILTIN_APPLYT (rtype,name,name) |
207
e7e165717a73
First changes to support or re-support Ubuntu 10.04.
frederic.urbani@inria.fr
parents:
185
diff
changeset
|
44 |
|
253
8c86080ced8e
improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents:
216
diff
changeset
|
45 |
/* From gcc/testsuite/gcc.dg/cpp/vararg2.c */ |
8c86080ced8e
improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents:
216
diff
changeset
|
46 |
/* C99 __VA_ARGS__ versions */ |
367
be749a6bbde0
coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents:
300
diff
changeset
|
47 |
#define c99_count(...) _c99_count1 (, ## __VA_ARGS__) /* If only ## worked.*/ |
253
8c86080ced8e
improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents:
216
diff
changeset
|
48 |
#define _c99_count1(...) _c99_count2 (__VA_ARGS__,10,9,8,7,6,5,4,3,2,1,0) |
8c86080ced8e
improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents:
216
diff
changeset
|
49 |
#define _c99_count2(_,x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,n,...) n |
8c86080ced8e
improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents:
216
diff
changeset
|
50 |
|
8c86080ced8e
improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents:
216
diff
changeset
|
51 |
#define FULL_ARGS_0() |
8c86080ced8e
improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents:
216
diff
changeset
|
52 |
#define FULL_ARGS_1(X0) X0 a0 |
8c86080ced8e
improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents:
216
diff
changeset
|
53 |
#define FULL_ARGS_2(X0,X1) X0 a0, X1 a1 |
8c86080ced8e
improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents:
216
diff
changeset
|
54 |
#define FULL_ARGS_3(X0,X1,X2) X0 a0, X1 a1, X2 a2 |
8c86080ced8e
improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents:
216
diff
changeset
|
55 |
#define FULL_ARGS_4(X0,X1,X2,X3) X0 a0, X1 a1, X2 a2, X3 a3 |
8c86080ced8e
improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents:
216
diff
changeset
|
56 |
#define FULL_ARGS_5(X0,X1,X2,X3,X4) X0 a0, X1 a1, X2 a2, X3 a3, X4 a4 |
8c86080ced8e
improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents:
216
diff
changeset
|
57 |
|
8c86080ced8e
improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents:
216
diff
changeset
|
58 |
#define _ARGS_0() |
8c86080ced8e
improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents:
216
diff
changeset
|
59 |
#define _ARGS_1(X0) a0 |
8c86080ced8e
improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents:
216
diff
changeset
|
60 |
#define _ARGS_2(X0,X1) a0, a1 |
8c86080ced8e
improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents:
216
diff
changeset
|
61 |
#define _ARGS_3(X0,X1,X2) a0, a1, a2 |
8c86080ced8e
improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents:
216
diff
changeset
|
62 |
#define _ARGS_4(X0,X1,X2,X3) a0, a1, a2, a3 |
8c86080ced8e
improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents:
216
diff
changeset
|
63 |
#define _ARGS_5(X0,X1,X2,X3,X4) a0, a1, a2, a3, a4 |
8c86080ced8e
improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents:
216
diff
changeset
|
64 |
|
367
be749a6bbde0
coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents:
300
diff
changeset
|
65 |
#define CAT(a, ...) PRIMITIVE_CAT (a, __VA_ARGS__) |
253
8c86080ced8e
improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents:
216
diff
changeset
|
66 |
#define PRIMITIVE_CAT(a, ...) a ## __VA_ARGS__ |
367
be749a6bbde0
coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents:
300
diff
changeset
|
67 |
|
be749a6bbde0
coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents:
300
diff
changeset
|
68 |
#define FULL_ARGS(...) CAT (FULL_ARGS_,c99_count (__VA_ARGS__)) (__VA_ARGS__) |
be749a6bbde0
coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents:
300
diff
changeset
|
69 |
#define ARGS(...) CAT (_ARGS_,c99_count (__VA_ARGS__)) (__VA_ARGS__) |
253
8c86080ced8e
improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents:
216
diff
changeset
|
70 |
|
8c86080ced8e
improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents:
216
diff
changeset
|
71 |
|
8c86080ced8e
improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents:
216
diff
changeset
|
72 |
#define DCE_EXPLICIT(name,rtype,...) \ |
367
be749a6bbde0
coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents:
300
diff
changeset
|
73 |
rtype name (FULL_ARGS (__VA_ARGS__)) \ |
253
8c86080ced8e
improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents:
216
diff
changeset
|
74 |
{ \ |
367
be749a6bbde0
coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents:
300
diff
changeset
|
75 |
return g_libc.name ## _fn (ARGS (__VA_ARGS__)); \ |
253
8c86080ced8e
improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents:
216
diff
changeset
|
76 |
} |
207
e7e165717a73
First changes to support or re-support Ubuntu 10.04.
frederic.urbani@inria.fr
parents:
185
diff
changeset
|
77 |
|
367
be749a6bbde0
coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents:
300
diff
changeset
|
78 |
#define DCE_WITH_ALIAS(name) \ |
be749a6bbde0
coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents:
300
diff
changeset
|
79 |
GCC_BUILTIN_APPLY (__ ## name,name) \ |
be749a6bbde0
coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents:
300
diff
changeset
|
80 |
weak_alias (__ ## name, name); |
181
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
81 |
|
367
be749a6bbde0
coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents:
300
diff
changeset
|
82 |
#define DCE_WITH_ALIAS2(name, internal) \ |
be749a6bbde0
coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents:
300
diff
changeset
|
83 |
GCC_BUILTIN_APPLY (internal,name) \ |
be749a6bbde0
coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents:
300
diff
changeset
|
84 |
weak_alias (internal, name); |
be749a6bbde0
coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents:
300
diff
changeset
|
85 |
|
181
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
86 |
|
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
87 |
// Note: it looks like that the stdio.h header does |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
88 |
// not define putc and getc as macros if you include |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
89 |
// them from C++ so that we do need to define the putc |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
90 |
// and getc functions anyway. |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
91 |
#undef putc |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
92 |
#undef getc |
207
e7e165717a73
First changes to support or re-support Ubuntu 10.04.
frederic.urbani@inria.fr
parents:
185
diff
changeset
|
93 |
|
181
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
94 |
#include "libc-ns3.h" // do the work |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
95 |
|
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
96 |
// weak_alias (strtol, __strtol_internal); |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
97 |
// weak_alias (wctype_l, __wctype_l); |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
98 |
// weak_alias (strdup, __strdup); |
367
be749a6bbde0
coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents:
300
diff
changeset
|
99 |
|
181
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
100 |
// void exit(int status) |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
101 |
// { |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
102 |
// g_libc.exit_fn (status); |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
103 |
// int a = 0; |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
104 |
// while (1) |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
105 |
// { |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
106 |
// // loop forever to quiet compiler warning: |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
107 |
// // warning: ‘noreturn’ function does return |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
108 |
// a++; |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
109 |
// } |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
110 |
// } |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
111 |
|
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
112 |
// void abort(void) |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
113 |
// { |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
114 |
// g_libc.abort_fn (); |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
115 |
// int a = 0; |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
116 |
// while (1) |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
117 |
// { |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
118 |
// // loop forever to quiet compiler warning: |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
119 |
// // warning: ‘noreturn’ function does return |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
120 |
// a++; |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
121 |
// } |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
122 |
// } |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
123 |
|
367
be749a6bbde0
coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents:
300
diff
changeset
|
124 |
char * strpbrk (const char *s, const char *a) |
265 | 125 |
{ |
126 |
return g_libc.strpbrk_fn (s,a); |
|
127 |
} |
|
128 |
||
367
be749a6bbde0
coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents:
300
diff
changeset
|
129 |
char * strstr (const char *u, const char *d) |
265 | 130 |
{ |
131 |
return g_libc.strstr_fn (u,d); |
|
132 |
} |
|
133 |
||
300
65899b480bb9
Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents:
289
diff
changeset
|
134 |
int snprintf (char *s, size_t si, const char *f, ...) |
65899b480bb9
Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents:
289
diff
changeset
|
135 |
{ |
65899b480bb9
Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents:
289
diff
changeset
|
136 |
va_list vl; |
65899b480bb9
Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents:
289
diff
changeset
|
137 |
va_start (vl, f); |
65899b480bb9
Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents:
289
diff
changeset
|
138 |
int r = g_libc.vsnprintf_fn (s, si, f, vl); |
65899b480bb9
Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents:
289
diff
changeset
|
139 |
va_end (vl); |
65899b480bb9
Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents:
289
diff
changeset
|
140 |
|
65899b480bb9
Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents:
289
diff
changeset
|
141 |
return r; |
65899b480bb9
Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents:
289
diff
changeset
|
142 |
} |
65899b480bb9
Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents:
289
diff
changeset
|
143 |
int vsnprintf (char *s, size_t si, const char *f, va_list v) |
65899b480bb9
Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents:
289
diff
changeset
|
144 |
{ |
65899b480bb9
Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents:
289
diff
changeset
|
145 |
return g_libc.vsnprintf_fn (s, si, f, v); |
65899b480bb9
Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents:
289
diff
changeset
|
146 |
} |
65899b480bb9
Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents:
289
diff
changeset
|
147 |
|
181
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
148 |
#include "libc-globals.h" |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
149 |
|
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
150 |
void LIBSETUP (const struct Libc *fn) |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
151 |
{ |
367
be749a6bbde0
coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents:
300
diff
changeset
|
152 |
/* The following assignment of fn to g_libc is a bit weird: we perform a copy of the data |
be749a6bbde0
coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents:
300
diff
changeset
|
153 |
* structures by hand rather than executing g_libc = fn. This is obviously done on purpose. |
be749a6bbde0
coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents:
300
diff
changeset
|
154 |
* The reason is that g_libc = fn would trigger a call to the memcpy function because the |
be749a6bbde0
coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents:
300
diff
changeset
|
155 |
* Libc structure is very big. The memcpy function is resolved through the dynamic loader's |
be749a6bbde0
coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents:
300
diff
changeset
|
156 |
* symbol lookup mechanism to the local memcpy function and that local memcpy function happens |
be749a6bbde0
coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents:
300
diff
changeset
|
157 |
* to be calling g_libc.memcpy_fn which is set to NULL before the data structure is initialized. |
181
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
158 |
*/ |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
159 |
const unsigned char *src = (const unsigned char *)fn; |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
160 |
unsigned char *dst = (unsigned char *)&g_libc; |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
161 |
unsigned int i; |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
162 |
for (i = 0; i < sizeof (struct Libc); ++i) |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
163 |
{ |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
164 |
*dst = *src; |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
165 |
src++; |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
166 |
dst++; |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
167 |
} |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
168 |
|
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
169 |
setup_global_variables (); |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
170 |
} |
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
171 |
|
216 | 172 |
#ifdef HAVE_GETCPUFEATURES |
173 |
// Below there is an exception implementation: because the libm of glibc2.14 call __get_cpu_features during dlopen, |
|
174 |
// and during dlopen of libm DCE do not have yet called lib_setup so there we implement __get_cpu_features |
|
175 |
// directly without using the global g_libc variable, we can do it only if our implementation of the method |
|
176 |
// do not interract with any ressouces of DCE or NS3 and do no call any other libc methods ... |
|
177 |
struct cpu_features; |
|
367
be749a6bbde0
coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents:
300
diff
changeset
|
178 |
extern const struct cpu_features * dce___get_cpu_features (void); |
be749a6bbde0
coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents:
300
diff
changeset
|
179 |
const struct cpu_features * __get_cpu_features (void) |
216 | 180 |
{ |
181 |
return dce___get_cpu_features (); |
|
182 |
} |
|
183 |
#endif |
|
181
231e0431cf57
Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff
changeset
|
184 |
} // extern "C" |