From: David Smith Date: Fri, 1 Feb 2013 17:01:40 +0000 (-0600) Subject: Fixed PR11955 by updating the signal tapset. X-Git-Tag: release-2.1~49 X-Git-Url: https://sourceware.org/git/?a=commitdiff_plain;h=990766430b7024608b9cbda50fff0419e55726b9;p=systemtap.git Fixed PR11955 by updating the signal tapset. * tapset/linux/signal.stp (signal.send): Now uses the 'signal_generate' tracepoint where available. Deprecated the 'send2queue' variable. (signal.send.return): Deprecated. (signal.handle): Now uses the 'signal_deliver' tracepoint where available. Deprecated the 'oldset_addr' and 'regs' variables. (signal.handle.return): Deprecated. * testsuite/buildok/signal-detailed.stp: Updated with 'signal.send', 'signal.send.return', and 'signal.handle.return' deprecations. * NEWS: Added deprecation notes. --- diff --git a/NEWS b/NEWS index febf7e104..34af39154 100644 --- a/NEWS +++ b/NEWS @@ -51,6 +51,16 @@ functionality has been based on. For more info on re2c, see: http://sourceforge.net/projects/re2c/ +- The folowing tapset variables are deprecated in release 2.1 and will + be removed in release 2.2: + - The 'send2queue' variable in the 'signal.send' probe. + - The 'oldset_addr' and 'regs' variables in the 'signal.handle' probe. + +- The following tapset probes are deprecated in release 2.1 and will + be removed in release 2.2: + - signal.send.return + - signal.handle.return + * What's new in version 2.0, 2012-10-09 - Systemtap includes a new prototype backend, which uses Dyninst to instrument diff --git a/tapset/linux/signal.stp b/tapset/linux/signal.stp index 67c4d5ae9..c5eb71cd2 100644 --- a/tapset/linux/signal.stp +++ b/tapset/linux/signal.stp @@ -29,14 +29,15 @@ * @sinfo: The address of siginfo struct * @shared: Indicates whether the signal is shared by the thread group * @send2queue: Indicates whether the signal is sent to an existing - * sigqueue + * sigqueue (deprecated in SystemTap 2.1) * @name: The name of the function used to send out the signal * * Context: * The signal's sender. * */ -probe signal.send = __signal.send.send_sigqueue, +probe signal.send = __signal.send.signal_generate !, + __signal.send.send_sigqueue, %( kernel_v > "2.6.25" %? __signal.send.send_signal ? %: @@ -57,6 +58,18 @@ probe signal.send = __signal.send.send_sigqueue, si_code="SI_USER or SI_TIMER or SI_ASYNCIO" } +probe __signal.send.signal_generate = kernel.trace("signal_generate") ? +{ + name = "signal_generate" + sig = $sig + task = $task + sinfo = $info + shared = (@choose_defined($group, 0) == 0) ? 0 : 1 +%( systemtap_v <= "2.1" %? + send2queue = 0 +%) +} + probe __signal.send.send_sigqueue = kernel.function("send_sigqueue") { name = "send_sigqueue" @@ -64,7 +77,9 @@ probe __signal.send.send_sigqueue = kernel.function("send_sigqueue") sig = @choose_defined($q->info->si_signo, $sig) sinfo = @choose_defined($q->info, 0) shared = 0 +%( systemtap_v <= "2.1" %? send2queue = 1 +%) } probe __signal.send.send_signal = @@ -82,7 +97,9 @@ probe __signal.send.send_signal = sig = $sig task = $t sinfo = $info +%( systemtap_v <= "2.1" %? send2queue = 0 +%) } probe __signal.send.group_send_sig_info = @@ -93,7 +110,9 @@ probe __signal.send.group_send_sig_info = task = $p sinfo = $info shared = 1 +%( systemtap_v <= "2.1" %? send2queue = 0 +%) } probe __signal.send.send_group_sigqueue = @@ -104,7 +123,9 @@ probe __signal.send.send_group_sigqueue = task = $p sinfo = 0 # $q->info shared = 1 +%( systemtap_v <= "2.1" %? send2queue = 1 +%) } probe __signal.send.specific_send_sig_info = @@ -115,11 +136,15 @@ probe __signal.send.specific_send_sig_info = task = $t sinfo = $info shared = 0 +%( systemtap_v <= "2.1" %? send2queue = 0 +%) } +%( systemtap_v <= "2.1" %? /** * probe signal.send.return - Signal being sent to a process completed + * (deprecated in SystemTap 2.1) * @retstr: The return value to either __group_send_sig_info, * specific_send_sig_info, * or send_sigqueue @@ -243,6 +268,7 @@ probe __signal.send.send_group_siggueue.return = shared = 1 send2queue = 1 } +%) /** * probe signal.checkperm - Check being performed on a sent signal @@ -608,15 +634,40 @@ probe signal.pending.return = kernel.function("do_sigpending").return * @ka_addr: The address of the k_sigaction table * associated with the signal * @oldset_addr: The address of the bitmask array of blocked signals - * @regs: The address of the kernel-mode stack area + * (deprecated in SystemTap 2.1) + * @regs: The address of the kernel-mode stack area (deprecated in + * SystemTap 2.1) * @sig_mode: Indicates whether the signal was a user-mode or kernel-mode signal */ -probe signal.handle = kernel.function("handle_rt_signal64") ?, - kernel.function("handle_rt_signal32") ?, - kernel.function("handle_signal32") !, - kernel.function("handle_signal") +probe signal.handle = __signal.handle.tp !, __signal.handle.kp { name = "handle" + // Check whether the signal is a User Mode or Kernel mode Signal. + + if (sinfo == 0 && sig_code <= 0) + sig_mode = "User Mode Signal" + else if (sinfo >= 1) + sig_mode = "Kernel Mode Signal" +} + +probe __signal.handle.tp = kernel.trace("signal_deliver") ? +{ + sig = $sig + sig_name = _signal_name($sig) + sinfo = $info + sig_code = $info->si_code + ka_addr = $ka +%( systemtap_v <= "2.1" %? + oldset_addr = 0 + regs = 0 +%) +} + +probe __signal.handle.kp = kernel.function("handle_rt_signal64") ?, + kernel.function("handle_rt_signal32") ?, + kernel.function("handle_signal32") !, + kernel.function("handle_signal") +{ if (@defined($sig)) { sig = $sig sig_name = _signal_name($sig) @@ -628,19 +679,16 @@ probe signal.handle = kernel.function("handle_rt_signal64") ?, sinfo = $info sig_code = $info->si_code ka_addr = $ka - oldset_addr = @choose_defined($oldset, $set) +%( systemtap_v <= "2.1" %? + oldset_addr = @choose_defined($oldset, @choose_defined($set, 0)) regs = $regs - - // Check whether the signal is a User Mode or Kernel mode Signal. - - if (sinfo == 0 && sig_code <= 0) - sig_mode = "User Mode Signal" - else if (sinfo >= 1) - sig_mode = "Kernel Mode Signal" +%) } +%( systemtap_v <= "2.1" %? /** * probe signal.handle.return - Signal handler invocation completed + * (deprecated in SystemTap 2.1) * @name: Name of the probe point * @retstr: Return value as a string */ @@ -652,6 +700,7 @@ probe signal.handle.return = kernel.function("handle_rt_signal64").return ?, name = "handle" retstr = return_str(1, $return) } +%) /** diff --git a/testsuite/buildok/signal-detailed.stp b/testsuite/buildok/signal-detailed.stp index 9cc581eb6..5a6b34da8 100755 --- a/testsuite/buildok/signal-detailed.stp +++ b/testsuite/buildok/signal-detailed.stp @@ -3,13 +3,18 @@ probe signal.send { printf("%s(%d(%s), %d(%s))\n", name, sig, sig_name, sig_pid, pid_name) - printf("%s %p %p %d %d\n", si_code, task, sinfo, shared, send2queue) + printf("%s %p %p %d\n", si_code, task, sinfo, shared) +%( systemtap_v <= "2.1" %? + printf("%d\n", send2queue) +%) } +%( systemtap_v <= "2.1" %? probe signal.send.return { printf("%s() = %s\n", name, retstr) printf("%d %d\n", shared, send2queue) } +%) probe signal.checkperm { @@ -92,10 +97,12 @@ probe signal.pending.return # signal.handle test moved to signal-handle.stp +%( systemtap_v <= "2.1" %? probe signal.handle.return ? { printf("%s() = %s\n", name, retstr) } +%) probe signal.do_action {