aboutsummaryrefslogtreecommitdiffstats
path: root/sysutils/cdrtools-devel
diff options
context:
space:
mode:
authordim <dim@FreeBSD.org>2016-12-03 21:36:11 +0800
committerdim <dim@FreeBSD.org>2016-12-03 21:36:11 +0800
commitb5602ec335e1636039437b7418a86b86c981bf84 (patch)
tree0c02d5424645c77fad41beb408976cf1a65bc52f /sysutils/cdrtools-devel
parent81c99e16c4dfb0c66bd7b31b3d0dc015bb095a43 (diff)
downloadfreebsd-ports-gnome-b5602ec335e1636039437b7418a86b86c981bf84.tar.gz
freebsd-ports-gnome-b5602ec335e1636039437b7418a86b86c981bf84.tar.zst
freebsd-ports-gnome-b5602ec335e1636039437b7418a86b86c981bf84.zip
Make frame pointer tracing in cdrtools(-devel) work correctly
The cdrtools ports compile and run a small program ('avoffset') after their configuration phase, which is supposed to figure out the stack direction, frame pointer offset to main(), and so on. This program relies on the compiler not optimizing away certain constructs, so after the import of clang 3.9.0 into base, it got stuck in an endless loop. Fix it by marking a few functions as noinline, and making one particular variable volatile. Reported by: antoine Approved by: marius (maintainer)
Diffstat (limited to 'sysutils/cdrtools-devel')
-rw-r--r--sysutils/cdrtools-devel/files/patch-inc_avoffset.c28
-rw-r--r--sysutils/cdrtools-devel/files/patch-inc_getfp.c37
-rw-r--r--sysutils/cdrtools-devel/files/patch-libschily_getfp.c37
3 files changed, 102 insertions, 0 deletions
diff --git a/sysutils/cdrtools-devel/files/patch-inc_avoffset.c b/sysutils/cdrtools-devel/files/patch-inc_avoffset.c
new file mode 100644
index 000000000000..ab1af624da6d
--- /dev/null
+++ b/sysutils/cdrtools-devel/files/patch-inc_avoffset.c
@@ -0,0 +1,28 @@
+###########################################################################
+# This patch was contributed by Dimitry Andric.
+###########################################################################
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License, Version 1.0 only
+# (the "License"). You may not use this file except in compliance
+# with the License.
+#
+# See the file CDDL.Schily.txt in this distribution for details.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file CDDL.Schily.txt from this distribution.
+###########################################################################
+# The file CDDL.Schily.txt can be found in the original cdrtools tarball,
+# which is mirrored at ftp://ftp.freebsd.org/pub/FreeBSD/distfiles/.
+###########################################################################
+
+--- inc/avoffset.c.orig 2011-11-28 19:28:41 UTC
++++ inc/avoffset.c
+@@ -60,7 +60,7 @@ main(ac, av)
+ {
+ int stdir;
+ #ifdef HAVE_SCANSTACK
+- register struct frame *fp;
++ volatile struct frame *fp;
+ register int i = 0;
+ register int o = 0;
+
diff --git a/sysutils/cdrtools-devel/files/patch-inc_getfp.c b/sysutils/cdrtools-devel/files/patch-inc_getfp.c
new file mode 100644
index 000000000000..089bab7bf79a
--- /dev/null
+++ b/sysutils/cdrtools-devel/files/patch-inc_getfp.c
@@ -0,0 +1,37 @@
+###########################################################################
+# This patch was contributed by Dimitry Andric.
+###########################################################################
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License, Version 1.0 only
+# (the "License"). You may not use this file except in compliance
+# with the License.
+#
+# See the file CDDL.Schily.txt in this distribution for details.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file CDDL.Schily.txt from this distribution.
+###########################################################################
+# The file CDDL.Schily.txt can be found in the original cdrtools tarball,
+# which is mirrored at ftp://ftp.freebsd.org/pub/FreeBSD/distfiles/.
+###########################################################################
+
+--- inc/getfp.c.orig 2015-12-23 20:18:33 UTC
++++ inc/getfp.c
+@@ -80,7 +80,7 @@ getfp()
+ * We need this function to fool GCCs check for returning addresses
+ * from outside the functions local address space.
+ */
+-EXPORT void **
++EXPORT __noinline void **
+ ___fpoff(cp)
+ char *cp;
+ {
+@@ -104,7 +104,7 @@ flush_reg_windows(n)
+
+ #else /* HAVE_SCANSTACK */
+
+-EXPORT void **
++EXPORT __noinline void **
+ getfp()
+ {
+ raisecond("getfp", 0);
diff --git a/sysutils/cdrtools-devel/files/patch-libschily_getfp.c b/sysutils/cdrtools-devel/files/patch-libschily_getfp.c
new file mode 100644
index 000000000000..6e7340f02b77
--- /dev/null
+++ b/sysutils/cdrtools-devel/files/patch-libschily_getfp.c
@@ -0,0 +1,37 @@
+###########################################################################
+# This patch was contributed by Dimitry Andric.
+###########################################################################
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License, Version 1.0 only
+# (the "License"). You may not use this file except in compliance
+# with the License.
+#
+# See the file CDDL.Schily.txt in this distribution for details.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file CDDL.Schily.txt from this distribution.
+###########################################################################
+# The file CDDL.Schily.txt can be found in the original cdrtools tarball,
+# which is mirrored at ftp://ftp.freebsd.org/pub/FreeBSD/distfiles/.
+###########################################################################
+
+--- libschily/getfp.c.orig 2015-12-23 20:18:33 UTC
++++ libschily/getfp.c
+@@ -80,7 +80,7 @@ getfp()
+ * We need this function to fool GCCs check for returning addresses
+ * from outside the functions local address space.
+ */
+-EXPORT void **
++EXPORT __noinline void **
+ ___fpoff(cp)
+ char *cp;
+ {
+@@ -104,7 +104,7 @@ flush_reg_windows(n)
+
+ #else /* HAVE_SCANSTACK */
+
+-EXPORT void **
++EXPORT __noinline void **
+ getfp()
+ {
+ raisecond("getfp", 0);