[packages/systemtap] - added dtrace-flexibility patch from Fedora (fixes xorg-xserver build) - release 2
qboosh
qboosh at pld-linux.org
Sun Oct 12 12:21:50 CEST 2014
commit 479427cf69b0142d23506e710587709ebd7e1bee
Author: Jakub Bogusz <qboosh at pld-linux.org>
Date: Sun Oct 12 12:22:18 2014 +0200
- added dtrace-flexibility patch from Fedora (fixes xorg-xserver build)
- release 2
systemtap-dtrace-flexibility.patch | 383 +++++++++++++++++++++++++++++++++++++
systemtap.spec | 4 +-
2 files changed, 386 insertions(+), 1 deletion(-)
---
diff --git a/systemtap.spec b/systemtap.spec
index 2344baa..6bc646c 100644
--- a/systemtap.spec
+++ b/systemtap.spec
@@ -16,7 +16,7 @@ Summary: Instrumentation System
Summary(pl.UTF-8): System oprzyrządowania
Name: systemtap
Version: 2.6
-Release: 1
+Release: 2
License: GPL v2+
Group: Base
Source0: http://sourceware.org/systemtap/ftp/releases/%{name}-%{version}.tar.gz
@@ -26,6 +26,7 @@ Source2: stap-server.tmpfiles
Patch0: %{name}-configure.patch
Patch1: %{name}-build.patch
Patch2: %{name}-rpm5-support.patch
+Patch3: %{name}-dtrace-flexibility.patch
URL: http://sourceware.org/systemtap/
BuildRequires: autoconf >= 2.63
BuildRequires: automake
@@ -220,6 +221,7 @@ śledzącymi.
%setup -q
%patch0 -p1
%patch1 -p1
+%patch3 -p1
%if "%{_rpmversion}" >= "5.0"
%patch2 -p1
%endif
diff --git a/systemtap-dtrace-flexibility.patch b/systemtap-dtrace-flexibility.patch
new file mode 100644
index 0000000..6cf9db0
--- /dev/null
+++ b/systemtap-dtrace-flexibility.patch
@@ -0,0 +1,383 @@
+From c486eff3f809b5ce544d5a032198e7680f2b7f2b Mon Sep 17 00:00:00 2001
+From: Stan Cox <scox at redhat.com>
+Date: Tue, 9 Sep 2014 15:07:44 -0400
+Subject: [PATCH 1/3] Add -fpic -fPIC to the list of accepted but ignored
+ dtrace options.
+
+* dtrace.in (main): Add ignore_options.
+---
+ dtrace.in | 4 +++-
+ testsuite/systemtap.base/dtrace.exp | 8 ++++----
+ 2 files changed, 7 insertions(+), 5 deletions(-)
+
+diff --git a/dtrace.in b/dtrace.in
+index d5f189d4fc9e..2f9fb6307e28 100644
+--- a/dtrace.in
++++ b/dtrace.in
+@@ -305,6 +305,8 @@ def main():
+ s_filename = ""
+ includes = []
+ defines = []
++ ignore_options = ["-64", "-32", "-fpic", "-fPIC"]
++
+ while i < len(sys.argv):
+ if sys.argv[i] == "-o":
+ i += 1
+@@ -330,7 +332,7 @@ def main():
+ HAVE_PYP = False
+ elif sys.argv[i] == "--types":
+ print sys.argv[0] + ": note: obsolete option --types used"
+- elif sys.argv[i] == "-64" or sys.argv[i] == "-32":
++ elif sys.argv[i] in ignore_options:
+ pass # dtrace users sometimes pass these flags
+ elif sys.argv[i] == "--help":
+ dtrace_help()
+diff --git a/testsuite/systemtap.base/dtrace.exp b/testsuite/systemtap.base/dtrace.exp
+index 252dad90ede5..e029748100d6 100644
+--- a/testsuite/systemtap.base/dtrace.exp
++++ b/testsuite/systemtap.base/dtrace.exp
+@@ -53,12 +53,12 @@ set incpath "/tmp/dtrace_inc"
+ # -----------------------------------------------------------------
+ # test command line option and file handling
+
+-verbose -log "$dtrace -G -s $dpath -o XXX.o"
+-catch {exec $dtrace -G -s $dpath -o XXX.o}
++verbose -log "$dtrace -G -64 -fPIC -s $dpath -o XXX.o"
++catch {exec $dtrace -G -64 -fPIC -s $dpath -o XXX.o}
+ if {[file exists XXX.o]} then {
+- pass "dtrace -G -o XXX.o"
++ pass "dtrace -G -64 -fPIC -o XXX.o"
+ } else {
+- fail "dtrace -G -o XXX.o"
++ fail "dtrace -G -64 -fPIC -o XXX.o"
+ }
+ exec rm -f XXX.o
+
+--
+1.9.3
+
+
+From 52cac9d8159a399b824201f4d2c98abe89a01767 Mon Sep 17 00:00:00 2001
+From: Stan Cox <scox at redhat.com>
+Date: Tue, 23 Sep 2014 13:42:54 -0400
+Subject: [PATCH 2/3] Ignore C declarations in .d file and use string pattern
+ matching as a fallback mechanism.
+
+* dtrace.in (_PypProvider): SkipTo the provider{...}
+(main): If pyparsing fails, then fallback to pattern matching.
+
+* dtrace.exp: Add a fallback test.
+---
+ dtrace.in | 39 +++++++++++++++++++++++++++---------
+ testsuite/systemtap.base/dtrace.exp | 40 +++++++++++++++++++++++++++++++++++++
+ 2 files changed, 70 insertions(+), 9 deletions(-)
+
+diff --git a/dtrace.in b/dtrace.in
+index 2f9fb6307e28..04ace92181d9 100644
+--- a/dtrace.in
++++ b/dtrace.in
+@@ -29,13 +29,13 @@ try:
+ from pyparsing import alphas, cStyleComment, delimitedList, Group, \
+ Keyword, lineno, Literal, nestedExpr, nums, oneOf, OneOrMore, \
+ Optional, ParseException, ParserElement, restOfLine, restOfLine, \
+- Suppress, Word, ZeroOrMore
++ Suppress, SkipTo, Word, ZeroOrMore
+ HAVE_PYP = True
+ except ImportError:
+ HAVE_PYP = False
+
+
+-# Common file creation methods for pyparsing and regexparsing
++# Common file creation methods for pyparsing and string pattern matching
+
+ class _HeaderCreator(object):
+ def init_semaphores(self, fdesc):
+@@ -149,7 +149,7 @@ class _PypProvider(_HeaderCreator):
+
+ provider_decl = (PROVIDER + Optional(ident)
+ + lbrace + Group(probe_decls) + rbrace + Optional(semi))
+- dtrace_statement = Group(decls | provider_decl)
++ dtrace_statement = Group (SkipTo("provider", include=False) + provider_decl)
+ self.dtrace_statements = ZeroOrMore(dtrace_statement)
+
+ cplusplus_linecomment = Literal("//") + restOfLine
+@@ -167,7 +167,10 @@ class _PypProvider(_HeaderCreator):
+ for asti in self.ast:
+ if len(asti) == 0:
+ continue
+- elif asti[0] == "provider":
++ # ignore SkipTo token
++ if asti[0] != "provider":
++ del asti[0]
++ if asti[0] == "provider":
+ # list of probes
+ for prb in asti[2]:
+ semaphores_def += self.add_semaphore(asti[1], prb[1])
+@@ -186,15 +189,18 @@ class _PypProvider(_HeaderCreator):
+ self.ast = self.bnf.parseFile(provider).asList()
+ except ParseException, err:
+ if len(self.current_probe):
+- print "%s:%s:%d: syntax error near:\nprobe %s\n" % (sys.argv[0],provider, self.current_lineno, self.current_probe)
++ print "Warning: %s:%s:%d: syntax error near:\nprobe %s\n" % (sys.argv[0],provider, self.current_lineno, self.current_probe)
+ else:
+- print "%s:%s:%d syntax error near:\n%s\n" % (sys.argv[0],provider,err.lineno, err.line)
+- sys.exit(1)
++ print "Warning: %s:%s:%d syntax error near:\n%s\n" % (sys.argv[0],provider,err.lineno, err.line)
++ raise ParseException, err
+
+ probes_def = ""
+ for asti in self.ast:
+ if len(asti) == 0:
+ continue
++ # ignore SkipTo token
++ if asti[0] != "provider":
++ del asti[0]
+ if asti[0] == "provider":
+ # list of probes
+ for prb in asti[2]:
+@@ -369,14 +375,29 @@ def main():
+ providers = _PypProvider()
+ else:
+ providers = _ReProvider()
+- providers.probe_write(s_filename, filename + suffix)
++ while True:
++ try:
++ providers.probe_write(s_filename, filename + suffix)
++ break;
++ # complex C declarations can fool the pyparsing grammar.
++ # we could increase the complexity of the grammar
++ # instead we fall back to string pattern matching
++ except ParseException, err:
++ print "Warning: Proceeding as if --no-pyparsing was given.\n"
++ providers = _ReProvider()
+ elif build_source:
+ if HAVE_PYP:
+ providers = _PypProvider()
+ else:
+ providers = _ReProvider()
+ (ignore, fname) = mkstemp(suffix=".h")
+- providers.probe_write(s_filename, fname)
++ while True:
++ try:
++ providers.probe_write(s_filename, fname)
++ break;
++ except ParseException, err:
++ print "Warning: Proceeding as if --no-pyparsing was given.\n"
++ providers = _ReProvider()
+ if not keep_temps:
+ os.remove(fname)
+ else:
+diff --git a/testsuite/systemtap.base/dtrace.exp b/testsuite/systemtap.base/dtrace.exp
+index e029748100d6..60cab3f5abf2 100644
+--- a/testsuite/systemtap.base/dtrace.exp
++++ b/testsuite/systemtap.base/dtrace.exp
+@@ -207,6 +207,46 @@ if { $ok == 4} {
+ }
+ exec rm -f XXX.h
+
++set ok 0
++set pypath "/tmp/pypath.d"
++set $fp [open $pypath "w"]
++puts $fp "
++#include <sys/types.h>
++
++provider alpha {
++ probe request__start(string, uint8_t, uint16_t, int, void *);
++ probe request__one(string, uint8_t, uint32_t, int, int);
++ probe client__two(int, int);
++ probe client__three(int, string, pid_t, zoneid_t);
++ probe input__stop(int, int, uint32_t, uint32_t, int8_t, uint8_t*, double*);
++};
++
++#ifdef DCL_AFTER_PROVIDER
++typedef unsigned short int __u_short;
++typedef const static unsigned short __u_c_short;
++#endif
++
++#pragma D attributes Unknown provider alpha provider
++"
++close $fp
++verbose -log "$dtrace -C -h -s $pypath -o XXX.h"
++spawn $dtrace -C -DDCL_AFTER_PROVIDER -h -s $pypath -o XXX.h
++expect {
++ -re {Warning.*syntax error} {incr ok; exp_continue}
++ -re {Warning.*--no-pyparsing} {incr ok; exp_continue}
++ eof { }
++}
++catch {close}; catch {wait}
++if {[file exists XXX.h]} then {
++ incr ok;
++}
++if { $ok == 3} {
++ pass "dtrace parser check"
++} else {
++ fail "dtrace parser check $ok"
++}
++exec rm -f XXX.h
++
+ verbose -log "$dtrace -I$incpath -G -s $idpath"
+ catch {exec $dtrace -G -s $dpath}
+ if {[file exists test.o]} then {
+--
+1.9.3
+
+
+From 3525152408f15e23dcffe2371bbd575f1646d691 Mon Sep 17 00:00:00 2001
+From: Stan Cox <scox at redhat.com>
+Date: Thu, 25 Sep 2014 13:47:04 -0400
+Subject: [PATCH 3/3] Add pyparsing / no-parsing compatibility test.
+
+* dtrace.exp: Add pyparsing compatibility test.
+---
+ testsuite/systemtap.base/dtrace.exp | 93 ++++++++++++++++++++++++++++---------
+ 1 file changed, 72 insertions(+), 21 deletions(-)
+
+diff --git a/testsuite/systemtap.base/dtrace.exp b/testsuite/systemtap.base/dtrace.exp
+index 60cab3f5abf2..e455c298737a 100644
+--- a/testsuite/systemtap.base/dtrace.exp
++++ b/testsuite/systemtap.base/dtrace.exp
+@@ -8,6 +8,8 @@ if {[installtest_p]} {
+ set dtrace ../dtrace
+ }
+
++# Create the test .d files
++
+ exec mkdir -p /tmp/dtrace
+
+ set dpath "/tmp/dtrace/test.d"
+@@ -48,6 +50,29 @@ provider tstsyscall
+ "
+ close $fp
+
++set pypath "/tmp/pypath.d"
++set $fp [open $pypath "w"]
++puts $fp "
++#include <sys/types.h>
++
++provider alpha {
++ probe request__start(string, uint8_t, uint16_t, int, void *);
++ probe request__one(string, uint8_t, uint32_t, int, int);
++ probe client__two(int, int);
++ probe client__three(int, string, pid_t, zoneid_t);
++ probe input__stop(int, int, uint32_t, uint32_t, int8_t, uint8_t*, double*);
++};
++
++#ifdef DCL_AFTER_PROVIDER
++typedef unsigned short int __u_short;
++typedef const static unsigned short __u_c_short;
++#endif
++
++#pragma D attributes Unknown provider alpha provider
++"
++close $fp
++
++
+ set incpath "/tmp/dtrace_inc"
+
+ # -----------------------------------------------------------------
+@@ -156,6 +181,9 @@ if { $ok != 0} {
+ fail "dtrace CFLAGS= CC="
+ }
+
++# -----------------------------------------------------------------
++# test -h header file creation
++
+ set ok 0
+ verbose -log "$dtrace -C -h -s $dpath -o XXX.h"
+ catch {exec $dtrace -C -h -s $dpath -o XXX.h}
+@@ -189,6 +217,9 @@ if { $ok == 4} {
+ }
+ exec rm -f XXX.h
+
++# -----------------------------------------------------------------
++# test --no-pyparsing
++
+ set ok 0
+ verbose -log "$dtrace -C --no-pyparsing -I$incpath -h -s $idpath -o XXX.h"
+ catch {exec $dtrace -C --no-pyparsing -I$incpath -h -s $idpath -o XXX.h}
+@@ -207,28 +238,10 @@ if { $ok == 4} {
+ }
+ exec rm -f XXX.h
+
+-set ok 0
+-set pypath "/tmp/pypath.d"
+-set $fp [open $pypath "w"]
+-puts $fp "
+-#include <sys/types.h>
+-
+-provider alpha {
+- probe request__start(string, uint8_t, uint16_t, int, void *);
+- probe request__one(string, uint8_t, uint32_t, int, int);
+- probe client__two(int, int);
+- probe client__three(int, string, pid_t, zoneid_t);
+- probe input__stop(int, int, uint32_t, uint32_t, int8_t, uint8_t*, double*);
+-};
+-
+-#ifdef DCL_AFTER_PROVIDER
+-typedef unsigned short int __u_short;
+-typedef const static unsigned short __u_c_short;
+-#endif
++# -----------------------------------------------------------------
++# test fallback to --no-pyparsing
+
+-#pragma D attributes Unknown provider alpha provider
+-"
+-close $fp
++set ok 0
+ verbose -log "$dtrace -C -h -s $pypath -o XXX.h"
+ spawn $dtrace -C -DDCL_AFTER_PROVIDER -h -s $pypath -o XXX.h
+ expect {
+@@ -247,6 +260,9 @@ if { $ok == 3} {
+ }
+ exec rm -f XXX.h
+
++# -----------------------------------------------------------------
++# test -G object file creation
++
+ verbose -log "$dtrace -I$incpath -G -s $idpath"
+ catch {exec $dtrace -G -s $dpath}
+ if {[file exists test.o]} then {
+@@ -256,5 +272,40 @@ if {[file exists test.o]} then {
+ }
+ exec rm -f test.o
+
++# -----------------------------------------------------------------
++# test dtrace for pyparsing / --no-pyparsing compatibility
++
++set ok 0
++set dfiles {dtrace}
++foreach i $dfiles {
++ verbose -log "$dtrace $srcdir/$subdir/$i.d"
++ catch {exec $dtrace -C -h -s $srcdir/$subdir/$i.d -o $i-1.h}
++ catch {exec $dtrace -C -h --no-pyparsing -s $srcdir/$subdir/$i.d -o $i-2.h}
++ spawn diff -wqs $i-1.h $i-2.h
++ expect {
++ -re {Files.*identical} {incr ok; exp_continue}
++ eof { }
++ }
++ catch {exec $dtrace -C -G -s $srcdir/$subdir/$i.d -o $i-1.o}
++ catch {exec $dtrace -C -G --no-pyparsing -s $srcdir/$subdir/$i.d -o $i-2.o}
++ verbose -log "exec nm $i-1.o > $i-1.od"
++ catch {exec nm $i-1.o > $i-1.od}
++ catch {exec nm $i-2.o > $i-2.od}
++ spawn diff -qs $i-1.od $i-2.od
++ expect {
++ -re {Files.*identical} {incr ok; exp_continue}
++ eof { }
++ }
++ catch {exec /bin/rm $i-1.h $i-2.h $i-1.o $i-2.o}
++}
++if { $ok == 2} {
++ pass "dtrace known uses"
++} else {
++ fail "dtrace known uses ${ok}"
++}
++
++# -----------------------------------------------------------------
++# cleanup
++
+ exec /bin/rm -r /tmp/dtrace /tmp/dtrace_inc
+ # -----------------------------------------------------------------
+--
+1.9.3
+
================================================================
---- gitweb:
http://git.pld-linux.org/gitweb.cgi/packages/systemtap.git/commitdiff/479427cf69b0142d23506e710587709ebd7e1bee
More information about the pld-cvs-commit
mailing list