Merge pull request #1379 from LLNL/features/graphlib3

added stat 3.0 beta and added pygtk and dependent packages
This commit is contained in:
Gregory Lee 2016-08-25 09:14:36 -07:00 committed by GitHub
commit 77c24d4127
15 changed files with 374 additions and 10 deletions

View File

@ -42,7 +42,7 @@ class Atk(Package):
def url_for_version(self, version): def url_for_version(self, version):
"""Handle atk's version-based custom URLs.""" """Handle atk's version-based custom URLs."""
url = 'http://ftp.gnome.org/pub/gnome/sources/atk' url = 'http://ftp.gnome.org/pub/gnome/sources/atk'
return 'url+/%s/atk-%s.tar.xz' % (version.up_to(2), version) return url + '/%s/atk-%s.tar.xz' % (version.up_to(2), version)
def install(self, spec, prefix): def install(self, spec, prefix):
configure("--prefix=%s" % prefix) configure("--prefix=%s" % prefix)

View File

@ -37,6 +37,7 @@ class Cairo(Package):
depends_on("glib") depends_on("glib")
depends_on("pixman") depends_on("pixman")
depends_on("freetype") depends_on("freetype")
depends_on("pkg-config", type="build")
depends_on("fontconfig@2.10.91:") # Require newer version of fontconfig. depends_on("fontconfig@2.10.91:") # Require newer version of fontconfig.
def install(self, spec, prefix): def install(self, spec, prefix):

View File

@ -28,10 +28,13 @@
class Dyninst(Package): class Dyninst(Package):
"""API for dynamic binary instrumentation. Modify programs while they """API for dynamic binary instrumentation. Modify programs while they
are executing without recompiling, re-linking, or re-executing.""" are executing without recompiling, re-linking, or re-executing."""
homepage = "https://paradyn.org" homepage = "https://paradyn.org"
url = "http://www.dyninst.org/sites/default/files/downloads/dyninst/8.1.2/DyninstAPI-8.1.2.tgz" url = "https://github.com/dyninst/dyninst/archive/v9.2.0.tar.gz"
list_url = "http://www.dyninst.org/downloads/dyninst-8.x" list_url = "http://www.dyninst.org/downloads/dyninst-8.x"
version('9.2.0', 'ad023f85e8e57837ed9de073b59d6bab',
url="https://github.com/dyninst/dyninst/archive/v9.2.0.tar.gz")
version('9.1.0', '5c64b77521457199db44bec82e4988ac', version('9.1.0', '5c64b77521457199db44bec82e4988ac',
url="http://www.paradyn.org/release9.1.0/DyninstAPI-9.1.0.tgz") url="http://www.paradyn.org/release9.1.0/DyninstAPI-9.1.0.tgz")
version('8.2.1', 'abf60b7faabe7a2e4b54395757be39c7', version('8.2.1', 'abf60b7faabe7a2e4b54395757be39c7',
@ -41,13 +44,25 @@ class Dyninst(Package):
version('8.1.1', 'd1a04e995b7aa70960cd1d1fac8bd6ac', version('8.1.1', 'd1a04e995b7aa70960cd1d1fac8bd6ac',
url="http://www.paradyn.org/release8.1/DyninstAPI-8.1.1.tgz") url="http://www.paradyn.org/release8.1/DyninstAPI-8.1.1.tgz")
variant('stat_dysect', default=False,
description="patch for STAT's DySectAPI")
depends_on("libelf") depends_on("libelf")
depends_on("libdwarf") depends_on("libdwarf")
depends_on("boost@1.42:") depends_on("boost@1.42:")
depends_on('cmake', type='build') depends_on('cmake', type='build')
patch('stat_dysect.patch', when='+stat_dysect')
patch('stackanalysis_h.patch', when='@9.2.0')
# new version uses cmake # new version uses cmake
def install(self, spec, prefix): def install(self, spec, prefix):
if spec.satisfies('@:8.1'):
configure("--prefix=" + prefix)
make()
make("install")
return
libelf = spec['libelf'].prefix libelf = spec['libelf'].prefix
libdwarf = spec['libdwarf'].prefix libdwarf = spec['libdwarf'].prefix

View File

@ -0,0 +1,11 @@
--- a/dataflowAPI/h/stackanalysis.h 2016-06-29 14:54:14.000000000 -0700
+++ b/dataflowAPI/h/stackanalysis.h 2016-08-02 09:50:13.619079000 -0700
@@ -331,7 +331,7 @@
// To build intervals, we must replay the effect of each instruction.
// To avoid sucking enormous time, we keep those transfer functions around...
- typedef std::map<ParseAPI::Block *, std::map<Offset, TransferFuncs>>
+ typedef std::map<ParseAPI::Block *, std::map<Offset, TransferFuncs> >
InstructionEffects;
DATAFLOW_EXPORT StackAnalysis();

View File

@ -0,0 +1,96 @@
From 3aebb41ce0ea5b578a1ebf6810446c660066c525 Mon Sep 17 00:00:00 2001
From: Jesper Puge Nielsen <nielsen34@llnl.gov>
Date: Wed, 12 Aug 2015 21:07:52 -0700
Subject: [PATCH] =?UTF-8?q?Exposed=20stackwalker=20and=20proc=20callback=20status=20to=20DySect
=20=C3c?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
dyninstAPI/h/BPatch_process.h | 13 +++++++++++++
dyninstAPI/src/BPatch_process.C | 18 ++++++++++++++++++
dyninstAPI/src/dynProcess.h | 3 ++-
3 files changed, 33 insertions(+), 1 deletions(-)
diff --git a/dyninstAPI/h/BPatch_process.h b/dyninstAPI/h/BPatch_process.h
index 5e01bbb..1316bb2 100644
--- a/dyninstAPI/h/BPatch_process.h
+++ b/dyninstAPI/h/BPatch_process.h
@@ -225,6 +225,10 @@ class BPATCH_DLL_EXPORT BPatch_process : public BPatch_addressSpace {
//
// this function should go away as soon as Paradyn links against Dyninst
PCProcess *lowlevel_process() const { return llproc; }
+
+ // Expose walker from Dyninst proces
+ void *get_walker() const;
+
// These internal funcs trigger callbacks registered to matching events
bool triggerStopThread(instPoint *intPoint, func_instance *intFunc,
int cb_ID, void *retVal);
@@ -281,6 +285,15 @@ class BPATCH_DLL_EXPORT BPatch_process : public BPatch_addressSpace {
bool continueExecution();
+ // BPatch_process::keepStopped
+ //
+ // Changes the desired process stat to prevent
+ // Dyninst from resuming the process after
+ // handling the current event.
+ // Must be called from an event handler.
+
+ void keepStopped();
+
// BPatch_process::terminateExecution
//
// Terminate mutatee process
diff --git a/dyninstAPI/src/BPatch_process.C b/dyninstAPI/src/BPatch_process.C
index 115f215..809e797 100644
--- a/dyninstAPI/src/BPatch_process.C
+++ b/dyninstAPI/src/BPatch_process.C
@@ -507,6 +507,19 @@ bool BPatch_process::continueExecution()
}
/*
+ * BPatch_process::keepStopped
+ *
+ * Changes the desired process stat to prevent
+ * Dyninst from resuming the process after
+ * handling the current event.
+ * Must be called from an event handler.
+ */
+void BPatch_process::keepStopped()
+{
+ llproc->setDesiredProcessState(PCProcess::ps_stopped);
+}
+
+/*
* BPatch_process::terminateExecution
*
* Kill the thread.
@@ -1754,3 +1767,8 @@ bool BPatch_process::protectAnalyzedCode()
}
return ret;
}
+
+void *BPatch_process::get_walker() const
+{
+ return llproc->get_walker();
+}
diff --git a/dyninstAPI/src/dynProcess.h b/dyninstAPI/src/dynProcess.h
index 54b0c6e..00721d1 100644
--- a/dyninstAPI/src/dynProcess.h
+++ b/dyninstAPI/src/dynProcess.h
@@ -302,7 +302,8 @@ public:
// Stackwalking internals
bool walkStack(pdvector<Frame> &stackWalk, PCThread *thread);
bool getActiveFrame(Frame &frame, PCThread *thread);
-
+ Dyninst::Stackwalker::Walker *get_walker() { return stackwalker_; }
+
void addSignalHandler(Address, unsigned);
bool isInSignalHandler(Address addr);
--
1.7.1

View File

@ -30,17 +30,19 @@ class Glib(Package):
providing data structure handling for C, portability wrappers providing data structure handling for C, portability wrappers
and interfaces for such runtime functionality as an event loop, and interfaces for such runtime functionality as an event loop,
threads, dynamic loading and an object system.""" threads, dynamic loading and an object system."""
homepage = "https://developer.gnome.org/glib/" homepage = "https://developer.gnome.org/glib/"
url = "http://ftp.gnome.org/pub/gnome/sources/glib/2.42/glib-2.42.1.tar.xz" url = "http://ftp.gnome.org/pub/gnome/sources/glib/2.42/glib-2.42.1.tar.xz"
version('2.49.4', 'e2c87c03017b0cd02c4c73274b92b148') version('2.49.4', 'e2c87c03017b0cd02c4c73274b92b148')
version('2.48.1', '67bd3b75c9f6d5587b457dc01cdcd5bb')
version('2.42.1', '89c4119e50e767d3532158605ee9121a') version('2.42.1', '89c4119e50e767d3532158605ee9121a')
depends_on('libffi') depends_on('libffi')
depends_on('zlib') depends_on('zlib')
depends_on('pkg-config', type='build') depends_on('pkg-config', type='build')
depends_on('gettext') depends_on('gettext')
depends_on('pcre+utf', when='@2.49:') depends_on('pcre+utf', when='@2.48:')
# The following patch is needed for gcc-6.1 # The following patch is needed for gcc-6.1
patch('g_date_strftime.patch', when='@2.42.1') patch('g_date_strftime.patch', when='@2.42.1')

View File

@ -0,0 +1,49 @@
##############################################################################
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory.
#
# This file is part of Spack.
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
# LLNL-CODE-647188
#
# For details, see https://github.com/llnl/spack
# Please also see the LICENSE file for our notice and the LGPL.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License (as
# published by the Free Software Foundation) version 2.1, February 1999.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
# conditions of the GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
class GobjectIntrospection(Package):
"""The GObject Introspection is used to describe the program APIs and
collect them in a uniform, machine readable format.Cairo is a 2D graphics
library with support for multiple output"""
homepage = "https://wiki.gnome.org/Projects/GObjectIntrospection"
url = "http://ftp.gnome.org/pub/gnome/sources/gobject-introspection/1.48/gobject-introspection-1.48.0.tar.xz"
version('1.48.0', '01301fa9019667d48e927353e08bc218')
# version 1.48.0 build fails with glib 2.49.4
depends_on("glib@2.48.1")
depends_on("python")
depends_on("cairo")
def install(self, spec, prefix):
configure("--prefix=%s" % prefix)
# we need to filter this file to avoid an overly long hashbang line
filter_file('@PYTHON@', 'python',
'tools/g-ir-tool-template.in')
make()
make("install")

View File

@ -27,10 +27,11 @@
class Graphlib(Package): class Graphlib(Package):
"""Library to create, manipulate, and export graphs Graphlib.""" """Library to create, manipulate, and export graphs Graphlib."""
homepage = "http://https://github.com/lee218llnl/graphlib" homepage = "https://github.com/LLNL/graphlib"
url = "https://github.com/lee218llnl/graphlib/archive/v2.0.0.tar.gz" url = "https://github.com/LLNL/graphlib/archive/v2.0.0.tar.gz"
version('2.0.0', '43c6df84f1d38ba5a5dce0ae19371a70') version('2.0.0', '43c6df84f1d38ba5a5dce0ae19371a70')
version('3.0.0', '625d199f97ab1b84cbc8daabcaee5e2a')
depends_on('cmake', type='build') depends_on('cmake', type='build')

View File

@ -36,6 +36,8 @@ class Launchmon(Package):
depends_on('autoconf', type='build') depends_on('autoconf', type='build')
depends_on('automake', type='build') depends_on('automake', type='build')
depends_on('libtool', type='build') depends_on('libtool', type='build')
depends_on('libgcrypt')
depends_on('libgpg-error')
def install(self, spec, prefix): def install(self, spec, prefix):
configure( configure(

View File

@ -34,6 +34,7 @@ class Pixman(Package):
version('0.32.6', '3a30859719a41bd0f5cccffbfefdd4c2') version('0.32.6', '3a30859719a41bd0f5cccffbfefdd4c2')
depends_on("pkg-config", type="build")
depends_on("libpng") depends_on("libpng")
def install(self, spec, prefix): def install(self, spec, prefix):

View File

@ -0,0 +1,44 @@
##############################################################################
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory.
#
# This file is part of Spack.
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
# LLNL-CODE-647188
#
# For details, see https://github.com/llnl/spack
# Please also see the LICENSE file for our notice and the LGPL.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License (as
# published by the Free Software Foundation) version 2.1, February 1999.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
# conditions of the GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
class PyPy2cairo(Package):
"""bindings for the Cairo for Python 2,
to be used in Python."""
homepage = "https://pypi.python.org/pypi/pycairo"
url = "https://cairographics.org/releases/py2cairo-1.10.0.tar.bz2"
version('1.10.0', '20337132c4ab06c1146ad384d55372c5')
extends('python')
depends_on("cairo")
depends_on("pixman")
def install(self, spec, prefix):
python('waf', 'configure', '--prefix=%s' % prefix)
python('waf', 'build')
python('waf', 'install')

View File

@ -0,0 +1,48 @@
##############################################################################
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory.
#
# This file is part of Spack.
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
# LLNL-CODE-647188
#
# For details, see https://github.com/llnl/spack
# Please also see the LICENSE file for our notice and the LGPL.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License (as
# published by the Free Software Foundation) version 2.1, February 1999.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
# conditions of the GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
class PyPygobject(Package):
"""bindings for the GLib, and GObject,
to be used in Python."""
homepage = "https://pypi.python.org/pypi/pygobject"
url = "https://pypi.python.org/packages/6d/15/97c8b5ccca2be14cf59a2f79e15e3a82a1c3408a6b76b4107689a8b94846/pygobject-2.28.3.tar.bz2"
version('2.28.3', 'aa64900b274c4661a5c32e52922977f9')
extends('python')
depends_on("libffi")
depends_on('glib')
depends_on('py-py2cairo')
depends_on('gobject-introspection')
patch('pygobject-2.28.6-introspection-1.patch')
def install(self, spec, prefix):
configure("--prefix=%s" % prefix)
make()
make("install", parallel=False)

View File

@ -0,0 +1,35 @@
Submitted By: Andrew Benton <andy@benton.eu.com>
Date: 2012-03-29
Initial Package Version: 2.28.6
Upstream Status: not submitted
Origin: me
Description: Fixes compiling with a recent version of gobject-introspection
--- pygobject-2.28.6/gi/pygi-info.c-orig 2012-03-29 02:27:37.494228732 +0100
+++ pygobject-2.28.6/gi/pygi-info.c 2012-03-29 02:26:37.735132310 +0100
@@ -162,9 +162,6 @@
case GI_INFO_TYPE_CONSTANT:
type = &PyGIConstantInfo_Type;
break;
- case GI_INFO_TYPE_ERROR_DOMAIN:
- type = &PyGIErrorDomainInfo_Type;
- break;
case GI_INFO_TYPE_UNION:
type = &PyGIUnionInfo_Type;
break;
@@ -481,7 +478,6 @@
case GI_INFO_TYPE_INVALID:
case GI_INFO_TYPE_FUNCTION:
case GI_INFO_TYPE_CONSTANT:
- case GI_INFO_TYPE_ERROR_DOMAIN:
case GI_INFO_TYPE_VALUE:
case GI_INFO_TYPE_SIGNAL:
case GI_INFO_TYPE_PROPERTY:
@@ -860,7 +856,6 @@
case GI_INFO_TYPE_INVALID:
case GI_INFO_TYPE_FUNCTION:
case GI_INFO_TYPE_CONSTANT:
- case GI_INFO_TYPE_ERROR_DOMAIN:
case GI_INFO_TYPE_VALUE:
case GI_INFO_TYPE_SIGNAL:
case GI_INFO_TYPE_PROPERTY:

View File

@ -0,0 +1,46 @@
##############################################################################
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory.
#
# This file is part of Spack.
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
# LLNL-CODE-647188
#
# For details, see https://github.com/llnl/spack
# Please also see the LICENSE file for our notice and the LGPL.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License (as
# published by the Free Software Foundation) version 2.1, February 1999.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
# conditions of the GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
class PyPygtk(Package):
"""bindings for the Gtk in Python"""
homepage = "http://www.pygtk.org/"
url = "http://ftp.gnome.org/pub/GNOME/sources/pygtk/2.24/pygtk-2.24.0.tar.gz"
version('2.24.0', 'd27c7f245a9e027f6b6cd9acb7468e36')
extends('python')
depends_on("libffi")
depends_on('cairo')
depends_on('glib')
depends_on('gtkplus')
depends_on('py-pygobject')
depends_on('py-py2cairo')
def install(self, spec, prefix):
configure("--prefix=%s" % prefix)
make()
make("install", parallel=False)

View File

@ -27,22 +27,36 @@
class Stat(Package): class Stat(Package):
"""Library to create, manipulate, and export graphs Graphlib.""" """Library to create, manipulate, and export graphs Graphlib."""
homepage = "http://paradyn.org/STAT/STAT.html" homepage = "http://paradyn.org/STAT/STAT.html"
url = "https://github.com/lee218llnl/stat/archive/v2.0.0.tar.gz" url = "https://github.com/lee218llnl/stat/archive/v2.0.0.tar.gz"
version('2.2.0', '26bd69dd57a15afdd5d0ebdb0b7fb6fc') version('2.2.0', '26bd69dd57a15afdd5d0ebdb0b7fb6fc')
version('2.1.0', 'ece26beaf057aa9134d62adcdda1ba91') version('2.1.0', 'ece26beaf057aa9134d62adcdda1ba91')
version('2.0.0', 'c7494210b0ba26b577171b92838e1a9b') version('2.0.0', 'c7494210b0ba26b577171b92838e1a9b')
version('3.0.0b', '8851912ba40e31cf7be6dde3be8e702c',
url='https://github.com/LLNL/STAT/files/427762/STAT-3.0.0b.tar.gz')
# TODO: dysect requires Dyninst patch for version 3.0.0b
variant('dysect', default=False, description="enable DySectAPI") variant('dysect', default=False, description="enable DySectAPI")
variant('examples', default=False, description="enable examples")
depends_on('autoconf', type='build')
depends_on('automake', type='build')
depends_on('libtool', type='build')
depends_on('libelf') depends_on('libelf')
depends_on('libdwarf') depends_on('libdwarf')
depends_on('dyninst') depends_on('dyninst', when='~dysect')
depends_on('graphlib') depends_on('dyninst@8.2.1+stat_dysect', when='+dysect')
depends_on('graphlib@2.0.0', when='@2.0.0:2.2.0')
depends_on('graphlib@3.0.0', when='@3:')
depends_on('graphviz', type=alldeps) depends_on('graphviz', type=alldeps)
depends_on('launchmon') depends_on('launchmon')
depends_on('mrnet') depends_on('mrnet')
depends_on('python')
depends_on('py-pygtk')
depends_on('swig')
depends_on('mpi', when='+examples')
patch('configure_mpicxx.patch', when='@2.1.0') patch('configure_mpicxx.patch', when='@2.1.0')
@ -50,8 +64,6 @@ def install(self, spec, prefix):
configure_args = [ configure_args = [
"--enable-gui", "--enable-gui",
"--prefix=%s" % prefix, "--prefix=%s" % prefix,
# Examples require MPI: avoid this dependency.
"--disable-examples",
"--with-launchmon=%s" % spec['launchmon'].prefix, "--with-launchmon=%s" % spec['launchmon'].prefix,
"--with-mrnet=%s" % spec['mrnet'].prefix, "--with-mrnet=%s" % spec['mrnet'].prefix,
"--with-graphlib=%s" % spec['graphlib'].prefix, "--with-graphlib=%s" % spec['graphlib'].prefix,
@ -60,7 +72,8 @@ def install(self, spec, prefix):
] ]
if '+dysect' in spec: if '+dysect' in spec:
configure_args.append('--enable-dysectapi') configure_args.append('--enable-dysectapi')
if '~examples' in spec:
configure_args.append('--disable-examples')
configure(*configure_args) configure(*configure_args)
make(parallel=False)
make("install") make("install")