mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-11-25 20:03:58 +08:00
locks.h: Use atomic builtins For Linux EABI.
2009-08-12 Andrew Haley <aph@redhat.com> * sysdep/arm/locks.h: Use atomic builtins For Linux EABI. * configure.ac: Add ATOMICSPEC. * libgcj.spec.in: Likewise. * configure.host (arm*-linux*): Add -Wno-abi to cxxflags. (testsuite/libjava.jvmti/jvmti-interp.exp): Likewise. (testsuite/libjava.jvmti/jvmti.exp): Likewise. (testsuite/libjava.jni/jni.exp): Likewise. Set ATOMICSPEC. Set LDFLAGS to work around libtool feature. From-SVN: r150702
This commit is contained in:
parent
b2a58473d7
commit
e8e76230ed
@ -1,3 +1,15 @@
|
||||
2009-08-12 Andrew Haley <aph@redhat.com>
|
||||
|
||||
* sysdep/arm/locks.h: Use atomic builtins For Linux EABI.
|
||||
* configure.ac: Add ATOMICSPEC.
|
||||
* libgcj.spec.in: Likewise.
|
||||
* configure.host (arm*-linux*): Add -Wno-abi to cxxflags.
|
||||
(testsuite/libjava.jvmti/jvmti-interp.exp): Likewise.
|
||||
(testsuite/libjava.jvmti/jvmti.exp): Likewise.
|
||||
(testsuite/libjava.jni/jni.exp): Likewise.
|
||||
Set ATOMICSPEC.
|
||||
Set LDFLAGS to work around libtool feature.
|
||||
|
||||
2009-07-30 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
|
||||
|
||||
* configure.ac (_AC_ARG_VAR_PRECIOUS): Use m4_rename_force.
|
||||
|
4
libjava/configure
vendored
4
libjava/configure
vendored
@ -459,7 +459,7 @@ ac_includes_default="\
|
||||
#endif"
|
||||
|
||||
ac_subdirs_all="$ac_subdirs_all classpath libltdl"
|
||||
ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os build_libsubdir build_subdir host_subdir target_subdir multi_basedir host host_cpu host_vendor host_os target target_cpu target_vendor target_os target_noncanonical LN_S mkinstalldirs ANTLR_JAR CREATE_GJDOC_TRUE CREATE_GJDOC_FALSE JAVA_MAINTAINER_MODE_TRUE JAVA_MAINTAINER_MODE_FALSE CC ac_ct_CC EXEEXT OBJEXT CXX ac_ct_CXX CFLAGS CXXFLAGS LDFLAGS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE AS ac_ct_AS LD ac_ct_LD AR ac_ct_AR RANLIB ac_ct_RANLIB JAR ZIP UNZIP MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT LIBGCJ_CFLAGS LIBGCJ_CXXFLAGS LIBGCJ_JAVAFLAGS LIBGCJ_LD_SYMBOLIC LIBGCJ_LD_SYMBOLIC_FUNCTIONS LIBGCJDEBUG TOOLKIT XLIB_AWT_TRUE XLIB_AWT_FALSE X_AWT_TRUE X_AWT_FALSE GCJ_FOR_ECJX GCJH host_exeext INCLTDL LIBLTDL DIRLTDL LIBTOOL SED EGREP FGREP GREP DUMPBIN ac_ct_DUMPBIN NM OBJDUMP ac_ct_OBJDUMP lt_ECHO DSYMUTIL ac_ct_DSYMUTIL NMEDIT ac_ct_NMEDIT LIPO ac_ct_LIPO OTOOL ac_ct_OTOOL OTOOL64 ac_ct_OTOOL64 CPP CPPFLAGS CXXCPP GCJ GCJFLAGS GCJDEPMODE am__fastdepGCJ_TRUE am__fastdepGCJ_FALSE subdirs TESTSUBDIR_TRUE TESTSUBDIR_FALSE ECJ_BUILD_JAR ECJ_JAR BUILD_ECJ1_TRUE BUILD_ECJ1_FALSE INSTALL_ECJ_JAR_TRUE INSTALL_ECJ_JAR_FALSE JAVA_HOME_SET_TRUE JAVA_HOME_SET_FALSE JAVA_HOME SUPPRESS_LIBGCJ_BC_TRUE SUPPRESS_LIBGCJ_BC_FALSE BUILD_LIBGCJ_REDUCED_REFLECTION_TRUE BUILD_LIBGCJ_REDUCED_REFLECTION_FALSE INTERPRETER INTERPRETER_TRUE INTERPRETER_FALSE LIBFFI LIBFFIINCS PLATFORM USING_WIN32_PLATFORM_TRUE USING_WIN32_PLATFORM_FALSE USING_POSIX_PLATFORM_TRUE USING_POSIX_PLATFORM_FALSE USING_DARWIN_CRT_TRUE USING_DARWIN_CRT_FALSE SYSTEMSPEC ZLIBSPEC ZLIBTESTSPEC X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS extra_ldflags_libjava extra_gij_ldflags extra_ldflags LIBSTDCXXSPEC LIBGCJTESTSPEC GCLIBS GCINCS GCDEPS GCSPEC JC1GCSPEC GCTESTSPEC USING_BOEHMGC_TRUE USING_BOEHMGC_FALSE USING_NOGC_TRUE USING_NOGC_FALSE THREADLIBS THREADINCS THREADDEPS THREADSPEC THREADSTARTFILESPEC THREADLDFLAGS THREADCXXFLAGS USING_POSIX_THREADS_TRUE USING_POSIX_THREADS_FALSE USING_WIN32_THREADS_TRUE USING_WIN32_THREADS_FALSE USING_NO_THREADS_TRUE USING_NO_THREADS_FALSE USE_LIBGCJ_BC_TRUE USE_LIBGCJ_BC_FALSE LIBGCJ_SPEC HASH_SYNC_SPEC USING_GCC_TRUE USING_GCC_FALSE LIBICONV LTLIBICONV PKG_CONFIG GTK_CFLAGS GTK_LIBS GLIB_CFLAGS GLIB_LIBS LIBART_CFLAGS LIBART_LIBS CLASSPATH_SEPARATOR ZLIBS SYS_ZLIBS ZINCS DIVIDESPEC CHECKREFSPEC EXCEPTIONSPEC BACKTRACESPEC IEEESPEC NATIVE_TRUE NATIVE_FALSE ENABLE_SHARED_TRUE ENABLE_SHARED_FALSE NEEDS_DATA_START_TRUE NEEDS_DATA_START_FALSE INSTALL_BINARIES_TRUE INSTALL_BINARIES_FALSE GCC_UNWIND_INCLUDE toolexecdir toolexecmainlibdir toolexeclibdir GCJVERSION dbexecdir gcjsubdir gxx_include_dir libstdcxx_incdir PERL SYSDEP_SOURCES ANONVERSCRIPT_TRUE ANONVERSCRIPT_FALSE LD_START_STATIC_SPEC LD_FINISH_STATIC_SPEC here python_mod_dir python_mod_dir_expanded MAKE INSTALL_AOT_RPM_TRUE INSTALL_AOT_RPM_FALSE CREATE_JAVA_HOME_TRUE CREATE_JAVA_HOME_FALSE gcc_suffix JAVA_VERSION BUILD_VERSION JVM_ROOT_DIR JVM_JAR_ROOT_DIR JVM_JAR_DIR JRE_DIR JRE_LNK SDK_LNK SDK_BIN_DIR SDK_LIB_DIR SDK_INCLUDE_DIR JRE_BIN_DIR JRE_LIB_DIR GCJ_BIN_DIR CPU OS LIBDIR LIBOBJS LTLIBOBJS'
|
||||
ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os build_libsubdir build_subdir host_subdir target_subdir multi_basedir host host_cpu host_vendor host_os target target_cpu target_vendor target_os target_noncanonical LN_S mkinstalldirs ANTLR_JAR CREATE_GJDOC_TRUE CREATE_GJDOC_FALSE JAVA_MAINTAINER_MODE_TRUE JAVA_MAINTAINER_MODE_FALSE CC ac_ct_CC EXEEXT OBJEXT CXX ac_ct_CXX CFLAGS CXXFLAGS LDFLAGS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE AS ac_ct_AS LD ac_ct_LD AR ac_ct_AR RANLIB ac_ct_RANLIB JAR ZIP UNZIP MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT LIBGCJ_CFLAGS LIBGCJ_CXXFLAGS LIBGCJ_JAVAFLAGS LIBGCJ_LD_SYMBOLIC LIBGCJ_LD_SYMBOLIC_FUNCTIONS LIBGCJDEBUG TOOLKIT XLIB_AWT_TRUE XLIB_AWT_FALSE X_AWT_TRUE X_AWT_FALSE GCJ_FOR_ECJX GCJH host_exeext INCLTDL LIBLTDL DIRLTDL LIBTOOL SED EGREP FGREP GREP DUMPBIN ac_ct_DUMPBIN NM OBJDUMP ac_ct_OBJDUMP lt_ECHO DSYMUTIL ac_ct_DSYMUTIL NMEDIT ac_ct_NMEDIT LIPO ac_ct_LIPO OTOOL ac_ct_OTOOL OTOOL64 ac_ct_OTOOL64 CPP CPPFLAGS CXXCPP GCJ GCJFLAGS GCJDEPMODE am__fastdepGCJ_TRUE am__fastdepGCJ_FALSE subdirs TESTSUBDIR_TRUE TESTSUBDIR_FALSE ECJ_BUILD_JAR ECJ_JAR BUILD_ECJ1_TRUE BUILD_ECJ1_FALSE INSTALL_ECJ_JAR_TRUE INSTALL_ECJ_JAR_FALSE JAVA_HOME_SET_TRUE JAVA_HOME_SET_FALSE JAVA_HOME SUPPRESS_LIBGCJ_BC_TRUE SUPPRESS_LIBGCJ_BC_FALSE BUILD_LIBGCJ_REDUCED_REFLECTION_TRUE BUILD_LIBGCJ_REDUCED_REFLECTION_FALSE INTERPRETER INTERPRETER_TRUE INTERPRETER_FALSE LIBFFI LIBFFIINCS PLATFORM USING_WIN32_PLATFORM_TRUE USING_WIN32_PLATFORM_FALSE USING_POSIX_PLATFORM_TRUE USING_POSIX_PLATFORM_FALSE USING_DARWIN_CRT_TRUE USING_DARWIN_CRT_FALSE SYSTEMSPEC ZLIBSPEC ZLIBTESTSPEC X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS extra_ldflags_libjava extra_gij_ldflags extra_ldflags LIBSTDCXXSPEC LIBGCJTESTSPEC GCLIBS GCINCS GCDEPS GCSPEC JC1GCSPEC GCTESTSPEC USING_BOEHMGC_TRUE USING_BOEHMGC_FALSE USING_NOGC_TRUE USING_NOGC_FALSE THREADLIBS THREADINCS THREADDEPS THREADSPEC THREADSTARTFILESPEC THREADLDFLAGS THREADCXXFLAGS USING_POSIX_THREADS_TRUE USING_POSIX_THREADS_FALSE USING_WIN32_THREADS_TRUE USING_WIN32_THREADS_FALSE USING_NO_THREADS_TRUE USING_NO_THREADS_FALSE USE_LIBGCJ_BC_TRUE USE_LIBGCJ_BC_FALSE LIBGCJ_SPEC HASH_SYNC_SPEC USING_GCC_TRUE USING_GCC_FALSE LIBICONV LTLIBICONV PKG_CONFIG GTK_CFLAGS GTK_LIBS GLIB_CFLAGS GLIB_LIBS LIBART_CFLAGS LIBART_LIBS CLASSPATH_SEPARATOR ZLIBS SYS_ZLIBS ZINCS DIVIDESPEC CHECKREFSPEC EXCEPTIONSPEC BACKTRACESPEC IEEESPEC ATOMICSPEC NATIVE_TRUE NATIVE_FALSE ENABLE_SHARED_TRUE ENABLE_SHARED_FALSE NEEDS_DATA_START_TRUE NEEDS_DATA_START_FALSE INSTALL_BINARIES_TRUE INSTALL_BINARIES_FALSE GCC_UNWIND_INCLUDE toolexecdir toolexecmainlibdir toolexeclibdir GCJVERSION dbexecdir gcjsubdir gxx_include_dir libstdcxx_incdir PERL SYSDEP_SOURCES ANONVERSCRIPT_TRUE ANONVERSCRIPT_FALSE LD_START_STATIC_SPEC LD_FINISH_STATIC_SPEC here python_mod_dir python_mod_dir_expanded MAKE INSTALL_AOT_RPM_TRUE INSTALL_AOT_RPM_FALSE CREATE_JAVA_HOME_TRUE CREATE_JAVA_HOME_FALSE gcc_suffix JAVA_VERSION BUILD_VERSION JVM_ROOT_DIR JVM_JAR_ROOT_DIR JVM_JAR_DIR JRE_DIR JRE_LNK SDK_LNK SDK_BIN_DIR SDK_LIB_DIR SDK_INCLUDE_DIR JRE_BIN_DIR JRE_LIB_DIR GCJ_BIN_DIR CPU OS LIBDIR LIBOBJS LTLIBOBJS'
|
||||
ac_subst_files=''
|
||||
ac_pwd=`pwd`
|
||||
|
||||
@ -26421,6 +26421,7 @@ fi
|
||||
|
||||
|
||||
|
||||
|
||||
if test "$NATIVE" = yes; then
|
||||
NATIVE_TRUE=
|
||||
NATIVE_FALSE='#'
|
||||
@ -29989,6 +29990,7 @@ s,@CHECKREFSPEC@,$CHECKREFSPEC,;t t
|
||||
s,@EXCEPTIONSPEC@,$EXCEPTIONSPEC,;t t
|
||||
s,@BACKTRACESPEC@,$BACKTRACESPEC,;t t
|
||||
s,@IEEESPEC@,$IEEESPEC,;t t
|
||||
s,@ATOMICSPEC@,$ATOMICSPEC,;t t
|
||||
s,@NATIVE_TRUE@,$NATIVE_TRUE,;t t
|
||||
s,@NATIVE_FALSE@,$NATIVE_FALSE,;t t
|
||||
s,@ENABLE_SHARED_TRUE@,$ENABLE_SHARED_TRUE,;t t
|
||||
|
@ -1447,6 +1447,7 @@ AC_SUBST(CHECKREFSPEC)
|
||||
AC_SUBST(EXCEPTIONSPEC)
|
||||
AC_SUBST(BACKTRACESPEC)
|
||||
AC_SUBST(IEEESPEC)
|
||||
AC_SUBST(ATOMICSPEC)
|
||||
|
||||
AM_CONDITIONAL(NATIVE, test "$NATIVE" = yes)
|
||||
AM_CONDITIONAL(ENABLE_SHARED, test "$enable_shared" = yes)
|
||||
|
@ -69,6 +69,7 @@ DIVIDESPEC=-fuse-divide-subroutine
|
||||
EXCEPTIONSPEC=-fnon-call-exceptions
|
||||
CHECKREFSPEC=
|
||||
BACKTRACESPEC=
|
||||
ATOMICSPEC=
|
||||
|
||||
# This case statement supports per-CPU defaults.
|
||||
case "${host}" in
|
||||
@ -87,6 +88,11 @@ case "${host}" in
|
||||
libgcj_interpreter=yes
|
||||
sysdeps_dir=arm
|
||||
fallback_backtrace_h=sysdep/arm/backtrace.h
|
||||
libgcj_cxxflags=-Wno-abi
|
||||
ATOMICSPEC=-fuse-atomic-builtins
|
||||
# Work around a strange libtool feature that causes libraries
|
||||
# to be linked with libgcc_s but not libgcc.
|
||||
LDFLAGS="${LDFLAGS} -Wl,-lgcc"
|
||||
;;
|
||||
mips-tx39-*|mipstx39-unknown-*)
|
||||
libgcj_flags="${libgcj_flags} -G 0"
|
||||
|
@ -9,4 +9,4 @@
|
||||
%rename lib liborig
|
||||
*lib: @LD_START_STATIC_SPEC@ @LIBGCJ_SPEC@ @LD_FINISH_STATIC_SPEC@ -lm @LIBICONV@ @GCSPEC@ @THREADSPEC@ @ZLIBSPEC@ @SYSTEMSPEC@ %(libgcc) @LIBSTDCXXSPEC@ %(liborig)
|
||||
|
||||
*jc1: @HASH_SYNC_SPEC@ @DIVIDESPEC@ @CHECKREFSPEC@ @JC1GCSPEC@ @EXCEPTIONSPEC@ @BACKTRACESPEC@ @IEEESPEC@ -fkeep-inline-functions
|
||||
*jc1: @HASH_SYNC_SPEC@ @DIVIDESPEC@ @CHECKREFSPEC@ @JC1GCSPEC@ @EXCEPTIONSPEC@ @BACKTRACESPEC@ @IEEESPEC@ @ATOMICSPEC@ -fkeep-inline-functions
|
||||
|
@ -13,6 +13,59 @@ details. */
|
||||
|
||||
typedef size_t obj_addr_t; /* Integer type big enough for object */
|
||||
/* address. */
|
||||
#if (__ARM_EABI__ && __linux)
|
||||
|
||||
// Atomically replace *addr by new_val if it was initially equal to old.
|
||||
// Return true if the comparison succeeded.
|
||||
// Assumed to have acquire semantics, i.e. later memory operations
|
||||
// cannot execute before the compare_and_swap finishes.
|
||||
inline static bool
|
||||
compare_and_swap(volatile obj_addr_t *addr,
|
||||
obj_addr_t old,
|
||||
obj_addr_t new_val)
|
||||
{
|
||||
return __sync_bool_compare_and_swap(addr, old, new_val);
|
||||
}
|
||||
|
||||
// Set *addr to new_val with release semantics, i.e. making sure
|
||||
// that prior loads and stores complete before this
|
||||
// assignment.
|
||||
inline static void
|
||||
release_set(volatile obj_addr_t *addr, obj_addr_t new_val)
|
||||
{
|
||||
__sync_synchronize();
|
||||
*(addr) = new_val;
|
||||
}
|
||||
|
||||
// Compare_and_swap with release semantics instead of acquire semantics.
|
||||
// On many architecture, the operation makes both guarantees, so the
|
||||
// implementation can be the same.
|
||||
inline static bool
|
||||
compare_and_swap_release(volatile obj_addr_t *addr,
|
||||
obj_addr_t old,
|
||||
obj_addr_t new_val)
|
||||
{
|
||||
return __sync_bool_compare_and_swap(addr, old, new_val);
|
||||
}
|
||||
|
||||
// Ensure that subsequent instructions do not execute on stale
|
||||
// data that was loaded from memory before the barrier.
|
||||
// On X86, the hardware ensures that reads are properly ordered.
|
||||
inline static void
|
||||
read_barrier()
|
||||
{
|
||||
__sync_synchronize();
|
||||
}
|
||||
|
||||
// Ensure that prior stores to memory are completed with respect to other
|
||||
// processors.
|
||||
inline static void
|
||||
write_barrier()
|
||||
{
|
||||
__sync_synchronize();
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
/* Atomic compare and exchange. These sequences are not actually
|
||||
atomic; there is a race if *ADDR != OLD_VAL and we are preempted
|
||||
@ -54,8 +107,8 @@ release_set(volatile obj_addr_t *addr, obj_addr_t new_val)
|
||||
|
||||
inline static bool
|
||||
compare_and_swap_release(volatile obj_addr_t *addr,
|
||||
obj_addr_t old,
|
||||
obj_addr_t new_val)
|
||||
obj_addr_t old,
|
||||
obj_addr_t new_val)
|
||||
{
|
||||
return compare_and_swap(addr, old, new_val);
|
||||
}
|
||||
@ -77,3 +130,4 @@ write_barrier()
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
@ -165,6 +165,11 @@ proc gcj_jni_test_one {file} {
|
||||
lappend cxxflaglist "-lstdc++"
|
||||
}
|
||||
|
||||
# ARM C++ emits an ABI warning for varargs.
|
||||
if { [istarget "arm*"] } {
|
||||
lappend cxxflaglist "-Wno-abi"
|
||||
}
|
||||
|
||||
set cxxflags [join $cxxflaglist]
|
||||
}
|
||||
|
||||
|
@ -32,7 +32,12 @@ proc gcj_jni_compile_c_to_so {file {options {}}} {
|
||||
set so_extension "so"
|
||||
set so_flag "-shared"
|
||||
}
|
||||
|
||||
|
||||
# ARM C++ emits an ABI warning for varargs.
|
||||
if { [istarget "arm*"] } {
|
||||
lappend options "additional_flags=-Wno-abi"
|
||||
}
|
||||
|
||||
set filename [file tail $file]
|
||||
set name [file rootname $filename]
|
||||
set soname lib${name}.${so_extension}
|
||||
|
@ -16,6 +16,10 @@ proc gcj_jvmti_compile_cxx_to_o {file {options {}}} {
|
||||
lappend options "additional_flags=-I$srcdir/.."
|
||||
# Find jvmti.h, jvmti_md.h, jvmti-int.h, jvm.h requirements
|
||||
lappend options "additional_flags=-I$srcdir/../include -I$srcdir/../classpath/include -I$objdir/../include -I$objdir/../../boehm-gc/include "
|
||||
# ARM C++ emits an ABI warning for varargs.
|
||||
if { [istarget "arm*"] } {
|
||||
lappend options "additional_flags=-Wno-abi"
|
||||
}
|
||||
|
||||
set x [libjava_prune_warnings \
|
||||
[target_compile $file $oname object $options]]
|
||||
|
Loading…
Reference in New Issue
Block a user