summaryrefslogtreecommitdiffstats
path: root/runtime/runtime.h
diff options
context:
space:
mode:
authorjistone <jistone>2006-12-09 02:03:58 +0000
committerjistone <jistone>2006-12-09 02:03:58 +0000
commit9ba8c134d15dcf75e42dfaef7f72a6bc492fdbbb (patch)
tree5def76740609ffd298ee2d558905d535a2072350 /runtime/runtime.h
parent6a256b03673beeea1c2d6731d5b680b50778b124 (diff)
downloadsystemtap-steved-9ba8c134d15dcf75e42dfaef7f72a6bc492fdbbb.tar.gz
systemtap-steved-9ba8c134d15dcf75e42dfaef7f72a6bc492fdbbb.tar.xz
systemtap-steved-9ba8c134d15dcf75e42dfaef7f72a6bc492fdbbb.zip
2006-12-08 Josh Stone <joshua.i.stone@intel.com>
PR 3681. * staptree.h (struct vardecl): Add a literal 'init' member for the initialization value of globals. * staptree.cxx (vardecl::vardecl): Initialize 'init' to NULL. (vardecl::print): Print global init value during pass-1 output. * main.cxx (printscript): Print global init values during verbose pass-2 output. * parse.cxx (parser::parse_global): Set the initialization literal of global vardecls. * translate.cxx (var::init): Don't unconditionally override the value of numeric globals when the module_param isn't used. (c_unparser::emit_global_param): Write numeric module_params directly into the global variable, as an int64_t instead of long. (c_unparser::emit_global): Add initialization to global declarations. Don't create a temp module_param long for numeric globals anymore. runtime/ * runtime.h (param_set_int64_t, param_get_int64_t, param_check_int64_t): New functions to allow taking module parameters directly as int64_t values. testsuite/ * systemtap.base/global_init.exp, systemtap.base/global_init.stp: New test for checking the timeliness of global initialization.
Diffstat (limited to 'runtime/runtime.h')
-rw-r--r--runtime/runtime.h31
1 files changed, 30 insertions, 1 deletions
diff --git a/runtime/runtime.h b/runtime/runtime.h
index 63b7432e..b8094451 100644
--- a/runtime/runtime.h
+++ b/runtime/runtime.h
@@ -1,6 +1,6 @@
/* main header file
* Copyright (C) 2005, 2006 Red Hat Inc.
- * Copyright (C) 2005 Intel Corporation.
+ * Copyright (C) 2005, 2006 Intel Corporation.
*
* This file is part of systemtap, and is free software. You can
* redistribute it and/or modify it under the terms of the GNU General
@@ -82,6 +82,35 @@ static struct
#include "perf.c"
#endif
+/* Support functions for int64_t module parameters. */
+int param_set_int64_t(const char *val, struct kernel_param *kp)
+{
+ char *endp;
+ long long ll;
+
+ if (!val)
+ return -EINVAL;
+
+ /* simple_strtoll isn't exported... */
+ if (*val == '-')
+ ll = -simple_strtoull(val+1, &endp, 0);
+ else
+ ll = simple_strtoull(val, &endp, 0);
+
+ if ((endp == val) || ((int64_t)ll != ll))
+ return -EINVAL;
+
+ *((int64_t *)kp->arg) = ll;
+ return 0;
+}
+
+int param_get_int64_t(char *buffer, struct kernel_param *kp)
+{
+ return sprintf(buffer, "%lli", (long long)*((int64_t *)kp->arg));
+}
+
+#define param_check_int64_t(name, p) __param_check(name, p, int64_t)
+
/************* Module Stuff ********************/