import systemtap-4.6-11.el9
This commit is contained in:
parent
a1c4f9531e
commit
8addaa4cfb
|
@ -0,0 +1,29 @@
|
||||||
|
commit 39b5233271b997811632871e1b6620a89b384fe8
|
||||||
|
Author: Martin Cermak <mcermak@redhat.com>
|
||||||
|
Date: Thu Jan 20 18:18:00 2022 +0100
|
||||||
|
|
||||||
|
Fix python probing rhbz2027683
|
||||||
|
|
||||||
|
diff --git a/tapset/python.stp b/tapset/python.stp
|
||||||
|
new file mode 100644
|
||||||
|
index 000000000..b5d06fcd9
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/tapset/python.stp
|
||||||
|
@@ -0,0 +1,17 @@
|
||||||
|
+/* Systemtap tapset to make it easier to trace Python */
|
||||||
|
+
|
||||||
|
+/*
|
||||||
|
+ Define python.function.entry/return:
|
||||||
|
+*/
|
||||||
|
+probe python.function.entry = process("/usr/lib*/libpython*.so*").mark("function__entry")
|
||||||
|
+{
|
||||||
|
+ filename = user_string($arg1);
|
||||||
|
+ funcname = user_string($arg2);
|
||||||
|
+ lineno = $arg3;
|
||||||
|
+}
|
||||||
|
+probe python.function.return = process("/usr/lib*/libpython*.so*").mark("function__return")
|
||||||
|
+{
|
||||||
|
+ filename = user_string($arg1);
|
||||||
|
+ funcname = user_string($arg2);
|
||||||
|
+ lineno = $arg3;
|
||||||
|
+}
|
|
@ -0,0 +1,80 @@
|
||||||
|
commit 5abded54b
|
||||||
|
Author: Stan Cox <scox@redhat.com>
|
||||||
|
Date: Fri Jan 28 15:28:27 2022 -0500
|
||||||
|
|
||||||
|
Attempt to access string in userspace if kernel access fails
|
||||||
|
|
||||||
|
Add kernel_or_user_string_quoted(_utf16 _utf32) tapsets to handle
|
||||||
|
situations where a kernelspace access was assumed but string is in
|
||||||
|
userspace.
|
||||||
|
|
||||||
|
diff --git a/tapset/linux/conversions.stp b/tapset/linux/conversions.stp
|
||||||
|
index 82f535f6c..d3d3a0b5a 100644
|
||||||
|
--- a/tapset/linux/conversions.stp
|
||||||
|
+++ b/tapset/linux/conversions.stp
|
||||||
|
@@ -72,6 +72,17 @@ function kernel_string_quoted:string (addr:long)
|
||||||
|
(unsigned long)(uintptr_t)STAP_ARG_addr);
|
||||||
|
%}
|
||||||
|
|
||||||
|
+/**
|
||||||
|
+ * sfunction kernel_or_user_string_quoted - Retrieves and quotes string from kernel or user memory
|
||||||
|
+ *
|
||||||
|
+ * @addr: the kernel or user memory address to retrieve the string from
|
||||||
|
+ *
|
||||||
|
+ * Similar to kernel_string_quoted except user memory is a fallback method
|
||||||
|
+ */
|
||||||
|
+function kernel_or_user_string_quoted:string (addr:long) {
|
||||||
|
+ try { return string_quoted(kernel_string(addr)) } catch { return string_quoted(user_string(addr)) }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
/**
|
||||||
|
* sfunction kernel_string_n - Retrieves string of given length from kernel memory
|
||||||
|
* @addr: The kernel address to retrieve the string from
|
||||||
|
@@ -160,6 +171,16 @@ function kernel_string_quoted_utf32:string (addr:long) {
|
||||||
|
try { return string_quoted(kernel_string_utf32(addr)) } catch { return sprintf("0x%x", addr) }
|
||||||
|
}
|
||||||
|
|
||||||
|
+/**
|
||||||
|
+ * sfunction kernel_or_user_string_quoted_utf32 - Retrieves and quotes UTF-32 string from kernel or user memory
|
||||||
|
+ *
|
||||||
|
+ * @addr: the kernel or user memory address to retrieve the string from
|
||||||
|
+ *
|
||||||
|
+ * Similar to kernel_string_quoted_utf32 except user memory is a fallback method
|
||||||
|
+ */
|
||||||
|
+function kernel_or_user_string_quoted_utf32:string (addr:long) {
|
||||||
|
+ try { return string_quoted(kernel_string_utf32(addr)) } catch { return string_quoted(user_string_utf32(addr)) }
|
||||||
|
+}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* sfunction kernel_string_utf16 - Retrieves UTF-16 string from kernel memory
|
||||||
|
@@ -242,6 +263,17 @@ function kernel_string_quoted_utf16:string (addr:long) {
|
||||||
|
try { return string_quoted(kernel_string_utf16(addr)) } catch { return sprintf("0x%x", addr) }
|
||||||
|
}
|
||||||
|
|
||||||
|
+/**
|
||||||
|
+ * sfunction kernel_or_user_string_quoted_utf16 - Retrieves and quotes UTF-16 string from kernel or user memory
|
||||||
|
+ *
|
||||||
|
+ * @addr: the kernel or user memory address to retrieve the string from
|
||||||
|
+ *
|
||||||
|
+ * Similar to kernel_string_quoted_utf16 except uses user memory as a fallback method
|
||||||
|
+ */
|
||||||
|
+function kernel_or_user_string_quoted_utf16:string (addr:long) {
|
||||||
|
+ try { return string_quoted(kernel_string_utf16(addr)) } catch { return string_quoted(user_string_utf16(addr)) }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
|
||||||
|
/**
|
||||||
|
* sfunction kernel_long - Retrieves a long value stored in kernel memory
|
||||||
|
diff --git a/tapsets.cxx b/tapsets.cxx
|
||||||
|
index 8fc5146e2..8b8f1cad5 100644
|
||||||
|
--- a/tapsets.cxx
|
||||||
|
+++ b/tapsets.cxx
|
||||||
|
@@ -3757,7 +3757,7 @@ dwarf_pretty_print::print_chars (Dwarf_Die* start_type, target_symbol* e,
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
- string function = userspace_p ? "user_string_quoted" : "kernel_string_quoted";
|
||||||
|
+ string function = userspace_p ? "user_string_quoted" : "kernel_or_user_string_quoted";
|
||||||
|
Dwarf_Word size = (Dwarf_Word) -1;
|
||||||
|
dwarf_formudata (dwarf_attr_integrate (&type, DW_AT_byte_size, &attr), &size);
|
||||||
|
switch (size)
|
|
@ -0,0 +1,167 @@
|
||||||
|
diff --git a/tapset/linux/ioscheduler.stp b/tapset/linux/ioscheduler.stp
|
||||||
|
index abb24dac9..3096a73ea 100644
|
||||||
|
--- a/tapset/linux/ioscheduler.stp
|
||||||
|
+++ b/tapset/linux/ioscheduler.stp
|
||||||
|
@@ -11,7 +11,9 @@
|
||||||
|
// </tapsetdescription>
|
||||||
|
%{
|
||||||
|
#include <linux/blkdev.h>
|
||||||
|
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5,14,0)
|
||||||
|
#include <linux/elevator.h>
|
||||||
|
+#endif
|
||||||
|
%}
|
||||||
|
|
||||||
|
/**
|
||||||
|
@@ -76,7 +78,8 @@ probe ioscheduler.elv_completed_request
|
||||||
|
elevator_name = kernel_string(
|
||||||
|
@choose_defined($q->elevator->type->elevator_name,
|
||||||
|
@choose_defined($q->elevator->elevator_type->elevator_name,
|
||||||
|
- $q->elevator->elevator_name)), "")
|
||||||
|
+ @choose_defined($q->elevator->elevator_name,
|
||||||
|
+ 0))), "")
|
||||||
|
if($rq == 0) {
|
||||||
|
disk_major = -1
|
||||||
|
disk_minor = -1
|
||||||
|
@@ -114,7 +117,8 @@ probe ioscheduler.elv_add_request.kp =
|
||||||
|
elevator_name = kernel_string(
|
||||||
|
@choose_defined($q->elevator->type->elevator_name,
|
||||||
|
@choose_defined($q->elevator->elevator_type->elevator_name,
|
||||||
|
- $q->elevator->elevator_name)), "")
|
||||||
|
+ @choose_defined($q->elevator->elevator_name,
|
||||||
|
+ 0))), "")
|
||||||
|
q = $q
|
||||||
|
if($rq == 0) {
|
||||||
|
disk_major = -1
|
||||||
|
@@ -152,7 +156,8 @@ probe ioscheduler.elv_add_request.tp = kernel.trace("block_rq_insert") ?
|
||||||
|
elevator_name = kernel_string(
|
||||||
|
@choose_defined($rq->q->elevator->type->elevator_name,
|
||||||
|
@choose_defined($rq->q->elevator->elevator_type->elevator_name,
|
||||||
|
- $rq->q->elevator->elevator_name)), "")
|
||||||
|
+ @choose_defined($rq->q->elevator->elevator_name,
|
||||||
|
+ 0))), "")
|
||||||
|
rq = $rq
|
||||||
|
|
||||||
|
if ($rq == 0 || $rq->rq_disk ==0) {
|
||||||
|
@@ -201,7 +206,8 @@ probe ioscheduler_trace.elv_completed_request
|
||||||
|
elevator_name = kernel_string(
|
||||||
|
@choose_defined($rq->q->elevator->type->elevator_name,
|
||||||
|
@choose_defined($rq->q->elevator->elevator_type->elevator_name,
|
||||||
|
- $rq->q->elevator->elevator_name)), "")
|
||||||
|
+ @choose_defined($rq->q->elevator->elevator_name,
|
||||||
|
+ 0))), "")
|
||||||
|
|
||||||
|
rq = $rq
|
||||||
|
|
||||||
|
@@ -237,7 +243,8 @@ probe ioscheduler_trace.elv_issue_request
|
||||||
|
elevator_name = kernel_string(
|
||||||
|
@choose_defined($rq->q->elevator->type->elevator_name,
|
||||||
|
@choose_defined($rq->q->elevator->elevator_type->elevator_name,
|
||||||
|
- $rq->q->elevator->elevator_name)), "")
|
||||||
|
+ @choose_defined($rq->q->elevator->elevator_name,
|
||||||
|
+ 0))), "")
|
||||||
|
rq = $rq
|
||||||
|
|
||||||
|
if ($rq == 0 || $rq->rq_disk ==0) {
|
||||||
|
@@ -272,7 +279,8 @@ probe ioscheduler_trace.elv_requeue_request
|
||||||
|
elevator_name = kernel_string(
|
||||||
|
@choose_defined($rq->q->elevator->type->elevator_name,
|
||||||
|
@choose_defined($rq->q->elevator->elevator_type->elevator_name,
|
||||||
|
- $rq->q->elevator->elevator_name)), "")
|
||||||
|
+ @choose_defined($rq->q->elevator->elevator_name,
|
||||||
|
+ 0))), "")
|
||||||
|
rq = $rq
|
||||||
|
|
||||||
|
if ($rq == 0 || $rq->rq_disk ==0) {
|
||||||
|
@@ -306,7 +314,8 @@ probe ioscheduler_trace.elv_abort_request
|
||||||
|
elevator_name = kernel_string(
|
||||||
|
@choose_defined($rq->q->elevator->type->elevator_name,
|
||||||
|
@choose_defined($rq->q->elevator->elevator_type->elevator_name,
|
||||||
|
- $rq->q->elevator->elevator_name)), "")
|
||||||
|
+ @choose_defined($rq->q->elevator->elevator_name,
|
||||||
|
+ 0))), "")
|
||||||
|
rq = $rq
|
||||||
|
|
||||||
|
if ($rq == 0 || $rq->rq_disk ==0) {
|
||||||
|
@@ -364,6 +373,9 @@ probe ioscheduler_trace.unplug_timer = kernel.trace("block_unplug_timer") ?
|
||||||
|
|
||||||
|
function disk_major_from_request:long(var_q:long)
|
||||||
|
%{ /* pure */
|
||||||
|
+#ifndef _ELEVATOR_H
|
||||||
|
+ STAP_ERROR ("unsupported (PR28634)");
|
||||||
|
+#else
|
||||||
|
struct request_queue *q = (struct request_queue *)((uintptr_t)STAP_ARG_var_q);
|
||||||
|
|
||||||
|
/* We need to make sure there isn't a deref hazard here when
|
||||||
|
@@ -382,10 +394,14 @@ function disk_major_from_request:long(var_q:long)
|
||||||
|
STAP_RETVALUE = kread(&(rq_disk->major));
|
||||||
|
}
|
||||||
|
CATCH_DEREF_FAULT();
|
||||||
|
+#endif
|
||||||
|
%}
|
||||||
|
|
||||||
|
function disk_minor_from_request:long(var_q:long)
|
||||||
|
%{ /* pure */
|
||||||
|
+#ifndef _ELEVATOR_H
|
||||||
|
+ STAP_ERROR ("unsupported (PR28634)");
|
||||||
|
+#else
|
||||||
|
struct request_queue *q = (struct request_queue *)((uintptr_t)STAP_ARG_var_q);
|
||||||
|
|
||||||
|
/* We need to make sure there isn't a deref hazard here when
|
||||||
|
@@ -404,4 +420,6 @@ function disk_minor_from_request:long(var_q:long)
|
||||||
|
STAP_RETVALUE = kread(&(rq_disk->first_minor));
|
||||||
|
}
|
||||||
|
CATCH_DEREF_FAULT();
|
||||||
|
+#endif
|
||||||
|
%}
|
||||||
|
+
|
||||||
|
diff --git a/testsuite/systemtap.examples/io/iostat-scsi.stp b/testsuite/systemtap.examples/io/iostat-scsi.stp
|
||||||
|
index 6b1bf19ea..3faf32fe9 100755
|
||||||
|
--- a/testsuite/systemtap.examples/io/iostat-scsi.stp
|
||||||
|
+++ b/testsuite/systemtap.examples/io/iostat-scsi.stp
|
||||||
|
@@ -26,6 +26,7 @@ probe module("sd_mod").function("sd_init_command") !,
|
||||||
|
%(kernel_v >= "2.6.31" %?
|
||||||
|
%{
|
||||||
|
#include <linux/blkdev.h>
|
||||||
|
+#include <linux/blk-mq.h>
|
||||||
|
%}
|
||||||
|
|
||||||
|
function get_nr_sectors:long(rq:long)
|
||||||
|
@@ -47,13 +48,24 @@ probe sd_prep_fn = module("sd_mod").function("sd_prep_fn") !,
|
||||||
|
_cmd_flags = $rq->cmd_flags
|
||||||
|
}
|
||||||
|
|
||||||
|
+function scsi_cmd_to_rq(scmd) {
|
||||||
|
+ return scmd - @cast_module_sizeof("kernel", "request")
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
probe sd_init_command = module("sd_mod").function("sd_init_command") !,
|
||||||
|
kernel.function("sd_init_command")
|
||||||
|
{
|
||||||
|
- device = kernel_string(@choose_defined($cmd, $SCpnt)->request->rq_disk->disk_name)
|
||||||
|
- sector_size = @choose_defined($cmd, $SCpnt)->device->sector_size
|
||||||
|
- nr_sectors = get_nr_sectors(@choose_defined($cmd, $SCpnt)->request)
|
||||||
|
- _cmd_flags = @choose_defined($cmd, $SCpnt)->request->cmd_flags
|
||||||
|
+ sector_size = @choose_defined($cmd, $SCpnt)->device->sector_size
|
||||||
|
+ # Kernel commits aa8e25e5006aac52c943c84e9056ab488630ee19 2266a2def97ce11ec979b6c58a1b637a16eca7dd
|
||||||
|
+ if (@defined(@choose_defined($cmd, $SCpnt)->request)) {
|
||||||
|
+ device = kernel_string(@choose_defined($cmd, $SCpnt)->request->rq_disk->disk_name)
|
||||||
|
+ nr_sectors = get_nr_sectors(@choose_defined($cmd, $SCpnt)->request)
|
||||||
|
+ _cmd_flags = @choose_defined($cmd, $SCpnt)->request->cmd_flags
|
||||||
|
+ } else {
|
||||||
|
+ device = kernel_string(@cast(scsi_cmd_to_rq(@choose_defined($cmd, $SCpnt)), "request", "kernel")->rq_disk->disk_name)
|
||||||
|
+ nr_sectors = get_nr_sectors(scsi_cmd_to_rq(@choose_defined($cmd, $SCpnt)))
|
||||||
|
+ _cmd_flags = @cast(scsi_cmd_to_rq(@choose_defined($cmd, $SCpnt)), "request", "kernel")->cmd_flags
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
probe sd_prep_fn !, sd_init_command
|
||||||
|
@@ -71,7 +83,8 @@ probe sd_prep_fn !, sd_init_command
|
||||||
|
probe module("st").function("st_do_scsi").call !,
|
||||||
|
kernel.function("st_do_scsi").call
|
||||||
|
{
|
||||||
|
- device = kernel_string($STp->disk->disk_name)
|
||||||
|
+ # Kernel commit 45938335d0a9773d65a82a7ca722bb76e4b997a8
|
||||||
|
+ device = kernel_string(@choose_defined($STp->disk->disk_name, $STp->name))
|
||||||
|
devices[device] = 1
|
||||||
|
if ($direction)
|
||||||
|
writes[device] <<< $bytes
|
|
@ -0,0 +1,179 @@
|
||||||
|
diff --git a/analysis.cxx b/analysis.cxx
|
||||||
|
index a7a579e..d0d6a4f 100644
|
||||||
|
--- a/analysis.cxx
|
||||||
|
+++ b/analysis.cxx
|
||||||
|
@@ -7,6 +7,7 @@
|
||||||
|
// later version.
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
+#include "session.h"
|
||||||
|
|
||||||
|
#ifdef HAVE_DYNINST
|
||||||
|
|
||||||
|
@@ -46,6 +47,8 @@ analysis::analysis(string name)
|
||||||
|
char *name_str = strdup(name.c_str());
|
||||||
|
sts = NULL;
|
||||||
|
co = NULL;
|
||||||
|
+ SymtabAPI::Symtab *symTab;
|
||||||
|
+ bool isParsable;
|
||||||
|
|
||||||
|
// Use cached information if available
|
||||||
|
if (cached_info.find(name) != cached_info.end()) {
|
||||||
|
@@ -56,6 +59,9 @@ analysis::analysis(string name)
|
||||||
|
|
||||||
|
// Not not seen before
|
||||||
|
// Create a new binary code object from the filename argument
|
||||||
|
+ isParsable = SymtabAPI::Symtab::openFile(symTab, name_str);
|
||||||
|
+ if(!isParsable) goto cleanup;
|
||||||
|
+
|
||||||
|
sts = new SymtabCodeSource(name_str);
|
||||||
|
if(!sts) goto cleanup;
|
||||||
|
|
||||||
|
@@ -143,39 +149,40 @@ static const MachRegister dyninst_register_64[] = {
|
||||||
|
static const MachRegister dyninst_register_32[1]; // No 32-bit support
|
||||||
|
|
||||||
|
#elif defined(__powerpc__)
|
||||||
|
+/* For ppc64 still use the ppc32 register names */
|
||||||
|
static const MachRegister dyninst_register_64[] = {
|
||||||
|
- ppc64::r0,
|
||||||
|
- ppc64::r1,
|
||||||
|
- ppc64::r2,
|
||||||
|
- ppc64::r3,
|
||||||
|
- ppc64::r4,
|
||||||
|
- ppc64::r5,
|
||||||
|
- ppc64::r6,
|
||||||
|
- ppc64::r7,
|
||||||
|
- ppc64::r8,
|
||||||
|
- ppc64::r9,
|
||||||
|
- ppc64::r10,
|
||||||
|
- ppc64::r11,
|
||||||
|
- ppc64::r12,
|
||||||
|
- ppc64::r13,
|
||||||
|
- ppc64::r14,
|
||||||
|
- ppc64::r15,
|
||||||
|
- ppc64::r16,
|
||||||
|
- ppc64::r17,
|
||||||
|
- ppc64::r18,
|
||||||
|
- ppc64::r19,
|
||||||
|
- ppc64::r20,
|
||||||
|
- ppc64::r21,
|
||||||
|
- ppc64::r22,
|
||||||
|
- ppc64::r23,
|
||||||
|
- ppc64::r24,
|
||||||
|
- ppc64::r25,
|
||||||
|
- ppc64::r26,
|
||||||
|
- ppc64::r27,
|
||||||
|
- ppc64::r28,
|
||||||
|
- ppc64::r29,
|
||||||
|
- ppc64::r30,
|
||||||
|
- ppc64::r31
|
||||||
|
+ ppc32::r0,
|
||||||
|
+ ppc32::r1,
|
||||||
|
+ ppc32::r2,
|
||||||
|
+ ppc32::r3,
|
||||||
|
+ ppc32::r4,
|
||||||
|
+ ppc32::r5,
|
||||||
|
+ ppc32::r6,
|
||||||
|
+ ppc32::r7,
|
||||||
|
+ ppc32::r8,
|
||||||
|
+ ppc32::r9,
|
||||||
|
+ ppc32::r10,
|
||||||
|
+ ppc32::r11,
|
||||||
|
+ ppc32::r12,
|
||||||
|
+ ppc32::r13,
|
||||||
|
+ ppc32::r14,
|
||||||
|
+ ppc32::r15,
|
||||||
|
+ ppc32::r16,
|
||||||
|
+ ppc32::r17,
|
||||||
|
+ ppc32::r18,
|
||||||
|
+ ppc32::r19,
|
||||||
|
+ ppc32::r20,
|
||||||
|
+ ppc32::r21,
|
||||||
|
+ ppc32::r22,
|
||||||
|
+ ppc32::r23,
|
||||||
|
+ ppc32::r24,
|
||||||
|
+ ppc32::r25,
|
||||||
|
+ ppc32::r26,
|
||||||
|
+ ppc32::r27,
|
||||||
|
+ ppc32::r28,
|
||||||
|
+ ppc32::r29,
|
||||||
|
+ ppc32::r30,
|
||||||
|
+ ppc32::r31
|
||||||
|
};
|
||||||
|
|
||||||
|
static const MachRegister dyninst_register_32[] = {
|
||||||
|
@@ -218,14 +225,26 @@ static const MachRegister dyninst_register_32[] = {
|
||||||
|
typedef map<string, LivenessAnalyzer*> precomputed_liveness;
|
||||||
|
static precomputed_liveness cached_liveness;
|
||||||
|
|
||||||
|
-int liveness(string executable,
|
||||||
|
+int liveness(systemtap_session& s,
|
||||||
|
+ target_symbol *e,
|
||||||
|
+ string executable,
|
||||||
|
Dwarf_Addr addr,
|
||||||
|
location_context ctx)
|
||||||
|
{
|
||||||
|
+ try{
|
||||||
|
+ // Doing this inside a try/catch because dyninst may require
|
||||||
|
+ // too much memory to parse the binary.
|
||||||
|
// should cache the executable names like the other things
|
||||||
|
analysis func_to_analyze(executable);
|
||||||
|
MachRegister r;
|
||||||
|
|
||||||
|
+ // Punt if unsuccessful in parsing binary
|
||||||
|
+ if (!func_to_analyze.co){
|
||||||
|
+ s.print_warning(_F("liveness analysis unable to parse binary %s",
|
||||||
|
+ executable.c_str()), e->tok);
|
||||||
|
+ return 0;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
// Determine whether 32-bit or 64-bit code as the register names are different in dyninst
|
||||||
|
int reg_width = func_to_analyze.co->cs()->getAddressWidth();
|
||||||
|
|
||||||
|
@@ -282,6 +301,11 @@ int liveness(string executable,
|
||||||
|
bool used;
|
||||||
|
la->query(iloc, LivenessAnalyzer::Before, r, used);
|
||||||
|
return (used ? 1 : -1);
|
||||||
|
+ } catch (std::bad_alloc & ex){
|
||||||
|
+ s.print_warning(_F("unable to allocate memory for liveness analysis of %s",
|
||||||
|
+ executable.c_str()), e->tok);
|
||||||
|
+ return 0;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // HAVE_DYNINST
|
||||||
|
diff --git a/analysis.h b/analysis.h
|
||||||
|
index 9b6d115..6bea675 100644
|
||||||
|
--- a/analysis.h
|
||||||
|
+++ b/analysis.h
|
||||||
|
@@ -17,13 +17,15 @@
|
||||||
|
|
||||||
|
#ifdef HAVE_DYNINST
|
||||||
|
|
||||||
|
-extern int liveness(std::string executable,
|
||||||
|
+extern int liveness(systemtap_session& s,
|
||||||
|
+ target_symbol *e,
|
||||||
|
+ std::string executable,
|
||||||
|
Dwarf_Addr location,
|
||||||
|
location_context ctx);
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
-#define liveness(executable, location, var) (0)
|
||||||
|
+#define liveness(session, target, executable, location, var) (0)
|
||||||
|
|
||||||
|
#endif // HAVE_DYNINST
|
||||||
|
#endif // ANALYSIS_H
|
||||||
|
diff --git a/tapsets.cxx b/tapsets.cxx
|
||||||
|
index 60794bb..8fc5146 100644
|
||||||
|
--- a/tapsets.cxx
|
||||||
|
+++ b/tapsets.cxx
|
||||||
|
@@ -4732,7 +4732,7 @@ dwarf_var_expanding_visitor::visit_target_symbol (target_symbol *e)
|
||||||
|
|
||||||
|
// Now that have location information check if change to variable has any effect
|
||||||
|
if (lvalue) {
|
||||||
|
- if (liveness(q.dw.mod_info->elf_path, addr, ctx) < 0) {
|
||||||
|
+ if (liveness(q.sess, e, q.dw.mod_info->elf_path, addr, ctx) < 0) {
|
||||||
|
q.sess.print_warning(_F("write at %p will have no effect",
|
||||||
|
(void *)addr), e->tok);
|
||||||
|
}
|
|
@ -116,6 +116,14 @@ index 4f2539c93..530a79175 100644
|
||||||
+ else
|
+ else
|
||||||
+ printf("FAIL: %s (%d/%d != 42/43)\n", $$name, $arg1, $arg2)
|
+ printf("FAIL: %s (%d/%d != 42/43)\n", $$name, $arg1, $arg2)
|
||||||
+}
|
+}
|
||||||
|
commit 209b5a19c (HEAD -> master, origin/master, origin/HEAD)
|
||||||
|
Author: Stan Cox <scox@redhat.com>
|
||||||
|
Date: Tue Dec 7 09:55:01 2021 -0500
|
||||||
|
|
||||||
|
sys/sdt.h fp constraints: aarch64, s390
|
||||||
|
|
||||||
|
Remove float constraints as per commit 1d3653936 but for aarch64 and s390.
|
||||||
|
|
||||||
commit 1d3653936 (HEAD -> master, origin/master, origin/HEAD)
|
commit 1d3653936 (HEAD -> master, origin/master, origin/HEAD)
|
||||||
Author: Frank Ch. Eigler <fche@redhat.com>
|
Author: Frank Ch. Eigler <fche@redhat.com>
|
||||||
Date: Mon Dec 6 12:06:06 2021 -0500
|
Date: Mon Dec 6 12:06:06 2021 -0500
|
||||||
|
@ -131,16 +139,16 @@ Date: Mon Dec 6 12:06:06 2021 -0500
|
||||||
We may need to restore previous constraints broadly, forcing the
|
We may need to restore previous constraints broadly, forcing the
|
||||||
compiler to plop floating point parameters into integer storage.
|
compiler to plop floating point parameters into integer storage.
|
||||||
|
|
||||||
diff --git a/includes/sys/sdt.h b/includes/sys/sdt.h
|
|
||||||
index 24d5e01c3..3e1f00b6c 100644
|
|
||||||
--- a/includes/sys/sdt.h
|
--- a/includes/sys/sdt.h
|
||||||
+++ b/includes/sys/sdt.h
|
+++ b/includes/sys/sdt.h
|
||||||
@@ -101,7 +101,7 @@
|
@@ -102,9 +102,5 @@
|
||||||
# if defined __powerpc__
|
|
||||||
# define STAP_SDT_ARG_CONSTRAINT nZr
|
# define STAP_SDT_ARG_CONSTRAINT nZr
|
||||||
# elif defined __x86_64__
|
# elif defined __x86_64__
|
||||||
-# define STAP_SDT_ARG_CONSTRAINT norfxy
|
-# define STAP_SDT_ARG_CONSTRAINT norfxy
|
||||||
|
-# elif defined __aarch64__
|
||||||
|
-# define STAP_SDT_ARG_CONSTRAINT norw
|
||||||
|
-# elif defined __s390__ || defined __s390x__
|
||||||
|
-# define STAP_SDT_ARG_CONSTRAINT norf
|
||||||
+# define STAP_SDT_ARG_CONSTRAINT norx
|
+# define STAP_SDT_ARG_CONSTRAINT norx
|
||||||
# elif defined __aarch64__
|
# else
|
||||||
# define STAP_SDT_ARG_CONSTRAINT norw
|
# define STAP_SDT_ARG_CONSTRAINT nor
|
||||||
# elif defined __s390__ || defined __s390x__
|
|
||||||
|
|
|
@ -118,7 +118,7 @@ m stapdev stapdev
|
||||||
|
|
||||||
Name: systemtap
|
Name: systemtap
|
||||||
Version: 4.6
|
Version: 4.6
|
||||||
Release: 4%{?release_override}%{?dist}
|
Release: 11%{?release_override}%{?dist}
|
||||||
# for version, see also configure.ac
|
# for version, see also configure.ac
|
||||||
|
|
||||||
|
|
||||||
|
@ -157,6 +157,10 @@ Source: ftp://sourceware.org/pub/systemtap/releases/systemtap-%{version}.tar.gz
|
||||||
Patch1: rhbz2025054python3.patch
|
Patch1: rhbz2025054python3.patch
|
||||||
Patch2: rhbz1972798.patch
|
Patch2: rhbz1972798.patch
|
||||||
Patch3: sdt-asm-glibc.patch
|
Patch3: sdt-asm-glibc.patch
|
||||||
|
Patch4: rhbz2041526.patch
|
||||||
|
Patch5: rhbz2027683.patch
|
||||||
|
Patch6: rhbz2047256.patch
|
||||||
|
Patch7: rhbz2039207.patch
|
||||||
|
|
||||||
# Build*
|
# Build*
|
||||||
BuildRequires: make
|
BuildRequires: make
|
||||||
|
@ -581,6 +585,10 @@ systemtap-runtime-virthost machine to execute systemtap scripts.
|
||||||
%patch1 -p1
|
%patch1 -p1
|
||||||
%patch2 -p1
|
%patch2 -p1
|
||||||
%patch3 -p1
|
%patch3 -p1
|
||||||
|
%patch4 -p1
|
||||||
|
%patch5 -p1
|
||||||
|
%patch6 -p1
|
||||||
|
%patch7 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
|
|
||||||
|
@ -1277,6 +1285,22 @@ exit 0
|
||||||
|
|
||||||
# PRERELEASE
|
# PRERELEASE
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Feb 2 2022 Stan Cox <scox@redhat.com> - 4.6-11
|
||||||
|
- rhbz2039207: Attempt userspace string access if kernel access fails
|
||||||
|
|
||||||
|
* Tue Feb 1 2022 Martin Cermak <mcermak@redhat.com> - 4.6-10
|
||||||
|
- rhbz2047256: [ppc64le] Assertion `index >= 0' failed
|
||||||
|
|
||||||
|
* Fri Jan 21 2022 Martin Cermak <mcermak@redhat.com> - 4.6-9
|
||||||
|
- rhbz2027683: python tapset regression
|
||||||
|
- rhbz2027683: systemtap.examples/io/iostat-scsi.stp PR28633
|
||||||
|
|
||||||
|
* Mon Jan 17 2022 Martin Cermak <mcermak@redhat.com> - 4.6-6
|
||||||
|
- rhbz2041526/pr28634: move elevator.h to block/
|
||||||
|
|
||||||
|
* Tue Dec 07 2021 Stan Cox <scox@redhat.com> - 4.6.5
|
||||||
|
- sys/sdt.h remove aarch64 and s390 float constraints
|
||||||
|
|
||||||
* Mon Dec 06 2021 Stan Cox <scox@redhat.com> - 4.6.4
|
* Mon Dec 06 2021 Stan Cox <scox@redhat.com> - 4.6.4
|
||||||
- sys/sdt.h remove float constraints that may cause gcc reload issues.
|
- sys/sdt.h remove float constraints that may cause gcc reload issues.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue