Module: xenomai-3 Branch: next Commit: b411e4c1129aa3c1917f5113440317eb2fddacb7 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=b411e4c1129aa3c1917f5113440317eb2fddacb7
Author: Philippe Gerum <r...@xenomai.org> Date: Mon Jan 18 15:50:57 2016 +0100 lib/boilerplate: add --trace to the base option set This option sets tracing to the desired level. The level argument may be interpreted differently depending on the application, however --trace=0 must disable tracing. Level 1 allows tracing the Xenomai library bootstrap code. The interpretation of higher levels are application-specific. Defaults to 0. --- include/boilerplate/setup.h | 9 +++++++++ include/boilerplate/tunables.h | 14 ++++++++++++-- lib/boilerplate/setup.c | 36 ++++++++++++++++++++++++++++++++++-- 3 files changed, 55 insertions(+), 4 deletions(-) diff --git a/include/boilerplate/setup.h b/include/boilerplate/setup.h index e99a9b1..5a18f6a 100644 --- a/include/boilerplate/setup.h +++ b/include/boilerplate/setup.h @@ -28,6 +28,7 @@ struct base_setup_data { int no_mlock; int no_sanity; int verbosity_level; + int trace_level; const char *arg0; }; @@ -106,6 +107,14 @@ static inline const char *get_program_name(void) return basename(__base_setup_data.arg0 ?: "program"); } +void __trace_me(const char *fmt, ...); + +#define trace_me(__fmt, __args...) \ + do { \ + if (__base_setup_data.trace_level > 0) \ + __trace_me(__fmt, ##__args); \ + } while (0) + #ifdef __cplusplus } #endif diff --git a/include/boilerplate/tunables.h b/include/boilerplate/tunables.h index 628b312..db8523b 100644 --- a/include/boilerplate/tunables.h +++ b/include/boilerplate/tunables.h @@ -99,9 +99,9 @@ static inline read_config_tunable(no_sanity, int) return __base_setup_data.no_sanity; } -static inline define_runtime_tunable(verbosity_level, int, mode) +static inline define_runtime_tunable(verbosity_level, int, level) { - __base_setup_data.verbosity_level = mode; + __base_setup_data.verbosity_level = level; } static inline read_runtime_tunable(verbosity_level, int) @@ -109,6 +109,16 @@ static inline read_runtime_tunable(verbosity_level, int) return __base_setup_data.verbosity_level; } +static inline define_runtime_tunable(trace_level, int, level) +{ + __base_setup_data.trace_level = level; +} + +static inline read_runtime_tunable(trace_level, int) +{ + return __base_setup_data.trace_level; +} + #ifdef __cplusplus } #endif diff --git a/lib/boilerplate/setup.c b/lib/boilerplate/setup.c index 1cc66a7..7a9334d 100644 --- a/lib/boilerplate/setup.c +++ b/lib/boilerplate/setup.c @@ -25,6 +25,7 @@ #include <unistd.h> #include <memory.h> #include <malloc.h> +#include <stdarg.h> #include <stdio.h> #include <assert.h> #include <xeno_config.h> @@ -36,6 +37,7 @@ struct base_setup_data __base_setup_data = { .no_sanity = !CONFIG_XENO_SANITY, .verbosity_level = 1, + .trace_level = 0, .arg0 = NULL, .no_mlock = 0, }; @@ -101,7 +103,12 @@ static const struct option base_options[] = { .flag = &__base_setup_data.no_sanity, }, { -#define no_mlock_opt 9 +#define trace_opt 9 + .name = "trace", + .has_arg = optional_argument, + }, + { +#define no_mlock_opt 10 #ifdef CONFIG_XENO_MERCURY .name = "no-mlock", .has_arg = no_argument, @@ -310,8 +317,9 @@ void xenomai_usage(void) fprintf(stderr, "--cpu-affinity=<cpu[,cpu]...> set CPU affinity of threads\n"); fprintf(stderr, "--[no-]sanity disable/enable sanity checks\n"); - fprintf(stderr, "--verbose[=level] set verbosity to desired level\n"); + fprintf(stderr, "--verbose[=level] set verbosity to desired level [=1]\n"); fprintf(stderr, "--silent, --quiet same as --verbose=0\n"); + fprintf(stderr, "--trace[=level] set tracing to desired level [=1]\n"); fprintf(stderr, "--version get version information\n"); fprintf(stderr, "--dump-config dump configuration settings\n"); #ifdef CONFIG_XENO_MERCURY @@ -369,6 +377,11 @@ static int parse_base_options(int *argcp, char *const **argvp, if (optarg) __base_setup_data.verbosity_level = atoi(optarg); break; + case trace_opt: + __base_setup_data.trace_level = 1; + if (optarg) + __base_setup_data.trace_level = atoi(optarg); + break; case silent_opt: case quiet_opt: case no_mlock_opt: @@ -436,6 +449,7 @@ static int parse_setup_options(int *argcp, int largc, char **uargv, lindex >= setup->__reserved.opt_end) continue; lindex -= setup->__reserved.opt_start; + trace_me("%s->parse_options()", setup->name); ret = setup->parse_option(lindex, optarg); if (ret == 0) break; @@ -496,6 +510,8 @@ void xenomai_init(int *argcp, char *const **argvp) if (ret) goto fail; + trace_me("%s() running", __func__); + #ifndef CONFIG_SMP if (__base_setup_data.no_sanity == 0) { ret = get_static_cpu_count(); @@ -514,6 +530,7 @@ void xenomai_init(int *argcp, char *const **argvp) goto fail; } } + trace_me("memory locked"); #endif /* @@ -527,6 +544,7 @@ void xenomai_init(int *argcp, char *const **argvp) pvlist_for_each_entry(setup, &setup_list, __reserved.next) { if (setup->tune) { + trace_me("%s->tune()", setup->name); ret = setup->tune(); if (ret) break; @@ -545,6 +563,7 @@ void xenomai_init(int *argcp, char *const **argvp) pvlist_for_each_entry(setup, &setup_list, __reserved.next) { if (setup->init) { + trace_me("%s->init()", setup->name); ret = setup->init(); if (ret) break; @@ -583,12 +602,25 @@ void xenomai_init(int *argcp, char *const **argvp) */ *argvp = uargv; init_done = 1; + trace_me("initialization complete"); return; fail: early_panic("initialization failed, %s", symerror(ret)); } +void __trace_me(const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + fprintf(stderr, "-- "); + vfprintf(stderr, fmt, ap); + fputc('\n', stderr); + fflush(stderr); + va_end(ap); +} + void __register_setup_call(struct setup_descriptor *p, int id) { struct setup_descriptor *pos; _______________________________________________ Xenomai-git mailing list Xenomai-git@xenomai.org http://xenomai.org/mailman/listinfo/xenomai-git