Index: main/set_soenv.in =================================================================== --- main/set_soenv.in (révision 1751914) +++ main/set_soenv.in (copie de travail) @@ -74,7 +74,7 @@ $BUILD_SOSL_RELEASE, $RSC_ONCE ); # # Platform dependent constant values. -my ( $BIG_SVX, $COM, $ARCH, $CPU, $CPUNAME, $CVER, $GLIBC, $GUI, $GUIBASE, +my ( $BIG_SVX, $COM, $ARCH, $CPU, $CPUNAME, $ARM_FLAVOUR $CVER, $GLIBC, $GUI, $GUIBASE, $GVER, $OS, $OSVERSION, $OUTPATH, $INPATH, $PATH_SEPERATOR, $DYNAMIC_CRT, $SET_EXCEPTIONS, $use_shl_versions, $CDPATHx, $JRELIBDIR, $JRETOOLKITDIR, $JRETHREADDIR, @@ -613,10 +613,21 @@ } elsif ($platform =~ m/^arm.*?l-/) { print "Setting Linux ARM specific values... "; + $ARM_FLAVOUR = `if test -x "/lib/ld-linux-armhf.so.3" ; then echo armhf ; else echo arm ; fi`; + chomp( $ARM_FLAVOUR ) $outfile = "LinuxARMEnv.Set"; $CPU = "R"; $CPUNAME = "ARM"; - $OUTPATH = "unxlngr"; + if ( $ARM_FLAVOUR =~ m/armhf/ ) + { + $EPM_FLAGS = "-a armhf"; + $OUTPATH = "unxlngrh"; + } + else + { + $EPM_FLAGS = "-a armel"; + $OUTPATH = "unxlngr"; + } $JRELIBDIR = '$JAVA_HOME'.$ds."jre".$ds."lib".$ds."arm"; $JRETOOLKITDIR = '$JAVA_HOME'.$ds."jre".$ds."lib".$ds."arm".$ds."server"; $JRETHREADDIR = '$JAVA_HOME'.$ds."jre".$ds."lib".$ds."arm".$ds."native_threads"; @@ -1717,6 +1728,7 @@ ToFile( "use_shl_versions", $use_shl_versions, "e" ); ToFile( "FLIPCMD", $FLIPCMD, "e" ); ToFile( "ARM_TARGET", "@ARM_TARGET@", "e" ); +ToFile( "ARM_FLAVOUR", "@ARM_FLAVOUR@", "e" ); if ( $platform =~ m/darwin/ ) { # MAXOSX_DEPLOYMENT_TARGET : The minimum version required to run the build, diff -Naur main/solenv/inc/unxlngr.mk main/solenv/inc/unxlngr.mk --- main/solenv/inc/unxlngr.mk 2016-07-12 18:57:45.000000000 +0200 +++ main/solenv/inc/unxlngr.mk 2016-07-12 14:55:08.634961380 +0200 @@ -29,18 +29,29 @@ CFLAGS+=-fno-omit-frame-pointer DLLPOSTFIX= +.IF "$(ARM_FLAVOUR)" == "armhf" +FLOAT_ABI=hard +.ELSE +FLOAT_ABI=softfp +.ENDIF + .IF "$(ARM_TARGET)" == "ARMV4T" ARCH_FLAGS+=-march=armv4t CDEFS+=-DARMV4T .ENDIF +.IF "$(ARM_TARGET)" == "ARMV5" +ARCH_FLAGS+=-march=armv4t -mabi=aapcs -mfloat-abi=softfp +CDEFS+=-DARMV5 +.ENDIF + .IF "$(ARM_TARGET)" == "ARMV6" -ARCH_FLAGS+=-march=armv6 +ARCH_FLAGS+=-march=armv6 -mfloat-abi=softfp CDEFS+=-DARMV6 .ENDIF .IF "$(ARM_TARGET)" == "ARMV7" -ARCH_FLAGS+=-march=armv7-a -mtune=cortex-a8 -mfpu=neon +ARCH_FLAGS+=-march=armv7-a -mtune=cortex-a8 -mfpu=neon -mfloat-abi=$(FLOAT_ABI) CDEFS+=-DARMV7 .ENDIF Index: main/sal/osl/unx/interlck.c =================================================================== --- main/sal/osl/unx/interlck.c (révision 1751914) +++ main/sal/osl/unx/interlck.c (copie de travail) @@ -130,6 +130,7 @@ return nCount; } + #elif defined ( GCC ) && defined ( ARM ) /*****************************************************************************/ @@ -141,12 +142,15 @@ register oslInterlockedCount nCount __asm__ ("r1"); int nResult; + // Added a line which includes memory barriers to make it SMP-safe (as suggested by Jani Monoses) __asm__ __volatile__ ( +" dmb\n" "1: ldrex %0, [%3]\n" " add %0, %0, #1\n" " strex %1, %0, [%3]\n" " teq %1, #0\n" " bne 1b" +" dmb\n" : "=&r" (nCount), "=&r" (nResult), "=m" (*pCount) : "r" (pCount) : "memory"); @@ -164,11 +168,13 @@ int nResult; __asm__ __volatile__ ( +" dmb\n" "0: ldrex %0, [%3]\n" " sub %0, %0, #1\n" " strex %1, %0, [%3]\n" " teq %1, #0\n" " bne 0b" +" dmb\n" : "=&r" (nCount), "=&r" (nResult), "=m" (*pCount) : "r" (pCount) : "memory"); Index: main/configure.ac =================================================================== --- main/configure.ac (révision 1751914) +++ main/configure.ac (copie de travail) @@ -920,12 +920,13 @@ [ --arm-target The minimal targeted arm processor used for the build environment. Cases : - arm-target < 6 : armv4t compatibility + arm-target < 5 : armv4t compatibility + arm-target = 5 : exact armv5 compatibility arm-target = 6 : exact armv6 compatibility - arm-target > 6 : armv7-a compatibility + arm-target >= 7 : armv7-a compatibility (soft or hard float abi) Usage: --with-arm-target=7 -],with_arm_target=$withval,with_arm_target=4) +],with_arm_target=$withval,with_arm_target=7) AC_ARG_WITH(rat-scan, [ --with-rat-scan Scan source code for license headers. Use as --with-rat-scan to automatically download pre-built Rat binaries. @@ -5916,10 +5917,12 @@ if test "$_os" = "Linux" && echo "$build_cpu" | $GREP -q arm; then # default value - ARM_TARGET=ARMV4T + ARM_TARGET=ARMV7 AC_MSG_CHECKING([which ARM processor optimization to use]) - if test "$with_arm_target" -lt "6"; then + if test "$with_arm_target" -lt "5"; then ARM_TARGET=ARMV4T + elif test "$with_arm_target" = "5"; then + ARM_TARGET=ARMV5 elif test "$with_arm_target" = "6"; then ARM_TARGET=ARMV6 elif test "$with_arm_target" -gt "6"; then