I think this looks reasonable.

/Erik

On 2018-11-25 07:49, Jakub Vaněk wrote:
Hi,

This patch is a redo of the ARM926EJ-S patch. It adds a mechanism of
passing ARM CPU-specific flags to the assembler. This is achieved
through sharing variables between  ABI setup and ASFLAGS setup. Then
this patch adds pre-existing -march flags in CFLAGS to ASFLAGS as well.

An alternative way of doing this would be to set this directly in
flags-other.m4, but this would lead to setting ARM CPU-specific flags
on multiple places.

It is not possible to simply copy CFLAGS to ASFLAGS, because not all
flags that the C compiler accepts are accepted by the assembler (e.g.
-marm doesn't work).

The reason for this change is that on ARMv5, the non-E variants aren't
supported anymore. This patch doesn't address this issue yet, but it
adds the necessary infrastructure. I believe we need to set -march to
ARMv5TE both in CFLAGS and in ASFLAGS, because the problem is in file
linux_arm_32.s.

This patch in combination with a switch from ARMv5T to ARMv5TE was built 
successfully for the arm-sflt target:
https://ci.adoptopenjdk.net/view/ev3dev/job/openjdk12_build_ev3_linux/21/

I have been successful in building arm-vfp-hflt configuration locally.

Thanks,

Jakub Vanek

# HG changeset patch
# User Jakub Vaněk <[email protected]>
# Date 1543065692 -3600
#      Sat Nov 24 14:21:32 2018 +0100
# Node ID c5ff4e346842d9025e8abdde0cf8c7d33dfd8d82
# Parent  30a02b4e6c06e874ec8735dedb7e894844b1d627
Append assembler flags on ARM targets

diff --git a/make/autoconf/flags-other.m4 b/make/autoconf/flags-
other.m4
--- a/make/autoconf/flags-other.m4
+++ b/make/autoconf/flags-other.m4
@@ -119,6 +119,12 @@
    # Misuse EXTRA_CFLAGS to mimic old behavior
    $2JVM_ASFLAGS="$JVM_BASIC_ASFLAGS ${$2EXTRA_CFLAGS}"
+ if test "x$1" = "xTARGET" && \
+      test "x$TOOLCHAIN_TYPE" = xgcc && \
+      test "x$OPENJDK_TARGET_CPU" = xarm; then
+    $2JVM_ASFLAGS="${$2JVM_ASFLAGS} $ARM_ARCH_TYPE_ASFLAGS
$ARM_FLOAT_TYPE_ASFLAGS"
+  fi
+
    AC_SUBST($2JVM_ASFLAGS)
  ])
diff --git a/make/autoconf/flags.m4 b/make/autoconf/flags.m4
--- a/make/autoconf/flags.m4
+++ b/make/autoconf/flags.m4
@@ -49,38 +49,52 @@
      if test "x$OPENJDK_TARGET_ABI_PROFILE" = xarm-vfp-sflt; then
        ARM_FLOAT_TYPE=vfp-sflt
        ARM_ARCH_TYPE_FLAGS='-march=armv7-a -mthumb'
+      ARM_ARCH_TYPE_ASFLAGS='-march=armv7-a -mthumb'
      elif test "x$OPENJDK_TARGET_ABI_PROFILE" = xarm-vfp-hflt; then
        ARM_FLOAT_TYPE=vfp-hflt
        ARM_ARCH_TYPE_FLAGS='-march=armv7-a -mthumb'
+      ARM_ARCH_TYPE_ASFLAGS='-march=armv7-a -mthumb'
      elif test "x$OPENJDK_TARGET_ABI_PROFILE" = xarm-sflt; then
        ARM_FLOAT_TYPE=sflt
        ARM_ARCH_TYPE_FLAGS='-march=armv5t -marm'
+      ARM_ARCH_TYPE_ASFLAGS='-march=armv5t'
      elif test "x$OPENJDK_TARGET_ABI_PROFILE" = xarmv5-vfp-sflt; then
        ARM_FLOAT_TYPE=vfp-sflt
        ARM_ARCH_TYPE_FLAGS='-march=armv5t -marm'
+      ARM_ARCH_TYPE_ASFLAGS='-march=armv5t'
      elif test "x$OPENJDK_TARGET_ABI_PROFILE" = xarmv6-vfp-hflt; then
        ARM_FLOAT_TYPE=vfp-hflt
        ARM_ARCH_TYPE_FLAGS='-march=armv6 -marm'
+      ARM_ARCH_TYPE_ASFLAGS='-march=armv6'
      elif test "x$OPENJDK_TARGET_ABI_PROFILE" = xaarch64; then
        # No special flags, just need to trigger setting
JDK_ARCH_ABI_PROP_NAME
        ARM_FLOAT_TYPE=
        ARM_ARCH_TYPE_FLAGS=
+      ARM_ARCH_TYPE_ASFLAGS=
      else
        AC_MSG_ERROR([Invalid ABI profile:
"$OPENJDK_TARGET_ABI_PROFILE"])
      fi
if test "x$ARM_FLOAT_TYPE" = xvfp-sflt; then
        ARM_FLOAT_TYPE_FLAGS='-mfloat-abi=softfp -mfpu=vfp
-DFLOAT_ARCH=-vfp-sflt'
+      ARM_FLOAT_TYPE_ASFLAGS="-mfloat-abi=softfp -mfpu=vfp"
      elif test "x$ARM_FLOAT_TYPE" = xvfp-hflt; then
        ARM_FLOAT_TYPE_FLAGS='-mfloat-abi=hard -mfpu=vfp -DFLOAT_ARCH=-
vfp-hflt'
+      ARM_FLOAT_TYPE_ASFLAGS="-mfloat-abi=hard -mfpu=vfp"
      elif test "x$ARM_FLOAT_TYPE" = xsflt; then
        ARM_FLOAT_TYPE_FLAGS='-msoft-float -mfpu=vfp'
+      ARM_FLOAT_TYPE_ASFLAGS="-mfloat-abi=soft -mfpu=vfp"
      fi
+
      AC_MSG_CHECKING([for $ARM_FLOAT_TYPE floating point flags])
      AC_MSG_RESULT([$ARM_FLOAT_TYPE_FLAGS])
+    AC_MSG_CHECKING([for $ARM_FLOAT_TYPE floating point flags for
assembler])
+    AC_MSG_RESULT([$ARM_FLOAT_TYPE_ASFLAGS])
AC_MSG_CHECKING([for arch type flags])
      AC_MSG_RESULT([$ARM_ARCH_TYPE_FLAGS])
+    AC_MSG_CHECKING([for arch type flags for assembler])
+    AC_MSG_RESULT([$ARM_ARCH_TYPE_ASFLAGS])
# Now set JDK_ARCH_ABI_PROP_NAME. This is equivalent to the last
part of the
      # autoconf target triplet.




Reply via email to