diff options
Diffstat (limited to 'templates')
-rw-r--r-- | templates/guts | 3 | ||||
-rw-r--r-- | templates/port_wrappers | 5 | ||||
-rw-r--r-- | templates/pseudo_ports | 6 | ||||
-rw-r--r-- | templates/wrapfuncs.c | 9 | ||||
-rw-r--r-- | templates/wrapfuncs.h | 19 | ||||
-rw-r--r-- | templates/wrapper_table | 28 |
6 files changed, 21 insertions, 49 deletions
diff --git a/templates/guts b/templates/guts index 3e32fb2..e2c9880 100644 --- a/templates/guts +++ b/templates/guts @@ -1,4 +1,5 @@ -@name guts/${name}.c +@name ports/${port}/guts/${name}.c +@header @body /* * Copyright (c) ${date} Wind River Systems; see diff --git a/templates/port_wrappers b/templates/port_wrappers new file mode 100644 index 0000000..7ff7ff8 --- /dev/null +++ b/templates/port_wrappers @@ -0,0 +1,5 @@ +@name port_wrappers.c +@header +/* additional hand-written wrappers for ports which provide them */ +@port +${include} diff --git a/templates/pseudo_ports b/templates/pseudo_ports new file mode 100644 index 0000000..113a2b6 --- /dev/null +++ b/templates/pseudo_ports @@ -0,0 +1,6 @@ +@name pseudo_ports.h +@header +/* #defines for port-specific hackery */ +@port +${define} +${portdefs} diff --git a/templates/wrapfuncs.c b/templates/wrapfuncs.c index 0a90efd..61b52ff 100644 --- a/templates/wrapfuncs.c +++ b/templates/wrapfuncs.c @@ -13,7 +13,9 @@ * script if you want to modify this. */ @body -static ${type} (*real_${name})(${decl_args}) = NULL; +static ${type} (*real_${name})(${decl_args}) = ${real_init}; + +${maybe_skip} ${type} ${name}(${decl_args}) { @@ -58,7 +60,7 @@ ${name}(${decl_args}) { save_errno = errno; pseudo_droplock(); sigprocmask(SIG_SETMASK, &saved, NULL); - pseudo_debug(4, "completed: $name\n"); + pseudo_debug(4, "completed: $name (maybe: %s)\n", strerror(save_errno)); errno = save_errno; ${rc_return} } @@ -69,8 +71,9 @@ wrap_${name}(${wrap_args}) { ${maybe_variadic_decl} ${maybe_variadic_start} -#include "guts/${name}.c" +#include "ports/${port}/guts/${name}.c" ${rc_return} } +${end_maybe_skip} diff --git a/templates/wrapfuncs.h b/templates/wrapfuncs.h index 403d261..1ce4fcc 100644 --- a/templates/wrapfuncs.h +++ b/templates/wrapfuncs.h @@ -8,22 +8,5 @@ /* ${comment} */ static ${type} wrap_${name}(${wrap_args}); static ${type} (*real_${name})(${decl_args}); +${real_predecl} @footer -/* special cases: functions with manually-written wrappers */ - -/* int fork(void) */ -static int wrap_fork(void); -static int (*real_fork)(void); -/* int clone(int (*fn)(void *), void *child_stack, int flags, void *arg, ...) */ -static int wrap_clone(int (*fn)(void *), void *child_stack, int flags, void *arg, ...); -static int (*real_clone)(int (*fn)(void *), void *child_stack, int flags, void *arg, ...); -/* int execv(const char *file, char *const *argv) */ -static int wrap_execv(const char *file, char *const *argv); -static int (*real_execv)(const char *file, char *const *argv); -/* int execve(const char *file, char *const *argv, char *const *envp) */ -static int wrap_execve(const char *file, char *const *argv, char *const *envp); -static int (*real_execve)(const char *file, char *const *argv, char *const *envp); -/* int execvp(const char *file, char *const *argv) */ -static int wrap_execvp(const char *file, char *const *argv); -static int (*real_execvp)(const char *file, char *const *argv); - diff --git a/templates/wrapper_table b/templates/wrapper_table index dd9c249..2e79fcd 100644 --- a/templates/wrapper_table +++ b/templates/wrapper_table @@ -11,36 +11,10 @@ static struct { } pseudo_functions[] = { @body { /* ${comment}; */ - "${name}", + "${name}${maybe_inode64}", (int (**)(void)) &real_${name}, (int (*)(void)) wrap_${name} }, @footer - /* special cases: Functions which need manually-coded wrappers */ - { /* int fork(void); */ - "fork", - (int (**)(void)) &real_fork, - (int (*)(void)) wrap_fork - }, - { /* int clone(int (*fn)(void *), void *, int, void, ...); */ - "clone", - (int (**)(void)) &real_clone, - (int (*)(void)) wrap_clone - }, - { /* int execv(const char *file, char *const *argv); */ - "execv", - (int (**)(void)) &real_execv, - (int (*)(void)) wrap_execv - }, - { /* int execve(const char *file, char *const *argv, char *const *envp); */ - "execve", - (int (**)(void)) &real_execve, - (int (*)(void)) wrap_execve - }, - { /* int execvp(const char *file, char *const *argv); */ - "execvp", - (int (**)(void)) &real_execvp, - (int (*)(void)) wrap_execvp - }, { NULL, NULL, NULL }, }; |