diff --git a/.cvsignore b/.cvsignore index 5e9d38a..9726faa 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -systemtap-1.0.tar.gz +systemtap-1.1.tar.gz diff --git a/SystemTap-1.0-limit-dwarf-expression-stack-size.patch b/SystemTap-1.0-limit-dwarf-expression-stack-size.patch deleted file mode 100644 index c6d1ea9..0000000 --- a/SystemTap-1.0-limit-dwarf-expression-stack-size.patch +++ /dev/null @@ -1,123 +0,0 @@ -diff --git a/dwflpp.cxx b/dwflpp.cxx -index 636cd38..c31548d 100644 ---- a/dwflpp.cxx -+++ b/dwflpp.cxx -@@ -2272,7 +2272,15 @@ dwflpp::express_as_string (string prelude, - - fprintf(memstream, "{\n"); - fprintf(memstream, "%s", prelude.c_str()); -- bool deref = c_emit_location (memstream, head, 1); -+ -+ unsigned int stack_depth; -+ bool deref = c_emit_location (memstream, head, 1, &stack_depth); -+ -+ // Ensure that DWARF keeps loc2c to a "reasonable" stack size -+ // 32 intptr_t leads to max 256 bytes on the stack -+ if (stack_depth > 32) -+ throw semantic_error("oversized DWARF stack"); -+ - fprintf(memstream, "%s", postlude.c_str()); - fprintf(memstream, " goto out;\n"); - -diff --git a/loc2c-test.c b/loc2c-test.c -index 495a95f..ed7aa4b 100644 ---- a/loc2c-test.c -+++ b/loc2c-test.c -@@ -329,11 +329,14 @@ handle_variable (Dwarf_Die *lscopes, int lnscopes, int out, - "{\n" - " intptr_t value;"); - -- bool deref = c_emit_location (stdout, head, 1); -+ unsigned int stack_depth; -+ bool deref = c_emit_location (stdout, head, 1, &stack_depth); - - obstack_free (&pool, NULL); - -- puts (store ? " return;" : -+ printf (" /* max expression stack depth %u */\n", stack_depth); -+ -+ puts (store ? " return;" : - " printk (\" ---> %ld\\n\", (unsigned long) value);\n" - " return;"); - -diff --git a/loc2c.c b/loc2c.c -index 5d6b549..0716c7d 100644 ---- a/loc2c.c -+++ b/loc2c.c -@@ -2071,7 +2071,8 @@ emit_loc_address (FILE *out, struct location *loc, unsigned int indent, - assign it to an address-sized value. */ - static void - emit_loc_value (FILE *out, struct location *loc, unsigned int indent, -- const char *target, bool declare) -+ const char *target, bool declare, -+ bool *used_deref, unsigned int *max_stack) - { - if (declare) - emit ("%*s%s %s;\n", indent * 2, "", STACK_TYPE, target); -@@ -2091,6 +2092,9 @@ emit_loc_value (FILE *out, struct location *loc, unsigned int indent, - case loc_address: - case loc_value: - emit_loc_address (out, loc, indent, target); -+ *used_deref = *used_deref || loc->address.used_deref; -+ if (loc->address.stack_depth > *max_stack) -+ *max_stack = loc->address.stack_depth; - break; - } - -@@ -2098,7 +2102,8 @@ emit_loc_value (FILE *out, struct location *loc, unsigned int indent, - } - - bool --c_emit_location (FILE *out, struct location *loc, int indent) -+c_emit_location (FILE *out, struct location *loc, int indent, -+ unsigned int *max_stack) - { - emit ("%*s{\n", indent * 2, ""); - -@@ -2134,9 +2139,11 @@ c_emit_location (FILE *out, struct location *loc, int indent) - } - - bool deref = false; -+ *max_stack = 0; - - if (loc->frame_base != NULL) -- emit_loc_value (out, loc->frame_base, indent, "frame_base", true); -+ emit_loc_value (out, loc->frame_base, indent, "frame_base", true, -+ &deref, max_stack); - - for (; loc->next != NULL; loc = loc->next) - switch (loc->type) -@@ -2144,8 +2151,7 @@ c_emit_location (FILE *out, struct location *loc, int indent) - case loc_address: - case loc_value: - /* Emit the program fragment to calculate the address. */ -- emit_loc_value (out, loc, indent + 1, "addr", false); -- deref = deref || loc->address.used_deref; -+ emit_loc_value (out, loc, indent + 1, "addr", false, &deref, max_stack); - break; - - case loc_fragment: -@@ -2172,6 +2178,9 @@ c_emit_location (FILE *out, struct location *loc, int indent) - - emit ("%s%*s}\n", loc->address.program, indent * 2, ""); - -+ if (loc->address.stack_depth > *max_stack) -+ *max_stack = loc->address.stack_depth; -+ - return deref || loc->address.used_deref; - } - -diff --git a/loc2c.h b/loc2c.h -index becf2d8..45d9382 100644 ---- a/loc2c.h -+++ b/loc2c.h -@@ -112,6 +112,7 @@ struct location *c_translate_argument (struct obstack *, - - Writes complete lines of C99, code forming a complete C block, to STREAM. - Return value is true iff that code uses the `deref' runtime macros. */ --bool c_emit_location (FILE *stream, struct location *loc, int indent); -+bool c_emit_location (FILE *stream, struct location *loc, int indent, -+ unsigned int *max_stack); - - /* vim: set sw=2 ts=8 cino=>4,n-2,{2,^-2,t0,(0,u0,w1,M1 : */ - diff --git a/SystemTap-1.0-limit-printf-arguments.patch b/SystemTap-1.0-limit-printf-arguments.patch deleted file mode 100644 index 85c1ad4..0000000 --- a/SystemTap-1.0-limit-printf-arguments.patch +++ /dev/null @@ -1,62 +0,0 @@ -diff --git a/buildrun.cxx b/buildrun.cxx -index 100cbc4..c86a442 100644 ---- a/buildrun.cxx -+++ b/buildrun.cxx -@@ -200,6 +200,9 @@ compile_pass (systemtap_session& s) - - // o << "CFLAGS += -fno-unit-at-a-time" << endl; - -+ // 600 bytes should be enough for anybody -+ o << "EXTRA_CFLAGS += $(call cc-option,-Wframe-larger-than=600)" << endl; -+ - // Assumes linux 2.6 kbuild - o << "EXTRA_CFLAGS += -Wno-unused -Werror" << endl; - #if CHECK_POINTER_ARITH_PR5947 -diff --git a/testsuite/transko/varargs.stp b/testsuite/transko/varargs.stp -new file mode 100755 -index 0000000..f38309a ---- /dev/null -+++ b/testsuite/transko/varargs.stp -@@ -0,0 +1,10 @@ -+#! stap -p3 -+ -+probe begin { -+ // PR10750 enforces at most 32 print args -+ println(1, 2, 3, 4, 5, 6, 7, 8, -+ 9, 10, 11, 12, 13, 14, 15, 16, -+ 17, 18, 19, 20, 21, 22, 23, 24, -+ 25, 26, 27, 28, 29, 30, 31, 32, -+ 33) -+} -diff --git a/testsuite/transok/varargs.stp b/testsuite/transok/varargs.stp -new file mode 100755 -index 0000000..216166f ---- /dev/null -+++ b/testsuite/transok/varargs.stp -@@ -0,0 +1,9 @@ -+#! stap -p3 -+ -+probe begin { -+ // PR10750 enforces at most 32 print args -+ println(1, 2, 3, 4, 5, 6, 7, 8, -+ 9, 10, 11, 12, 13, 14, 15, 16, -+ 17, 18, 19, 20, 21, 22, 23, 24, -+ 25, 26, 27, 28, 29, 30, 31, 32) -+} -diff --git a/translate.cxx b/translate.cxx -index 04a9247..c73a5bd 100644 ---- a/translate.cxx -+++ b/translate.cxx -@@ -4151,6 +4151,11 @@ c_unparser::visit_print_format (print_format* e) - { - stmt_expr block(*this); - -+ // PR10750: Enforce a reasonable limit on # of varargs -+ // 32 varargs leads to max 256 bytes on the stack -+ if (e->args.size() > 32) -+ throw semantic_error("too many arguments to print", e->tok); -+ - // Compute actual arguments - vector tmp; - - diff --git a/SystemTap-1.0-new-utrace-api.patch b/SystemTap-1.0-new-utrace-api.patch deleted file mode 100644 index 70fc793..0000000 --- a/SystemTap-1.0-new-utrace-api.patch +++ /dev/null @@ -1,494 +0,0 @@ -From b8b815b7163b3df61a7364e404a282cb17d775db Mon Sep 17 00:00:00 2001 -From: David Smith -Date: Mon, 21 Dec 2009 21:04:36 -0600 -Subject: [PATCH] PR11113 fix. Support new utrace API. - -* tapset-utrace.cxx (utrace_derived_probe_group::emit_module_decls): - Handles new utrace api. -* runtime/itrace.c (usr_itrace_report_signal): Ditto. - (usr_itrace_report_clone): Ditto. - (usr_itrace_report_death): Ditto. -* runtime/task_finder.c (__stp_utrace_task_finder_report_clone): Ditto. - (__stp_utrace_task_finder_report_exec): Ditto. - (__stap_utrace_task_finder_report_death): Ditto. - (__stp_utrace_task_finder_target_death): Ditto. - (__stp_utrace_task_finder_target_quiesce): Ditto. - (__stp_utrace_task_finder_target_syscall_entry): Ditto. - (__stp_utrace_task_finder_target_syscall_exit): Ditto. -* runtime/uprobes2/uprobes.c (uprobe_report_signal): Ditto. - (uprobe_report_quiesce): Ditto. - (uprobe_report_exit): Ditto. - (uprobe_report_clone): Ditto. - (uprobe_report_exec): Ditto. ---- - runtime/itrace.c | 30 ++++++++++++++ - runtime/task_finder.c | 94 ++++++++++++++++++++++++++++++++++++++++++++ - runtime/uprobes2/uprobes.c | 35 ++++++++++++++-- - tapset-utrace.cxx | 4 ++ - 4 files changed, 159 insertions(+), 4 deletions(-) - -diff --git a/runtime/itrace.c b/runtime/itrace.c -index 5b2437a..399bfde 100644 ---- a/runtime/itrace.c -+++ b/runtime/itrace.c -@@ -84,11 +84,17 @@ static struct itrace_info *create_itrace_info( - static u32 usr_itrace_report_quiesce(struct utrace_attached_engine *engine, - struct task_struct *tsk) - #else -+#if defined(UTRACE_API_VERSION) && (UTRACE_API_VERSION >= 20091216) -+static u32 usr_itrace_report_quiesce(u32 action, -+ struct utrace_attached_engine *engine, -+ unsigned long event) -+#else - static u32 usr_itrace_report_quiesce(enum utrace_resume_action action, - struct utrace_attached_engine *engine, - struct task_struct *tsk, - unsigned long event) - #endif -+#endif - { - int status; - struct itrace_info *ui; -@@ -113,6 +119,14 @@ static u32 usr_itrace_report_signal( - const struct k_sigaction *orig_ka, - struct k_sigaction *return_ka) - #else -+#if defined(UTRACE_API_VERSION) && (UTRACE_API_VERSION >= 20091216) -+static u32 usr_itrace_report_signal(u32 action, -+ struct utrace_attached_engine *engine, -+ struct pt_regs *regs, -+ siginfo_t *info, -+ const struct k_sigaction *orig_ka, -+ struct k_sigaction *return_ka) -+#else - static u32 usr_itrace_report_signal(u32 action, - struct utrace_attached_engine *engine, - struct task_struct *tsk, -@@ -121,7 +135,11 @@ static u32 usr_itrace_report_signal(u32 action, - const struct k_sigaction *orig_ka, - struct k_sigaction *return_ka) - #endif -+#endif - { -+#if defined(UTRACE_API_VERSION) && (UTRACE_API_VERSION >= 20091216) -+ struct task_struct *tsk = current; -+#endif - struct itrace_info *ui; - u32 return_flags; - unsigned long data = 0; -@@ -177,11 +195,18 @@ static u32 usr_itrace_report_clone( - unsigned long clone_flags, - struct task_struct *child) - #else -+#if defined(UTRACE_API_VERSION) && (UTRACE_API_VERSION >= 20091216) -+static u32 usr_itrace_report_clone(u32 action, -+ struct utrace_attached_engine *engine, -+ unsigned long clone_flags, -+ struct task_struct *child) -+#else - static u32 usr_itrace_report_clone(enum utrace_resume_action action, - struct utrace_attached_engine *engine, - struct task_struct *parent, unsigned long clone_flags, - struct task_struct *child) - #endif -+#endif - { - return UTRACE_RESUME; - } -@@ -190,9 +215,14 @@ static u32 usr_itrace_report_clone(enum utrace_resume_action action, - static u32 usr_itrace_report_death(struct utrace_attached_engine *e, - struct task_struct *tsk) - #else -+#if defined(UTRACE_API_VERSION) && (UTRACE_API_VERSION >= 20091216) -+static u32 usr_itrace_report_death(struct utrace_attached_engine *e, -+ bool group_dead, int signal) -+#else - static u32 usr_itrace_report_death(struct utrace_attached_engine *e, - struct task_struct *tsk, bool group_dead, int signal) - #endif -+#endif - { - struct itrace_info *ui = rcu_dereference(e->data); - WARN_ON(!ui); -diff --git a/runtime/task_finder.c b/runtime/task_finder.c -index e89ac8e..b77fff8 100644 ---- a/runtime/task_finder.c -+++ b/runtime/task_finder.c -@@ -107,23 +107,35 @@ static u32 - __stp_utrace_task_finder_target_death(struct utrace_attached_engine *engine, - struct task_struct *tsk); - #else -+#if defined(UTRACE_API_VERSION) && (UTRACE_API_VERSION >= 20091216) -+static u32 -+__stp_utrace_task_finder_target_death(struct utrace_attached_engine *engine, -+ bool group_dead, int signal); -+#else - static u32 - __stp_utrace_task_finder_target_death(struct utrace_attached_engine *engine, - struct task_struct *tsk, - bool group_dead, int signal); - #endif -+#endif - - #ifdef UTRACE_ORIG_VERSION - static u32 - __stp_utrace_task_finder_target_quiesce(struct utrace_attached_engine *engine, - struct task_struct *tsk); - #else -+#if defined(UTRACE_API_VERSION) && (UTRACE_API_VERSION >= 20091216) - static u32 -+__stp_utrace_task_finder_target_quiesce(u32 action, -+ struct utrace_attached_engine *engine, -+ unsigned long event); -+#else - __stp_utrace_task_finder_target_quiesce(enum utrace_resume_action action, - struct utrace_attached_engine *engine, - struct task_struct *tsk, - unsigned long event); - #endif -+#endif - - #ifdef UTRACE_ORIG_VERSION - static u32 -@@ -131,12 +143,19 @@ __stp_utrace_task_finder_target_syscall_entry(struct utrace_attached_engine *eng - struct task_struct *tsk, - struct pt_regs *regs); - #else -+#if defined(UTRACE_API_VERSION) && (UTRACE_API_VERSION >= 20091216) -+static u32 -+__stp_utrace_task_finder_target_syscall_entry(u32 action, -+ struct utrace_attached_engine *engine, -+ struct pt_regs *regs); -+#else - static u32 - __stp_utrace_task_finder_target_syscall_entry(enum utrace_resume_action action, - struct utrace_attached_engine *engine, - struct task_struct *tsk, - struct pt_regs *regs); - #endif -+#endif - - #ifdef UTRACE_ORIG_VERSION - static u32 -@@ -144,12 +163,19 @@ __stp_utrace_task_finder_target_syscall_exit(struct utrace_attached_engine *engi - struct task_struct *tsk, - struct pt_regs *regs); - #else -+#if defined(UTRACE_API_VERSION) && (UTRACE_API_VERSION >= 20091216) -+static u32 -+__stp_utrace_task_finder_target_syscall_exit(u32 action, -+ struct utrace_attached_engine *engine, -+ struct pt_regs *regs); -+#else - static u32 - __stp_utrace_task_finder_target_syscall_exit(enum utrace_resume_action action, - struct utrace_attached_engine *engine, - struct task_struct *tsk, - struct pt_regs *regs); - #endif -+#endif - - static int - stap_register_task_finder_target(struct stap_task_finder_target *new_tgt) -@@ -857,6 +883,13 @@ __stp_utrace_task_finder_report_clone(struct utrace_attached_engine *engine, - unsigned long clone_flags, - struct task_struct *child) - #else -+#if defined(UTRACE_API_VERSION) && (UTRACE_API_VERSION >= 20091216) -+static u32 -+__stp_utrace_task_finder_report_clone(u32 action, -+ struct utrace_attached_engine *engine, -+ unsigned long clone_flags, -+ struct task_struct *child) -+#else - static u32 - __stp_utrace_task_finder_report_clone(enum utrace_resume_action action, - struct utrace_attached_engine *engine, -@@ -864,7 +897,11 @@ __stp_utrace_task_finder_report_clone(enum utrace_resume_action action, - unsigned long clone_flags, - struct task_struct *child) - #endif -+#endif - { -+#if defined(UTRACE_API_VERSION) && (UTRACE_API_VERSION >= 20091216) -+ struct task_struct *parent = current; -+#endif - int rc; - struct mm_struct *mm; - char *mmpath_buf; -@@ -898,6 +935,14 @@ __stp_utrace_task_finder_report_exec(struct utrace_attached_engine *engine, - const struct linux_binprm *bprm, - struct pt_regs *regs) - #else -+#if defined(UTRACE_API_VERSION) && (UTRACE_API_VERSION >= 20091216) -+static u32 -+__stp_utrace_task_finder_report_exec(u32 action, -+ struct utrace_attached_engine *engine, -+ const struct linux_binfmt *fmt, -+ const struct linux_binprm *bprm, -+ struct pt_regs *regs) -+#else - static u32 - __stp_utrace_task_finder_report_exec(enum utrace_resume_action action, - struct utrace_attached_engine *engine, -@@ -906,7 +951,11 @@ __stp_utrace_task_finder_report_exec(enum utrace_resume_action action, - const struct linux_binprm *bprm, - struct pt_regs *regs) - #endif -+#endif - { -+#if defined(UTRACE_API_VERSION) && (UTRACE_API_VERSION >= 20091216) -+ struct task_struct *tsk = current; -+#endif - size_t filelen; - struct list_head *tgt_node; - struct stap_task_finder_target *tgt; -@@ -949,11 +998,17 @@ static u32 - stap_utrace_task_finder_report_death(struct utrace_attached_engine *engine, - struct task_struct *tsk) - #else -+#if defined(UTRACE_API_VERSION) && (UTRACE_API_VERSION >= 20091216) -+static u32 -+stap_utrace_task_finder_report_death(struct utrace_attached_engine *engine, -+ bool group_dead, int signal) -+#else - static u32 - stap_utrace_task_finder_report_death(struct utrace_attached_engine *engine, - struct task_struct *tsk, - bool group_dead, int signal) - #endif -+#endif - { - debug_task_finder_detach(); - return UTRACE_DETACH; -@@ -964,12 +1019,21 @@ static u32 - __stp_utrace_task_finder_target_death(struct utrace_attached_engine *engine, - struct task_struct *tsk) - #else -+#if defined(UTRACE_API_VERSION) && (UTRACE_API_VERSION >= 20091216) -+static u32 -+__stp_utrace_task_finder_target_death(struct utrace_attached_engine *engine, -+ bool group_dead, int signal) -+#else - static u32 - __stp_utrace_task_finder_target_death(struct utrace_attached_engine *engine, - struct task_struct *tsk, - bool group_dead, int signal) - #endif -+#endif - { -+#if defined(UTRACE_API_VERSION) && (UTRACE_API_VERSION >= 20091216) -+ struct task_struct *tsk = current; -+#endif - struct stap_task_finder_target *tgt = engine->data; - - if (atomic_read(&__stp_task_finder_state) != __STP_TF_RUNNING) { -@@ -1132,13 +1196,23 @@ static u32 - __stp_utrace_task_finder_target_quiesce(struct utrace_attached_engine *engine, - struct task_struct *tsk) - #else -+#if defined(UTRACE_API_VERSION) && (UTRACE_API_VERSION >= 20091216) -+static u32 -+__stp_utrace_task_finder_target_quiesce(u32 action, -+ struct utrace_attached_engine *engine, -+ unsigned long event) -+#else - static u32 - __stp_utrace_task_finder_target_quiesce(enum utrace_resume_action action, - struct utrace_attached_engine *engine, - struct task_struct *tsk, - unsigned long event) - #endif -+#endif - { -+#if defined(UTRACE_API_VERSION) && (UTRACE_API_VERSION >= 20091216) -+ struct task_struct *tsk = current; -+#endif - struct stap_task_finder_target *tgt = engine->data; - int rc; - -@@ -1201,13 +1275,23 @@ __stp_utrace_task_finder_target_syscall_entry(struct utrace_attached_engine *eng - struct task_struct *tsk, - struct pt_regs *regs) - #else -+#if defined(UTRACE_API_VERSION) && (UTRACE_API_VERSION >= 20091216) -+static u32 -+__stp_utrace_task_finder_target_syscall_entry(u32 action, -+ struct utrace_attached_engine *engine, -+ struct pt_regs *regs) -+#else - static u32 - __stp_utrace_task_finder_target_syscall_entry(enum utrace_resume_action action, - struct utrace_attached_engine *engine, - struct task_struct *tsk, - struct pt_regs *regs) - #endif -+#endif - { -+#if defined(UTRACE_API_VERSION) && (UTRACE_API_VERSION >= 20091216) -+ struct task_struct *tsk = current; -+#endif - struct stap_task_finder_target *tgt = engine->data; - long syscall_no; - unsigned long args[3] = { 0L }; -@@ -1271,13 +1355,23 @@ __stp_utrace_task_finder_target_syscall_exit(struct utrace_attached_engine *engi - struct task_struct *tsk, - struct pt_regs *regs) - #else -+#if defined(UTRACE_API_VERSION) && (UTRACE_API_VERSION >= 20091216) -+static u32 -+__stp_utrace_task_finder_target_syscall_exit(u32 action, -+ struct utrace_attached_engine *engine, -+ struct pt_regs *regs) -+#else - static u32 - __stp_utrace_task_finder_target_syscall_exit(enum utrace_resume_action action, - struct utrace_attached_engine *engine, - struct task_struct *tsk, - struct pt_regs *regs) - #endif -+#endif - { -+#if defined(UTRACE_API_VERSION) && (UTRACE_API_VERSION >= 20091216) -+ struct task_struct *tsk = current; -+#endif - struct stap_task_finder_target *tgt = engine->data; - unsigned long rv; - struct __stp_tf_map_entry *entry; -diff --git a/runtime/uprobes2/uprobes.c b/runtime/uprobes2/uprobes.c -index 4c3a9c9..02941e2 100644 ---- a/runtime/uprobes2/uprobes.c -+++ b/runtime/uprobes2/uprobes.c -@@ -1881,7 +1881,9 @@ static void uprobe_inject_delayed_signals(struct list_head *delayed_signals) - */ - static u32 uprobe_report_signal(u32 action, - struct utrace_attached_engine *engine, -+#if !(defined(UTRACE_API_VERSION) && (UTRACE_API_VERSION >= 20091216)) - struct task_struct *tsk, -+#endif - struct pt_regs *regs, - siginfo_t *info, - const struct k_sigaction *orig_ka, -@@ -2129,9 +2131,15 @@ static int utask_quiesce_pending_sigtrap(struct uprobe_task *utask) - * insertions or removals pending. If we're the last thread in this - * process to quiesce, do the insertion(s) and/or removal(s). - */ --static u32 uprobe_report_quiesce(enum utrace_resume_action action, -+static u32 uprobe_report_quiesce( -+#if defined(UTRACE_API_VERSION) && (UTRACE_API_VERSION >= 20091216) -+ u32 action, -+ struct utrace_attached_engine *engine, -+#else -+ enum utrace_resume_action action, - struct utrace_attached_engine *engine, - struct task_struct *tsk, -+#endif - unsigned long event) - { - struct uprobe_task *utask; -@@ -2140,7 +2148,9 @@ static u32 uprobe_report_quiesce(enum utrace_resume_action action, - - utask = (struct uprobe_task *)rcu_dereference(engine->data); - BUG_ON(!utask); -+#if !(defined(UTRACE_API_VERSION) && (UTRACE_API_VERSION >= 20091216)) - BUG_ON(tsk != current); // guaranteed by utrace 2008 -+#endif - - if (utask->state == UPTASK_SSTEP) - /* -@@ -2243,8 +2253,14 @@ static void uprobe_cleanup_process(struct uprobe_process *uproc) - */ - static u32 uprobe_report_exit(enum utrace_resume_action action, - struct utrace_attached_engine *engine, -- struct task_struct *tsk, long orig_code, long *code) -+#if !(defined(UTRACE_API_VERSION) && (UTRACE_API_VERSION >= 20091216)) -+ struct task_struct *tsk, -+#endif -+ long orig_code, long *code) - { -+#if defined(UTRACE_API_VERSION) && (UTRACE_API_VERSION >= 20091216) -+ struct task_struct *tsk = current; -+#endif - struct uprobe_task *utask; - struct uprobe_process *uproc; - struct uprobe_probept *ppt; -@@ -2449,10 +2465,15 @@ static int uprobe_fork_uproc(struct uprobe_process *parent_uproc, - */ - static u32 uprobe_report_clone(enum utrace_resume_action action, - struct utrace_attached_engine *engine, -+#if !(defined(UTRACE_API_VERSION) && (UTRACE_API_VERSION >= 20091216)) - struct task_struct *parent, -+#endif - unsigned long clone_flags, - struct task_struct *child) - { -+#if defined(UTRACE_API_VERSION) && (UTRACE_API_VERSION >= 20091216) -+ struct task_struct *parent = current; -+#endif - int len; - struct uprobe_process *uproc; - struct uprobe_task *ptask, *ctask; -@@ -2554,9 +2575,15 @@ done: - * - We have to free up uprobe resources associated with - * this process. - */ --static u32 uprobe_report_exec(enum utrace_resume_action action, -+static u32 uprobe_report_exec( -+#if defined(UTRACE_API_VERSION) && (UTRACE_API_VERSION >= 20091216) -+ u32 action, - struct utrace_attached_engine *engine, -- struct task_struct *tsk, -+#else -+ enum utrace_resume_action action, -+ struct utrace_attached_engine *engine, -+ struct task_struct *parent, -+#endif - const struct linux_binfmt *fmt, - const struct linux_binprm *bprm, - struct pt_regs *regs) -diff --git a/tapset-utrace.cxx b/tapset-utrace.cxx -index bd668a2..cc4f280 100644 ---- a/tapset-utrace.cxx -+++ b/tapset-utrace.cxx -@@ -842,8 +842,12 @@ utrace_derived_probe_group::emit_module_decls (systemtap_session& s) - s.op->newline() << "#ifdef UTRACE_ORIG_VERSION"; - s.op->newline() << "static u32 stap_utrace_probe_syscall(struct utrace_attached_engine *engine, struct task_struct *tsk, struct pt_regs *regs) {"; - s.op->newline() << "#else"; -+ s.op->newline() << "#if defined(UTRACE_API_VERSION) && (UTRACE_API_VERSION >= 20091216)"; -+ s.op->newline() << "static u32 stap_utrace_probe_syscall(u32 action, struct utrace_attached_engine *engine, struct pt_regs *regs) {"; -+ s.op->newline() << "#else"; - s.op->newline() << "static u32 stap_utrace_probe_syscall(enum utrace_resume_action action, struct utrace_attached_engine *engine, struct task_struct *tsk, struct pt_regs *regs) {"; - s.op->newline() << "#endif"; -+ s.op->newline() << "#endif"; - - s.op->indent(1); - s.op->newline() << "struct stap_utrace_probe *p = (struct stap_utrace_probe *)engine->data;"; --- -1.6.2.5 - -From 21b6dfed5aefcc09d1445df203627844586e6fda Mon Sep 17 00:00:00 2001 -From: David Smith -Date: Mon, 21 Dec 2009 21:29:48 -0600 -Subject: [PATCH] Fixed compilation on f11. - -* runtime/task_finder.c: Fixed last checkin. ---- - runtime/task_finder.c | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -diff --git a/runtime/task_finder.c b/runtime/task_finder.c -index b77fff8..deccfa7 100644 ---- a/runtime/task_finder.c -+++ b/runtime/task_finder.c -@@ -130,6 +130,7 @@ __stp_utrace_task_finder_target_quiesce(u32 action, - struct utrace_attached_engine *engine, - unsigned long event); - #else -+static u32 - __stp_utrace_task_finder_target_quiesce(enum utrace_resume_action action, - struct utrace_attached_engine *engine, - struct task_struct *tsk, --- -1.6.2.5 - - diff --git a/SystemTap-1.0-unwind-table-size-checks.patch b/SystemTap-1.0-unwind-table-size-checks.patch deleted file mode 100644 index 4ff1ad9..0000000 --- a/SystemTap-1.0-unwind-table-size-checks.patch +++ /dev/null @@ -1,180 +0,0 @@ -diff --git a/runtime/unwind.c b/runtime/unwind.c -index 00108a3..7607770 100644 ---- a/runtime/unwind.c -+++ b/runtime/unwind.c -@@ -88,7 +88,7 @@ static sleb128_t get_sleb128(const u8 **pcur, const u8 *end) - - /* given an FDE, find its CIE */ - static const u32 *cie_for_fde(const u32 *fde, void *unwind_data, -- int is_ehframe) -+ uint32_t table_len, int is_ehframe) - { - const u32 *cie; - -@@ -118,6 +118,11 @@ static const u32 *cie_for_fde(const u32 *fde, void *unwind_data, - else - cie = unwind_data + fde[1]; - -+ /* Make sure address falls in the table */ -+ if (((void *)cie) < ((void*)unwind_data) -+ || ((void*)cie) > ((void*)(unwind_data + table_len))) -+ return NULL; -+ - if (*cie <= sizeof(*cie) + 4 || *cie >= fde[1] - sizeof(*fde) - || (*cie & (sizeof(*cie) - 1)) - || (cie[1] != 0xffffffff && cie[1] != 0)) { -@@ -200,7 +205,8 @@ static unsigned long read_pointer(const u8 **pLoc, const void *end, signed ptrTy - return value; - } - --static signed fde_pointer_type(const u32 *cie) -+static signed fde_pointer_type(const u32 *cie, void *unwind_data, -+ uint32_t table_len) - { - const u8 *ptr = (const u8 *)(cie + 2); - unsigned version = *ptr; -@@ -212,11 +218,16 @@ static signed fde_pointer_type(const u32 *cie) - const u8 *end = (const u8 *)(cie + 1) + *cie; - uleb128_t len; - -+ /* end of cie should fall within unwind table. */ -+ if (((void*)end) < ((void *)unwind_data) -+ || ((void *)end) > ((void *)(unwind_data + table_len))) -+ return -1; -+ - /* check if augmentation size is first (and thus present) */ - if (*ptr != 'z') - return -1; - /* check if augmentation string is nul-terminated */ -- if ((ptr = memchr(aug = (const void *)ptr, 0, end - ptr)) == NULL) -+ if ((ptr = memchr(aug = (const void *)ptr, 0, end - ptr)) == NULL) - return -1; - ++ptr; /* skip terminator */ - get_uleb128(&ptr, end); /* skip code alignment */ -@@ -267,6 +278,10 @@ static void set_rule(uleb128_t reg, enum item_location where, uleb128_t value, s - } - } - -+/* Limit the number of instructions we process. Arbitrary limit. -+ 512 should be enough for anybody... */ -+#define MAX_CFI 512 -+ - static int processCFI(const u8 *start, const u8 *end, unsigned long targetLoc, signed ptrType, struct unwind_state *state) - { - union { -@@ -276,6 +291,9 @@ static int processCFI(const u8 *start, const u8 *end, unsigned long targetLoc, s - } ptr; - int result = 1; - -+ if (end - start > MAX_CFI) -+ return 0; -+ - dbug_unwind(1, "targetLoc=%lx state->loc=%lx\n", targetLoc, state->loc); - if (start != state->cieStart) { - state->loc = state->org; -@@ -606,10 +624,10 @@ static int unwind_frame(struct unwind_frame_info *frame, - - /* found the fde, now set startLoc and endLoc */ - if (fde != NULL) { -- cie = cie_for_fde(fde, table, is_ehframe); -+ cie = cie_for_fde(fde, table, table_len, is_ehframe); - if (likely(cie != NULL && cie != &bad_cie && cie != ¬_fde)) { - ptr = (const u8 *)(fde + 2); -- ptrType = fde_pointer_type(cie); -+ ptrType = fde_pointer_type(cie, table, table_len); - startLoc = read_pointer(&ptr, (const u8 *)(fde + 1) + *fde, ptrType); - startLoc = adjustStartLoc(startLoc, m, s, ptrType, is_ehframe); - -@@ -632,12 +650,12 @@ static int unwind_frame(struct unwind_frame_info *frame, - for (fde = table, tableSize = table_len; cie = NULL, tableSize > sizeof(*fde) - && tableSize - sizeof(*fde) >= *fde; tableSize -= sizeof(*fde) + *fde, fde += 1 + *fde / sizeof(*fde)) { - dbug_unwind(3, "fde=%lx tableSize=%d\n", (long)*fde, (int)tableSize); -- cie = cie_for_fde(fde, table, is_ehframe); -+ cie = cie_for_fde(fde, table, table_len, is_ehframe); - if (cie == &bad_cie) { - cie = NULL; - break; - } -- if (cie == NULL || cie == ¬_fde || (ptrType = fde_pointer_type(cie)) < 0) -+ if (cie == NULL || cie == ¬_fde || (ptrType = fde_pointer_type(cie, table, table_len)) < 0) - continue; - - ptr = (const u8 *)(fde + 2); -@@ -666,6 +684,12 @@ static int unwind_frame(struct unwind_frame_info *frame, - state.cieEnd = ptr; /* keep here temporarily */ - ptr = (const u8 *)(cie + 2); - end = (const u8 *)(cie + 1) + *cie; -+ -+ /* end should fall within unwind table. */ -+ if (((void *)end) < table -+ || ((void *)end) > ((void *)(table + table_len))) -+ goto err; -+ - frame->call_frame = 1; - if ((state.version = *ptr) != 1) { - dbug_unwind(1, "CIE version number is %d. 1 is supported.\n", state.version); -@@ -723,6 +747,11 @@ static int unwind_frame(struct unwind_frame_info *frame, - state.cieEnd = end; - end = (const u8 *)(fde + 1) + *fde; - -+ /* end should fall within unwind table. */ -+ if (((void*)end) < table -+ || ((void *)end) > ((void *)(table + table_len))) -+ goto err; -+ - /* skip augmentation */ - if (((const char *)(cie + 2))[1] == 'z') { - uleb128_t augSize = get_uleb128(&ptr, end); -diff --git a/runtime/unwind/unwind.h b/runtime/unwind/unwind.h -index 285a3a3..023ea60 100644 ---- a/runtime/unwind/unwind.h -+++ b/runtime/unwind/unwind.h -@@ -143,8 +143,10 @@ static unsigned long read_pointer(const u8 **pLoc, - const void *end, - signed ptrType); - static const u32 bad_cie, not_fde; --static const u32 *cie_for_fde(const u32 *fde, void *table, int is_ehframe); --static signed fde_pointer_type(const u32 *cie); -+static const u32 *cie_for_fde(const u32 *fde, void *table, -+ uint32_t table_len, int is_ehframe); -+static signed fde_pointer_type(const u32 *cie, -+ void *table, uint32_t table_len); - - - #endif /* STP_USE_DWARF_UNWINDER */ -diff --git a/translate.cxx b/translate.cxx -index bc5d615..9d456bc 100644 ---- a/translate.cxx -+++ b/translate.cxx -@@ -29,6 +29,11 @@ extern "C" { - #include - } - -+// Max unwind table size (debug or eh) per module. Somewhat arbitrary -+// limit (a bit more than twice the .debug_frame size of my local -+// vmlinux for 2.6.31.4-83.fc12.x86_64) -+#define MAX_UNWIND_TABLE_SIZE (3 * 1024 * 1024) -+ - using namespace std; - - struct var; -@@ -4785,6 +4790,9 @@ dump_unwindsyms (Dwfl_Module *m, - get_unwind_data (m, &debug_frame, &eh_frame, &debug_len, &eh_len, &eh_addr); - if (debug_frame != NULL && debug_len > 0) - { -+ if (debug_len > MAX_UNWIND_TABLE_SIZE) -+ throw semantic_error ("module debug unwind table size too big"); -+ - c->output << "#if defined(STP_USE_DWARF_UNWINDER) && defined(STP_NEED_UNWIND_DATA)\n"; - c->output << "static uint8_t _stp_module_" << stpmod_idx - << "_debug_frame[] = \n"; -@@ -4802,6 +4810,9 @@ dump_unwindsyms (Dwfl_Module *m, - - if (eh_frame != NULL && eh_len > 0) - { -+ if (eh_len > MAX_UNWIND_TABLE_SIZE) -+ throw semantic_error ("module eh unwind table size too big"); -+ - c->output << "#if defined(STP_USE_DWARF_UNWINDER) && defined(STP_NEED_UNWIND_DATA)\n"; - c->output << "static uint8_t _stp_module_" << stpmod_idx - << "_eh_frame[] = \n"; diff --git a/sources b/sources index c9f92fb..4a5d6e0 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -e11c9ec18f3b269b846054e9ca33011a systemtap-1.0.tar.gz +bb760f76ecc400ed4d44a1399a06ca33 systemtap-1.1.tar.gz diff --git a/systemtap.spec b/systemtap.spec index 4ad885a..3a0a120 100644 --- a/systemtap.spec +++ b/systemtap.spec @@ -1,15 +1,18 @@ -%{!?with_sqlite: %define with_sqlite 1} -%{!?with_docs: %define with_docs 1} -%{!?with_crash: %define with_crash 0} -%{!?with_rpm: %define with_rpm 1} -%{!?with_bundled_elfutils: %define with_bundled_elfutils 0} -%{!?elfutils_version: %define elfutils_version 0.127} -%{!?pie_supported: %define pie_supported 1} -%{!?with_grapher: %define with_grapher 1} +%{!?with_sqlite: %global with_sqlite 1} +%{!?with_docs: %global with_docs 1} +%{!?with_crash: %global with_crash 0} +%{!?with_rpm: %global with_rpm 1} +%{!?with_bundled_elfutils: %global with_bundled_elfutils 0} +%{!?elfutils_version: %global elfutils_version 0.127} +%{!?pie_supported: %global pie_supported 1} +%{!?with_grapher: %global with_grapher 1} +%{!?with_boost: %global with_boost 0} +%{!?with_publican: %global with_publican 1} +%{!?publican_brand: %global publican_brand fedora} Name: systemtap -Version: 1.0 -Release: 4%{?dist} +Version: 1.1 +Release: 1%{?dist} # for version, see also configure.ac Summary: Instrumentation System Group: Development/System @@ -23,6 +26,10 @@ Requires: kernel >= 2.6.9-11 %if %{with_sqlite} BuildRequires: sqlite-devel %endif +# Needed for libstd++ < 4.0, without +%if %{with_boost} +BuildRequires: boost-devel +%endif %if %{with_crash} BuildRequires: crash-devel zlib-devel %endif @@ -41,7 +48,7 @@ BuildRequires: nss-devel nss-tools pkgconfig Source1: elfutils-%{elfutils_version}.tar.gz Patch1: elfutils-portability.patch BuildRequires: m4 -%define setup_elfutils -a1 +%global setup_elfutils -a1 %else BuildRequires: elfutils-devel >= %{elfutils_version} %endif @@ -55,19 +62,21 @@ BuildRequires: /usr/bin/latex /usr/bin/dvips /usr/bin/ps2pdf latex2html # called 'xmlto-tex'. To avoid a specific F10 BuildReq, we'll do a # file-based buildreq on '/usr/share/xmlto/format/fo/pdf'. BuildRequires: xmlto /usr/share/xmlto/format/fo/pdf +%if %{with_publican} +BuildRequires: publican +BuildRequires: publican-%{publican_brand} +%endif %endif %if %{with_grapher} BuildRequires: gtkmm24-devel >= 2.8 +BuildRequires: libglademm24-devel >= 2.6.7 +# If 'with_boost' isn't set, the boost-devel build requirement hasn't +# been specified yet. +%if ! %{with_boost} +BuildRequires: boost-devel +%endif %endif - -# Fix three --unprivileged DOS issues (CVE-2009-2911) -Patch10: SystemTap-1.0-limit-printf-arguments.patch -Patch11: SystemTap-1.0-limit-dwarf-expression-stack-size.patch -Patch12: SystemTap-1.0-unwind-table-size-checks.patch - -# Handle UTRACE_API_VERSION 20091216. -Patch20: SystemTap-1.0-new-utrace-api.patch %description SystemTap is an instrumentation system for systems running Linux 2.6. @@ -121,6 +130,10 @@ URL: http://sourceware.org/systemtap/ Requires: systemtap Requires: avahi avahi-tools nss nss-tools mktemp Requires: zip unzip +Requires(post): chkconfig +Requires(preun): chkconfig +Requires(preun): initscripts +Requires(postun): initscripts %description server This is the remote script compilation server component of systemtap. @@ -137,14 +150,18 @@ URL: http://sourceware.org/systemtap/ Support tools to allow applications to use static probes. %package initscript -Summary: Systemtap Initscript +Summary: Systemtap Initscripts Group: Development/System License: GPLv2+ URL: http://sourceware.org/systemtap/ -Requires: systemtap-runtime, initscripts +Requires: systemtap-runtime +Requires(post): chkconfig +Requires(preun): chkconfig +Requires(preun): initscripts +Requires(postun): initscripts %description initscript -Initscript for Systemtap scripts. +Initscript for Systemtap scripts %if %{with_grapher} %package grapher @@ -172,73 +189,71 @@ find . \( -name configure -o -name config.h.in \) -print | xargs touch cd .. %endif -# Fix three --unprivileged DOS issues (CVE-2009-2911) -%patch10 -p1 -%patch11 -p1 -%patch12 -p1 - -# Handle UTRACE_API_VERSION 20091216. -%patch20 -p1 - %build %if %{with_bundled_elfutils} # Build our own copy of elfutils. -%define elfutils_config --with-elfutils=elfutils-%{elfutils_version} +%global elfutils_config --with-elfutils=elfutils-%{elfutils_version} # We have to prevent the standard dependency generation from identifying # our private elfutils libraries in our provides and requires. -%define _use_internal_dependency_generator 0 -%define filter_eulibs() /bin/sh -c "%{1} | sed '/libelf/d;/libdw/d;/libebl/d'" -%define __find_provides %{filter_eulibs /usr/lib/rpm/find-provides} -%define __find_requires %{filter_eulibs /usr/lib/rpm/find-requires} +%global _use_internal_dependency_generator 0 +%global filter_eulibs() /bin/sh -c "%{1} | sed '/libelf/d;/libdw/d;/libebl/d'" +%global __find_provides %{filter_eulibs /usr/lib/rpm/find-provides} +%global __find_requires %{filter_eulibs /usr/lib/rpm/find-requires} # This will be needed for running stap when not installed, for the test suite. -%define elfutils_mflags LD_LIBRARY_PATH=`pwd`/lib-elfutils +%global elfutils_mflags LD_LIBRARY_PATH=`pwd`/lib-elfutils %endif # Enable/disable the sqlite coverage testing support %if %{with_sqlite} -%define sqlite_config --enable-sqlite +%global sqlite_config --enable-sqlite %else -%define sqlite_config --disable-sqlite +%global sqlite_config --disable-sqlite %endif # Enable/disable the crash extension %if %{with_crash} -%define crash_config --enable-crash +%global crash_config --enable-crash %else -%define crash_config --disable-crash +%global crash_config --disable-crash %endif # Enable/disable the code to find and suggest needed rpms %if %{with_rpm} -%define rpm_config --with-rpm +%global rpm_config --with-rpm %else -%define rpm_config --without-rpm +%global rpm_config --without-rpm %endif %if %{with_docs} -%define docs_config --enable-docs +%global docs_config --enable-docs %else -%define docs_config --disable-docs +%global docs_config --disable-docs %endif # Enable pie as configure defaults to disabling it %if %{pie_supported} -%define pie_config --enable-pie +%global pie_config --enable-pie %else -%define pie_config --disable-pie +%global pie_config --disable-pie %endif %if %{with_grapher} -%define grapher_config --enable-grapher +%global grapher_config --enable-grapher %else -%define grapher_config --disable-grapher +%global grapher_config --disable-grapher %endif +%if %{with_publican} +%global publican_config --enable-publican --with-publican-brand=%{publican_brand} +%else +%global publican_config --disable-publican +%endif -%configure %{?elfutils_config} %{sqlite_config} %{crash_config} %{docs_config} %{pie_config} %{grapher_config} %{rpm_config} + +%configure %{?elfutils_config} %{sqlite_config} %{crash_config} %{docs_config} %{pie_config} %{grapher_config} %{publican_config} %{rpm_config} --disable-silent-rules make %{?_smp_mflags} %install @@ -271,17 +286,28 @@ cp -rp testsuite $RPM_BUILD_ROOT%{_datadir}/systemtap mkdir docs.installed mv $RPM_BUILD_ROOT%{_datadir}/doc/systemtap/*.pdf docs.installed/ mv $RPM_BUILD_ROOT%{_datadir}/doc/systemtap/tapsets docs.installed/ +%if %{with_publican} +mv $RPM_BUILD_ROOT%{_datadir}/doc/systemtap/SystemTap_Beginners_Guide docs.installed/ +%endif %endif -mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/init.d/ -install -m 755 initscript/systemtap $RPM_BUILD_ROOT%{_sysconfdir}/init.d/ +mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/rc.d/init.d/ +install -m 755 initscript/systemtap $RPM_BUILD_ROOT%{_sysconfdir}/rc.d/init.d/ mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/systemtap mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/systemtap/conf.d mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/systemtap/script.d -install -m 644 initscript/config $RPM_BUILD_ROOT%{_sysconfdir}/systemtap +install -m 644 initscript/config.systemtap $RPM_BUILD_ROOT%{_sysconfdir}/systemtap/config mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/cache/systemtap mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/run/systemtap +install -m 755 initscript/stap-server $RPM_BUILD_ROOT%{_sysconfdir}/rc.d/init.d/ +mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/stap-server +mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/stap-server/conf.d +mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig +install -m 644 initscript/config.stap-server $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/stap-server +mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/log +touch $RPM_BUILD_ROOT%{_localstatedir}/log/stap-server.log + %clean rm -rf ${RPM_BUILD_ROOT} @@ -290,12 +316,67 @@ getent group stapdev >/dev/null || groupadd -r stapdev getent group stapusr >/dev/null || groupadd -r stapusr exit 0 +%pre server +getent group stap-server >/dev/null || groupadd -r stap-server +getent passwd stap-server >/dev/null || useradd -c "Systemtap Compile Server" -g stap-server -d %{_localstatedir}/lib/stap-server -m -r -s /sbin/nologin stap-server +chmod 755 %{_localstatedir}/lib/stap-server +exit 0 + +%post server +chmod 664 %{_localstatedir}/log/stap-server.log +chown stap-server %{_localstatedir}/log/stap-server.log +chgrp stap-server %{_localstatedir}/log/stap-server.log +# Make sure that the uprobes module can be built by the server +test -e /usr/share/systemtap/runtime/uprobes || mkdir -p /usr/share/systemtap/runtime/uprobes +chgrp stap-server /usr/share/systemtap/runtime/uprobes +chmod 775 /usr/share/systemtap/runtime/uprobes +# As stap-server, generate the certificate used for signing and for ssl. +runuser -s /bin/sh - stap-server -c %{_libexecdir}/%{name}/stap-gen-cert >/dev/null +# Authorize the certificate as a trusted ssl peer and as a trusted signer +# local host. +%{_bindir}/stap-authorize-server-cert %{_localstatedir}/lib/stap-server/.systemtap/ssl/server/stap.cert +%{_bindir}/stap-authorize-signing-cert %{_localstatedir}/lib/stap-server/.systemtap/ssl/server/stap.cert + +# Activate the service +/sbin/chkconfig --add stap-server +exit 0 + +%preun server +# Check that this is the actual deinstallation of the package, as opposed to +# just removing the old package on upgrade. +if [ $1 = 0 ] ; then + /sbin/service stap-server stop >/dev/null 2>&1 + /sbin/chkconfig --del stap-server +fi +exit 0 + +%postun server +# Check whether this is an upgrade of the package. +# If so, restart the service if it's running +if [ "$1" -ge "1" ] ; then + /sbin/service stap-server condrestart >/dev/null 2>&1 || : +fi +exit 0 + %post initscript -chkconfig --add systemtap +/sbin/chkconfig --add systemtap exit 0 %preun initscript -chkconfig --del systemtap +# Check that this is the actual deinstallation of the package, as opposed to +# just removing the old package on upgrade. +if [ $1 = 0 ] ; then + /sbin/service systemtap stop >/dev/null 2>&1 + /sbin/chkconfig --del systemtap +fi +exit 0 + +%postun initscript +# Check whether this is an upgrade of the package. +# If so, restart the service if it's running +if [ "$1" -ge "1" ] ; then + /sbin/service systemtap condrestart >/dev/null 2>&1 || : +fi exit 0 %post @@ -315,14 +396,13 @@ exit 0 %if %{with_docs} %doc docs.installed/*.pdf %doc docs.installed/tapsets +%if %{with_publican} +%doc docs.installed/SystemTap_Beginners_Guide +%endif %endif %{_bindir}/stap %{_bindir}/stap-report -%{_bindir}/stap-env -%{_bindir}/stap-gen-cert -%{_bindir}/stap-authorize-cert -%{_bindir}/stap-authorize-signing-cert %{_mandir}/man1/* %{_mandir}/man3/* @@ -344,8 +424,12 @@ exit 0 %defattr(-,root,root) %attr(4111,root,root) %{_bindir}/staprun %{_bindir}/stap-report -%{_libexecdir}/%{name} +%{_bindir}/stap-authorize-signing-cert +%{_libexecdir}/%{name}/stapio +%{_libexecdir}/%{name}/stap-env +%{_libexecdir}/%{name}/stap-authorize-cert %{_mandir}/man8/staprun.8* +%{_mandir}/man8/stap-authorize-signing-cert.8* %doc README AUTHORS NEWS COPYING @@ -356,28 +440,32 @@ exit 0 %files client %defattr(-,root,root) %{_bindir}/stap-client -%{_bindir}/stap-env -%{_bindir}/stap-find-servers -%{_bindir}/stap-authorize-cert %{_bindir}/stap-authorize-server-cert -%{_bindir}/stap-client-connect -%{_mandir}/man8/stap-server.8* +%{_libexecdir}/%{name}/stap-find-servers +%{_libexecdir}/%{name}/stap-client-connect +%{_mandir}/man8/stap-client.8* +%{_mandir}/man8/stap-authorize-server-cert.8* %files server %defattr(-,root,root) -%{_bindir}/stap-server -%{_bindir}/stap-serverd -%{_bindir}/stap-env -%{_bindir}/stap-start-server -%{_bindir}/stap-find-servers -%{_bindir}/stap-find-or-start-server -%{_bindir}/stap-stop-server -%{_bindir}/stap-gen-cert -%{_bindir}/stap-authorize-cert %{_bindir}/stap-authorize-server-cert -%{_bindir}/stap-server-connect -%{_bindir}/stap-sign-module +%{_bindir}/stap-server +%{_libexecdir}/%{name}/stap-serverd +%{_libexecdir}/%{name}/stap-start-server +%{_libexecdir}/%{name}/stap-find-servers +%{_libexecdir}/%{name}/stap-find-or-start-server +%{_libexecdir}/%{name}/stap-stop-server +%{_libexecdir}/%{name}/stap-gen-cert +%{_libexecdir}/%{name}/stap-server-connect +%{_libexecdir}/%{name}/stap-sign-module %{_mandir}/man8/stap-server.8* +%{_mandir}/man8/stap-authorize-server-cert.8* +%{_sysconfdir}/rc.d/init.d/stap-server +%dir %{_sysconfdir}/stap-server +%dir %{_sysconfdir}/stap-server/conf.d +%config(noreplace) %{_sysconfdir}/sysconfig/stap-server +%{_localstatedir}/log/stap-server.log +%doc initscript/README.stap-server %files sdt-devel %defattr(-,root,root) @@ -386,31 +474,26 @@ exit 0 %files initscript %defattr(-,root,root) -%{_sysconfdir}/init.d/systemtap +%{_sysconfdir}/rc.d/init.d/systemtap %dir %{_sysconfdir}/systemtap %dir %{_sysconfdir}/systemtap/conf.d %dir %{_sysconfdir}/systemtap/script.d %config(noreplace) %{_sysconfdir}/systemtap/config %dir %{_localstatedir}/cache/systemtap %dir %{_localstatedir}/run/systemtap -%doc initscript/README.initscript +%doc initscript/README.systemtap %if %{with_grapher} %files grapher %defattr(-,root,root) %{_bindir}/stapgraph +%{_datadir}/%{name}/*.glade %endif %changelog -* Fri Jan 8 2010 Roland McGrath - 1.0-4 -- Handle UTRACE_API_VERSION 20091216 (Fedora 2.6.32 kernels). - -* Fri Dec 11 2009 Josh Stone - 1.0-3 -- Rebuild against rpm-4.8.0 - -* Wed Oct 21 2009 Josh Stone - 1.0-2 -- Fix three --unprivileged DOS issues (CVE-2009-2911) +* Mon Dec 21 2009 David Smith - 1.1-1 +- Upstream release. * Tue Sep 22 2009 Josh Stone - 1.0-1 - Upstream release.