From 9a604face6354d63a3948a08e85613168a9dfb88 Mon Sep 17 00:00:00 2001 From: fche Date: Tue, 3 Jan 2006 22:33:53 +0000 Subject: 2006-01-03 Frank Ch. Eigler PR 1144, 1379 * tapsets.cxx (emit_probe_prologue, _epilogue): New routines. Call from existing derived_probe spots. Implement soft errors in epilogue code. Implement reentrancy detection in prologue code. (dwarf_derived_probe::emit_deregistration): Add kprobes layer "nmissed" to skipped_count. * translate.cxx (varlock): Use nsleep(TRYLOCKDELAY) in lock contention loop. (emit_module_exit): Report number of soft errors and skipped probes. (emit_function, _probe): Add __restrict__ marker to context pointer. (translate_pass): Define new MAXTRYLOCK, TRYLOCKDELAY, MAXERRORS, MAXSKIPPED parameters. * tapset/logging.stp (error): Don't stp_error, just set context state. * stap.1.in, stapfuncs.5.in: Document soft errors. * elaborate.h: Corresponding changes. 2006-01-03 Frank Ch. Eigler * io.c (_stp_softerror): New function. 2006-01-03 Frank Ch. Eigler * systemtap.base/timers.exp: Extend the test run duration. Accept skipped probe warnings at shutdown. --- tapset/logging.stp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'tapset/logging.stp') diff --git a/tapset/logging.stp b/tapset/logging.stp index 54f4c272..c9c60c8d 100644 --- a/tapset/logging.stp +++ b/tapset/logging.stp @@ -1,5 +1,5 @@ // logging tapset -// Copyright (C) 2005 Red Hat Inc. +// Copyright (C) 2005, 2006 Red Hat Inc. // // 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 @@ -26,6 +26,12 @@ function exit () %{ %} function error (msg:string) %{ - CONTEXT->last_error = "called error()"; /* kill current probe */ - _stp_error ("%s", THIS->msg); /* implies _stp_exit */ + /* This is an assignment of a local char[] to a global char*. + It would normally be just as unsafe as returning a pointer to + a local variable from a function. However, the translated + code ensures that upon an error (last_error != NULL), the + context stack is only ever unwound, and not reused, before + the probe-level stp-error call. */ + CONTEXT->last_error = THIS->msg; + CONTEXT->last_stmt = NULL; %} -- cgit