summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--var/spack/repos/builtin/packages/extrae/dyninst_instruction.patch19
-rw-r--r--var/spack/repos/builtin/packages/extrae/package.py30
2 files changed, 42 insertions, 7 deletions
diff --git a/var/spack/repos/builtin/packages/extrae/dyninst_instruction.patch b/var/spack/repos/builtin/packages/extrae/dyninst_instruction.patch
new file mode 100644
index 0000000000..08c691c4f7
--- /dev/null
+++ b/var/spack/repos/builtin/packages/extrae/dyninst_instruction.patch
@@ -0,0 +1,19 @@
+diff --git a/src/launcher/dyninst/commonSnippets.C b/src/launcher/dyninst/commonSnippets.C
+index 94904a23..2f918949 100644
+--- a/src/launcher/dyninst/commonSnippets.C
++++ b/src/launcher/dyninst/commonSnippets.C
+@@ -482,9 +482,10 @@ string decodeBasicBlocks(BPatch_function * function, string routine)
+ ParseAPI::Block* b = ParseAPI::convert(block);
+ void * buf = b->region()->getPtrToInstruction(b->start());
+ InstructionAPI::InstructionDecoder dec((unsigned char*)buf,b->size(),b->region()->getArch());
+- InstructionAPI::Instruction::Ptr insn;
+- while((insn = dec.decode())) {
+- res <<loop_name<<"# "<<line++<<": "<< insn->format() << endl;
++ InstructionAPI::Instruction insn = dec.decode();
++ while(insn.isValid()) {
++ res <<loop_name<<"# "<<line++<<": "<< insn.format() << endl;
++ insn = dec.decode();
+ }
+ }
+ return res.str();
+
diff --git a/var/spack/repos/builtin/packages/extrae/package.py b/var/spack/repos/builtin/packages/extrae/package.py
index 86714923e6..ee36e88b05 100644
--- a/var/spack/repos/builtin/packages/extrae/package.py
+++ b/var/spack/repos/builtin/packages/extrae/package.py
@@ -16,6 +16,8 @@ from spack.pkg.builtin.boost import Boost
# --with-papi=/usr
# --with-dwarf=/usr
# --with-elf=/usr
+# --with-elfutils=/usr
+# --with-tbb=/usr
# --with-dyninst=/usr
# --with-binutils=/usr
# --with-xml-prefix=/usr
@@ -88,7 +90,10 @@ class Extrae(AutotoolsPackage):
build_directory = "spack-build"
variant("dyninst", default=False, description="Use dyninst for dynamic code installation")
- depends_on("dyninst@:9", when="+dyninst")
+ with when("+dyninst"):
+ depends_on("dyninst@10.1.0:")
+ depends_on("elfutils", when="@4.1.2:")
+ depends_on("intel-oneapi-tbb", when="@4.1.2:")
variant("papi", default=True, description="Use PAPI to collect performance counters")
depends_on("papi", when="+papi")
@@ -106,6 +111,12 @@ class Extrae(AutotoolsPackage):
description="Enable single MPI instrumentation library that supports both Fortran and C",
)
+ patch(
+ "dyninst_instruction.patch",
+ when="@:4.0.6 +dyninst",
+ sha256="c1df1627b51b9d0f38711aee50ff11f30ffc34c43e520c39118157e9c31a927e",
+ )
+
def configure_args(self):
spec = self.spec
if spec.satisfies("^[virtuals=mpi] intel-oneapi-mpi"):
@@ -129,11 +140,16 @@ class Extrae(AutotoolsPackage):
else ["--without-papi"]
)
- args += (
- ["--with-dyninst=%s" % spec["dyninst"].prefix]
- if spec.satisfies("+dyninst")
- else ["--without-dyninst"]
- )
+ if spec.satisfies("+dyninst"):
+ args += ["--with-dyninst={spec['dyninst'].prefix}"]
+
+ if spec.satisfies("@4.1.2:"):
+ args += [
+ f"--with-elfutils={spec['elfutils'].prefix}",
+ f"--with-tbb={spec['tbb'].prefix}",
+ ]
+ else:
+ args += ["--without-dyninst"]
args += (
["--with-cuda=%s" % spec["cuda"].prefix]
@@ -147,7 +163,7 @@ class Extrae(AutotoolsPackage):
args += ["--with-cupti=%s" % cupti_dir] if "+cupti" in spec else ["--without-cupti"]
- if spec.satisfies("^dyninst@9.3.0:"):
+ if spec.satisfies("+dyninst"):
make.add_default_arg("CXXFLAGS=%s" % self.compiler.cxx11_flag)
args.append("CXXFLAGS=%s" % self.compiler.cxx11_flag)