diff options
author | jistone <jistone> | 2006-12-09 02:03:58 +0000 |
---|---|---|
committer | jistone <jistone> | 2006-12-09 02:03:58 +0000 |
commit | 9ba8c134d15dcf75e42dfaef7f72a6bc492fdbbb (patch) | |
tree | 5def76740609ffd298ee2d558905d535a2072350 /runtime/runtime.h | |
parent | 6a256b03673beeea1c2d6731d5b680b50778b124 (diff) | |
download | systemtap-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.h | 31 |
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 ********************/ |