diff options
author | Frank Ch. Eigler <fche@elastic.org> | 2009-12-20 12:16:33 -0500 |
---|---|---|
committer | Frank Ch. Eigler <fche@elastic.org> | 2009-12-20 12:17:07 -0500 |
commit | be00414012df13c2eddf98909b3cdfe21c2a94d8 (patch) | |
tree | c9151e2dcd0a9ed880d3ce1c007b5a0517a0bc2b /runtime | |
parent | b5a0dd413a3e4f521df7febca6b88f0ec6b9ff36 (diff) | |
download | systemtap-steved-be00414012df13c2eddf98909b3cdfe21c2a94d8.tar.gz systemtap-steved-be00414012df13c2eddf98909b3cdfe21c2a94d8.tar.xz systemtap-steved-be00414012df13c2eddf98909b3cdfe21c2a94d8.zip |
PR10601 cont'd, RHEL5 backward compatibility with more runtime/autoconf*
Diffstat (limited to 'runtime')
-rw-r--r-- | runtime/autoconf-regset.c | 7 | ||||
-rw-r--r-- | runtime/autoconf-utrace-regset.c | 8 | ||||
-rw-r--r-- | runtime/loc2c-runtime.h | 25 |
3 files changed, 35 insertions, 5 deletions
diff --git a/runtime/autoconf-regset.c b/runtime/autoconf-regset.c new file mode 100644 index 00000000..9d994b03 --- /dev/null +++ b/runtime/autoconf-regset.c @@ -0,0 +1,7 @@ +#include <linux/regset.h> + +int foobar(int n) { + const struct user_regset_view *rsv = task_user_regset_view(current); + const struct user_regset *rs = & rsv->regsets[0]; + return rsv->n + n + (rs->get)(current, rs, 0, 0, NULL, NULL); +} diff --git a/runtime/autoconf-utrace-regset.c b/runtime/autoconf-utrace-regset.c new file mode 100644 index 00000000..1728f239 --- /dev/null +++ b/runtime/autoconf-utrace-regset.c @@ -0,0 +1,8 @@ +#include <linux/tracehook.h> + +/* old rhel5 utrace regset */ +int foobar(int n) { + const struct utrace_regset_view *rsv = utrace_native_view(current); + const struct utrace_regset *rs = & rsv->regsets[0]; + return rsv->n + n + (rs->get)(current, rs, 0, 0, NULL, NULL); +} diff --git a/runtime/loc2c-runtime.h b/runtime/loc2c-runtime.h index d23df7f2..c89d5b2c 100644 --- a/runtime/loc2c-runtime.h +++ b/runtime/loc2c-runtime.h @@ -82,9 +82,20 @@ }) #endif - -/* PR 10601: user-space (user_regset) register access. Needs porting to each architecture. */ +/* PR 10601: user-space (user_regset) register access. */ +#if defined(STAPCONF_REGSET) #include <linux/regset.h> +#endif + +#if defined(STAPCONF_UTRACE_REGSET) +#include <linux/tracehook.h> +/* adapt new names to old decls */ +#define user_regset_view utrace_regset_view +#define user_regset utrace_regset +#define task_user_regset_view utrace_native_view +#endif + +#if defined(STAPCONF_REGSET) || defined(STAPCONF_UTRACE_REGSET) struct usr_regset_lut { char *name; @@ -122,7 +133,7 @@ static const struct usr_regset_lut url_x86_64[] = { { "r14", NT_PRSTATUS, 1*8 }, { "r15", NT_PRSTATUS, 0*8 }, }; - +/* XXX: insert other architectures here. */ static u32 ursl_fetch32 (const struct usr_regset_lut* lut, unsigned lutsize, int e_machine, unsigned regno) @@ -279,8 +290,6 @@ static void ursl_store64 (const struct usr_regset_lut* lut,unsigned lutsize, in #else -#error "no can do" - /* Some other architecture; downgrade to kernel register access. */ #define u_fetch_register(regno) k_fetch_register(regno) #define u_store_register(regno,value) k_store_register(regno,value) @@ -288,6 +297,12 @@ static void ursl_store64 (const struct usr_regset_lut* lut,unsigned lutsize, in #endif +#else /* ! STAPCONF_REGSET */ +/* Downgrade to kernel register access. */ +#define u_fetch_register(regno) k_fetch_register(regno) +#define u_store_register(regno,value) k_store_register(regno,value) +#endif + #if defined (STAPCONF_X86_UNIREGS) && defined (__i386__) |