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