Gabe Black has submitted this change and it was merged. ( https://gem5-review.googlesource.com/c/public/gem5/+/12227 )

Change subject: base: If valgrind is available, tell it about Fiber stacks.
......................................................................

base: If valgrind is available, tell it about Fiber stacks.

Valgrind can get confused when  switching stacks between different
Fibers. If valgrind (and its headers) are available, this change adds
calls to some hooks so valgrind knows where the new stacks are and
doesn't report a bunch of false positives.

Change-Id: I00aefe60372be6de7371dec29427d7182dbee7b6
Reviewed-on: https://gem5-review.googlesource.com/12227
Reviewed-by: Giacomo Travaglini <[email protected]>
Reviewed-by: Daniel Carvalho <[email protected]>
Maintainer: Gabe Black <[email protected]>
---
M SConstruct
M src/base/fiber.cc
M src/base/fiber.hh
3 files changed, 23 insertions(+), 3 deletions(-)

Approvals:
  Giacomo Travaglini: Looks good to me, approved
  Daniel Carvalho: Looks good to me, approved
  Gabe Black: Looks good to me, approved



diff --git a/SConstruct b/SConstruct
index 5209aa6..79522e4 100755
--- a/SConstruct
+++ b/SConstruct
@@ -783,6 +783,10 @@
     conf.CheckLibWithHeader('protobuf', 'google/protobuf/message.h',
                             'C++', 'GOOGLE_PROTOBUF_VERIFY_VERSION;')

+# Valgrind gets much less confused if you tell it when you're using
+# alternative stacks.
+main['HAVE_VALGRIND'] = conf.CheckCHeader('valgrind/valgrind.h')
+
 # If we have the compiler but not the library, print another warning.
 if main['PROTOC'] and not main['HAVE_PROTOBUF']:
     print(termcap.Yellow + termcap.Bold +
@@ -1012,8 +1016,8 @@
# These variables get exported to #defines in config/*.hh (see src/SConscript). export_vars += ['USE_FENV', 'SS_COMPATIBLE_FP', 'TARGET_ISA', 'TARGET_GPU_ISA',
                 'CP_ANNOTATE', 'USE_POSIX_CLOCK', 'USE_KVM', 'USE_TUNTAP',
-                'PROTOCOL', 'HAVE_PROTOBUF', 'HAVE_PERF_ATTR_EXCLUDE_HOST',
-                'USE_PNG']
+                'PROTOCOL', 'HAVE_PROTOBUF', 'HAVE_VALGRIND',
+                'HAVE_PERF_ATTR_EXCLUDE_HOST', 'USE_PNG']

 ###################################################
 #
diff --git a/src/base/fiber.cc b/src/base/fiber.cc
index f10f1fb..eac1d93 100644
--- a/src/base/fiber.cc
+++ b/src/base/fiber.cc
@@ -29,6 +29,10 @@

 #include "base/fiber.hh"

+#if HAVE_VALGRIND
+#include <valgrind/valgrind.h>
+#endif
+
 #include <cerrno>
 #include <cstring>

@@ -71,7 +75,11 @@
     link(primaryFiber()),
     stack(stack_size ? new uint8_t[stack_size] : nullptr),
     stackSize(stack_size), started(false), _finished(false)
-{}
+{
+#if HAVE_VALGRIND
+    valgrindStackId = VALGRIND_STACK_REGISTER(stack, stack + stack_size);
+#endif
+}

 Fiber::Fiber(Fiber *link, size_t stack_size) :
     link(link), stack(stack_size ? new uint8_t[stack_size] : nullptr),
@@ -81,6 +89,9 @@
 Fiber::~Fiber()
 {
     panic_if(stack && _currentFiber == this, "Fiber stack is in use.");
+#if HAVE_VALGRIND
+    VALGRIND_STACK_DEREGISTER(valgrindStackId);
+#endif
     delete [] stack;
 }

diff --git a/src/base/fiber.hh b/src/base/fiber.hh
index 5f7285b..3d82075 100644
--- a/src/base/fiber.hh
+++ b/src/base/fiber.hh
@@ -44,6 +44,8 @@
 #include <cstddef>
 #include <cstdint>

+#include "config/have_valgrind.hh"
+
 /**
* This class represents a fiber, which is a light weight sort of thread which * is cooperatively scheduled and runs sequentially with other fibers, swapping
@@ -106,6 +108,9 @@
     // The stack for this context, or a nullptr if allocated elsewhere.
     uint8_t *stack;
     size_t stackSize;
+#if HAVE_VALGRIND
+    unsigned valgrindStackId;
+#endif

     bool started;
     bool _finished;

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/12227
To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings

Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-Change-Id: I00aefe60372be6de7371dec29427d7182dbee7b6
Gerrit-Change-Number: 12227
Gerrit-PatchSet: 3
Gerrit-Owner: Gabe Black <[email protected]>
Gerrit-Reviewer: Daniel Carvalho <[email protected]>
Gerrit-Reviewer: Gabe Black <[email protected]>
Gerrit-Reviewer: Giacomo Travaglini <[email protected]>
Gerrit-Reviewer: Jason Lowe-Power <[email protected]>
Gerrit-MessageType: merged
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to