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
|
@name pseudo_wrapfuncs.c
@header
/* wrapper functions. generated automatically. */
/* IF YOU ARE SEEING COMPILER ERRORS IN THIS FILE:
* If you are seeing a whole lot of errors, make sure you aren't actually
* trying to compile pseudo_wrapfuncs.c directly. This file is #included
* from pseudo_wrappers.c, which has a lot of needed include files and
* static declarations.
*/
/* This file is generated and should not be modified. See the makewrappers
* script if you want to modify this. */
@body
static ${type} (*real_${name})(${decl_args}) = ${real_init};
${maybe_skip}
${type}
${name}(${decl_args}) {
sigset_t saved;
${variadic_decl}
${rc_decl}
PROFILE_START;
${maybe_async_skip}
if (!pseudo_check_wrappers() || !real_$name) {
/* rc was initialized to the "failure" value */
pseudo_enosys("${name}");
PROFILE_DONE;
${rc_return}
}
${variadic_start}
if (pseudo_disabled) {
${rc_assign} (*real_${name})(${call_args});
${variadic_end}
PROFILE_DONE;
${rc_return}
}
pseudo_debug(PDBGF_WRAPPER, "wrapper called: ${name}\n");
pseudo_sigblock(&saved);
pseudo_debug(PDBGF_WRAPPER | PDBGF_VERBOSE, "${name} - signals blocked, obtaining lock\n");
if (pseudo_getlock()) {
errno = EBUSY;
sigprocmask(SIG_SETMASK, &saved, NULL);
pseudo_debug(PDBGF_WRAPPER, "${name} failed to get lock, giving EBUSY.\n");
PROFILE_DONE;
${def_return}
}
int save_errno;
if (antimagic > 0) {
/* call the real syscall */
pseudo_debug(PDBGF_SYSCALL, "${name} calling real syscall.\n");
${rc_assign} (*real_${name})(${call_args});
} else {
${fix_paths}
/* exec*() use this to restore the sig mask */
pseudo_saved_sigmask = saved;
${rc_assign} wrap_$name(${call_args});
}
${variadic_end}
save_errno = errno;
pseudo_droplock();
sigprocmask(SIG_SETMASK, &saved, NULL);
pseudo_debug(PDBGF_WRAPPER | PDBGF_VERBOSE, "${name} - yielded lock, restored signals\n");
#if 0
/* This can cause hangs on some recentish systems which use locale
* stuff for strerror...
*/
pseudo_debug(PDBGF_WRAPPER, "wrapper completed: ${name} returns ${rc_format} (errno: %s)\n", ${rc_value}, strerror(save_errno));
#endif
pseudo_debug(PDBGF_WRAPPER, "wrapper completed: ${name} returns ${rc_format} (errno: %d)\n", ${rc_value}, save_errno);
errno = save_errno;
PROFILE_DONE;
${rc_return}
}
static ${type}
wrap_${name}(${wrap_args}) {
$rc_decl
${maybe_variadic_decl}
${maybe_variadic_start}
#include "ports/${port}/guts/${name}.c"
${rc_return}
}
${end_maybe_skip}
|