[PATCH] Append assembler flags on ARM targets
David Holmes
david.holmes at oracle.com
Thu Nov 29 03:57:02 UTC 2018
Hi Jakub,
I have filed:
https://bugs.openjdk.java.net/browse/JDK-8214466
for this issue and I have reviewed (along with Erik) and will sponsor.
Cheers,
David
On 26/11/2018 1:49 am, 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 <linuxtardis at gmail.com>
> # 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.
>
>
>
>
More information about the build-dev
mailing list