[erlang-patches] [PATCH] R13(B02) 64-bit opensolaris support

Björn-Egil Dahlberg <>
Mon Aug 17 12:01:00 CEST 2009


Hi Paul,

Thank you for reporting this issue, I will have a look at it.

Regards,
Björn-Egil
Erlang/OTP

Paul Fisher wrote:
> I have finally had a chance to test 64-bit R13 in our environment and on 
> opensolaris.  The --enable-m64-build option added in R13 has helped the 
> size of the changes, but unfortunately I still need the patch at the end 
> of this mail to build a fully working 64-bit environment.
> 
> When configuring/build like so:
> 
> $ CC=gcc LD=gcc CFLAGS=-O2 LIBS=-lmtmalloc \
>   ./configure --enable-threads --enable-smp-support \
>     --enable-kernel-poll --enable-hipe \
>     --disable-megaco-flex-scanner-drvlineno --without-unixodbc \
>     --enable-m64-build
> 
> The following issues exist:
> 
> 1) --enable-m64-build disables hipe unconditionally
> To my knowledge HiPE works on amd64 solaris 5.11, so disabling this no 
> matter what seems wrong.
> 
> 2) DED_LDFLAGS is set for old solaris ld and not gnu ld or gcc
> The erts/configure(.in) should detect if gcc is being specified as the 
> linker and set the DED_LDFLAGS appropriately, even though DED_LD gets 
> set to $(CC) unconditionally.  Things need to be sensitive to the 
> options differences.
> 
> 3) erl_interface configure.in does not understand --enable-m64-build
> The option needs to be added and the CFLAGS twiddled in the same way as 
> erts/configure.in.
> 
> Here is the patch against R13B02 Aug 12 snapshot that I ended up with (I 
> included the changes to the generated files too, just for convenience):
> 
> --- otp_src_R13B02/erts/configure    2009-08-11 13:01:22.000000000 -0500
> +++ otp_src_R13B02/erts/configure.new    2009-08-13 15:54:04.243098019 
> -0500
> @@ -2807,8 +2807,10 @@
>     { (exit 1); exit 1; }; }
>      fi
>  fi
> -if test X${enable_darwin_64bit} = Xyes -o X${enable_m64_build} = Xyes; 
> then
> +if test X${enable_darwin_64bit} = Xyes; then
>      enable_hipe=no
> +fi
> +if test X${enable_darwin_64bit} = Xyes -o X${enable_m64_build} = Xyes; 
> then
>      case $CFLAGS in
>          *-m64*)
>              ;;
> @@ -20897,9 +20899,16 @@
>          DED_LD_FLAG_RUNTIME_LIBRARY_PATH=
>      ;;
>      solaris2*|sysv4*)
> -        DED_LDFLAGS="-G"
> -        if test X${enable_m64_build} = Xyes; then
> -            DED_LDFLAGS="-64 $DED_LDFLAGS"
> +        if test "x$GCC" = "xyes"; then
> +            DED_LD=gcc
> +            DED_LDFLAGS="-shared"
> +            DED_LDFLAGS_64="-m64"
> +        else
> +            DED_LDFLAGS="-G"
> +            DED_LDFLAGS_64="-64"
> +        fi
> +        if test "X${enable_m64_build}" = "Xyes"; then
> +            DED_LDFLAGS="$DED_LDFLAGS_64 $DED_LDFLAGS"
>          fi
>      ;;
>      aix4*)
> --- otp_src_R13B02/erts/configure.in    2009-06-05 07:53:07.000000000 -0500
> +++ otp_src_R13B02/erts/configure.in.new    2009-08-13 
> 15:54:04.242383252 -0500
> @@ -291,8 +291,10 @@
>          AC_MSG_ERROR([--enable-darwin-64bit only supported on x86 host])
>      fi
>  fi
> -if test X${enable_darwin_64bit} = Xyes -o X${enable_m64_build} = Xyes; 
> then
> +if test X${enable_darwin_64bit} = Xyes; then
>      enable_hipe=no
> +fi
> +if test X${enable_darwin_64bit} = Xyes -o X${enable_m64_build} = Xyes; 
> then
>      case $CFLAGS in
>          *-m64*)
>              ;;
> @@ -2924,9 +2926,17 @@
>          DED_LD_FLAG_RUNTIME_LIBRARY_PATH=
>      ;;
>      solaris2*|sysv4*)
> -        DED_LDFLAGS="-G"
> -        if test X${enable_m64_build} = Xyes; then
> -            DED_LDFLAGS="-64 $DED_LDFLAGS"
> +        if test "x$GCC" = "xyes"; then
> +            DED_LD=gcc
> +            DED_LDFLAGS="-shared"
> +            DED_LDFLAGS_64="-m64"
> +       
> +        elif
> +            DED_LDFLAGS="-G"
> +            DED_LDFLAGS_64="-m64"
> +        fi
> +        if test "X${enable_m64_build}" = "Xyes"; then
> +            DED_LDFLAGS="$DED_LDFLAGS_64 $DED_LDFLAGS"
>          fi
>      ;;
>      aix4*)
> --- otp_src_R13B02/lib/erl_interface/configure    2009-08-11 
> 13:01:14.000000000 -0500
> +++ otp_src_R13B02/lib/erl_interface/configure.new    2009-08-14 
> 08:20:24.804342800 -0500
> @@ -1440,6 +1440,27 @@
>     threads_disabled=no
>  fi;
> 
> +# Check whether --enable-m64-build or --disable-m64-build was given.
> +if test "${enable_m64_build+set}" = set; then
> +  enableval="$enable_m64_build"
> +   case "$enableval" in
> +    no) enable_m64_build=no ;;
> +    *)  enable_m64_build=yes ;;
> +  esac
> +else
> +   enable_m64_build=no
> +fi;
> +
> +if test X${enable_m64_build} = Xyes; then
> +    case $CFLAGS in
> +        *-m64*)
> +            ;;
> +        *)
> +            CFLAGS="-m64 $CFLAGS"
> +            ;;
> +    esac
> +fi
> +
> 
>  ac_ext=c
>  ac_cpp='$CPP $CPPFLAGS'
> --- otp_src_R13B02/lib/erl_interface/configure.in    2009-08-14 
> 08:24:02.056578225 -0500
> +++ otp_src_R13B02/lib/erl_interface/configure.in.new    2009-08-14 
> 08:25:16.412178147 -0500
> @@ -87,6 +87,24 @@
>    esac ],
>  [ threads_disabled=no ])
> 
> +AC_ARG_ENABLE(m64-build,
> +[  --enable-m64-build    build 64bit binaries using the -m64 flag to 
> (g)cc],
> +[ case "$enableval" in
> +    no) enable_m64_build=no ;;
> +    *)  enable_m64_build=yes ;;
> +  esac
> +],enable_m64_build=no)
> +
> +if test X${enable_m64_build} = Xyes; then
> +    case $CFLAGS in
> +        *-m64*)
> +            ;;
> +        *)
> +            CFLAGS="-m64 $CFLAGS"
> +            ;;
> +    esac
> +fi
> +
>  dnl ----------------------------------------------------------------------
>  dnl Checks for programs
>  dnl ----------------------------------------------------------------------
> 
> 
> ________________________________________________________________
> erlang-patches mailing list. See http://www.erlang.org/faq.html
> erlang-patches (at) erlang.org



More information about the erlang-patches mailing list