develooper Front page | perl.perl5.porters | Postings from September 2012

Re: unhappy darwin -Dusemorebits (was Re: Smoke [5.17.4]v5.17.3-184-g699aa44 FAIL(F) darwin 12.1.0 (Intel Core 2 Duo/))

From:
Andy Dougherty
Date:
September 4, 2012 07:03
Subject:
Re: unhappy darwin -Dusemorebits (was Re: Smoke [5.17.4]v5.17.3-184-g699aa44 FAIL(F) darwin 12.1.0 (Intel Core 2 Duo/))
Message ID:
alpine.DEB.2.02.1209040933030.22076@fractal.phys.lafayette.edu
On Tue, 4 Sep 2012, Nicholas Clark wrote:

> On Sun, Sep 02, 2012 at 10:04:03AM +1000, Tony Cook wrote:
> > On Sun, Sep 02, 2012 at 09:28:04AM +1000, Tony Cook wrote:
> > > neptune:perl tony$ grep alignbytes config.sh
> > > alignbytes='8'
> > 
> > Even if I set -Dalignbytes=16, it's ignored, because of:
> > 
> > #if defined(USE_CROSS_COMPILE) || defined(MULTIARCH)
> > #  define MEM_ALIGNBYTES 8
> > #else
> > #define MEM_ALIGNBYTES 16
> > #endif
> > 
> > This appears to have been this way since the dawn of (metaconfig)
> > time.

Just verifying -- If you change that first 8 to a 16, does it work?

> So we should (at least) file this as a bug in RT, as it *is* a bug in our
> code, we don't want it to get lost, and we don't have a good idea how to
> fix it correctly?

Probably.  I think I see how I want to try to fix this, but I'm not 
certain I'll finish it today.

My first thought is that something like this is probably what's needed.  
I haven't tried it out yet, nor gone back through the metaconfig units to
see what I've forgotten, but this might be worth taking for a spin:

diff --git a/Configure b/Configure
index a1ba981..7fa1804 100755
--- a/Configure
+++ b/Configure
@@ -19022,11 +19022,10 @@ Revision='$Revision'
 
 : check for alignment requirements
 echo " "
-case "$usecrosscompile$multiarch" in
+case "$usecrosscompile" in
 *$define*)
 	$cat <<EOM
-You seem to be either cross-compiling or doing a multiarchitecture build,
-skipping the memory alignment check.
+You seem to be cross-compiling.  Skipping the memory alignment check.
 
 EOM
 	case "$alignbytes" in
@@ -19064,6 +19063,17 @@ EOCP
 			dflt='8'
 			echo "(I can't seem to compile the test program...)"
 		fi
+		case "$multiarch" in
+		*$define*)
+			: The usual safe value is 8, but Darwin with -Duselongdouble
+			: needs 16.  Hence, we will take 8 as a minimum, but allow
+			: Configure to pick a larger value if needed.
+			if $test "$dflt" -lt 8; then
+			    dflt='8'
+				echo "Setting alignment to 8 for multiarch support.">&4
+			fi
+			;;
+		esac
 		;;
 	*) dflt="$alignbytes"
 		;;
diff --git a/config_h.SH b/config_h.SH
index 988273f..ff8436c 100755
--- a/config_h.SH
+++ b/config_h.SH
@@ -951,11 +951,7 @@ sed <<!GROK!THIS! >$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un
  *	double, or a long double when applicable. Usual values are 2,
  *	4 and 8. The default is eight, for safety.
  */
-#if defined(USE_CROSS_COMPILE) || defined(MULTIARCH)
-#  define MEM_ALIGNBYTES 8
-#else
 #define MEM_ALIGNBYTES $alignbytes
-#endif
 
 /* ARCHLIB:
  *	This variable, if defined, holds the name of the directory in


-- 
    Andy Dougherty		doughera@lafayette.edu



nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About