[RFC] Configure and testsuite updates for ARM FDPIC target

Message ID 1d9ebec2-8e35-b4b7-6e7e-f3e5fda00250@st.com
State New
Headers show
Series
  • [RFC] Configure and testsuite updates for ARM FDPIC target
Related show

Commit Message

Christophe Lyon May 7, 2018, 12:29 p.m.
Hello,


I am preparing the submission of a patch series to support the FDPIC ABI for Linux on ARM.

During development, we internally used arm-linux-uclibceabi as target name, but I had to change it to handle feedback when I submitted the binutils patches.

These have been merged to binutils master, and use arm-uclinuxfdpiceabi as target name.


Changing the target name in binutils was a bit painful, but the equivalent change in GCC is more invasive: to get the same testsuite results we had with arm-linux-uclibceabi, I not only had to update several tests to accept the additional target, but I also had to edit several configure-related files to activate the same paths we had validated with the previous target name.


Roughly speaking, it is a matter of extending cases where we try to match $target or $host against *-linux*, or $host_os against linux*. In all these cases I conservatively chose to add arm*-*-uclinuxfdpiceabi or uclinuxfdpiceabi to avoid side-effects on other uclinux targets.

I have attached the patch that handles that in the series, to check if this will be acceptable. Indeed, I am surprised by the number of changes involved, and I thought most of the enablement had already been done on other uclinux targets.


Thanks,

Christophe
* libtool.m4: Handle arm*-*-uclinuxfdpiceabi.
	config/
	* futex.m4: Likewise.
	* tls.m4: Likewise.
	gcc/
	* config.gcc: Likewise.

	libatomic/
	* configure: Likewise.
	* configure.tgt: Likewise.

	libgcc/
	* config.host: Likewise.

	libitm/
	* configure: Likewise.
	* configure.tgt: Likewise.

	libstdc++-v3/
	* acinclude.m4: Likewise.
	* configure: Likewise.
	* configure.host: Likewise.

	gcc/testsuite/
	* g++.dg/abi/forced.C: Likewise.
	* g++.dg/abi/guard2.C: Likewise.
	* g++.dg/ext/cleanup-10.C: Likewise.
	* g++.dg/ext/cleanup-11.C: Likewise.
	* g++.dg/ext/cleanup-8.C: Likewise.
	* g++.dg/ext/cleanup-9.C: Likewise.
	* g++.dg/ext/sync-4.C: Likewise.
	* g++.dg/ipa/comdat.C: Likewise.
	* gcc.dg/20041106-1.c: Likewise.
	* gcc.dg/cleanup-10.c: Likewise.
	* gcc.dg/cleanup-11.c: Likewise.
	* gcc.dg/cleanup-8.c: Likewise.
	* gcc.dg/cleanup-9.c: Likewise.
	* gcc.dg/fdata-sections-1.c: Likewise.
	* gcc.dg/fdata-sections-2.c: Likewise.
	* gcc.dg/pr39323-1.c: Likewise.
	* gcc.dg/pr39323-2.c: Likewise.
	* gcc.dg/pr39323-3.c: Likewise.
	* gcc.dg/pr65780-1.c: Likewise.
	* gcc.dg/pr65780-2.c: Likewise.
	* gcc.dg/pr67338.c: Likewise.
	* gcc.dg/pr78185.c: Likewise.
	* gcc.dg/pr83100-1.c: Likewise.
	* gcc.dg/pr83100-4.c: Likewise.
	* gcc.dg/strlenopt-12g.c: Likewise.
	* gcc.dg/strlenopt-14g.c: Likewise.
	* gcc.dg/strlenopt-14gf.c: Likewise.
	* gcc.dg/strlenopt-16g.c: Likewise.
	* gcc.dg/strlenopt-17g.c: Likewise.
	* gcc.dg/strlenopt-18g.c: Likewise.
	* gcc.dg/strlenopt-1f.c: Likewise.
	* gcc.dg/strlenopt-22g.c: Likewise.
	* gcc.dg/strlenopt-2f.c: Likewise.
	* gcc.dg/strlenopt-31g.c: Likewise.
	* gcc.dg/strlenopt-33g.c: Likewise.
	* gcc.dg/strlenopt-4g.c: Likewise.
	* gcc.dg/strlenopt-4gf.c: Likewise.
	* gcc.dg/strncmp-2.c: Likewise.
	* gcc.dg/struct-ret-3.c: Likewise.
	* gcc.dg/torture/pr69760.c: Likewise.
	* gcc.target/arm/atomic-op-seq_cst-3.c: Likewise.
	* gcc.target/arm/div64-unwinding.c: Likewise.
	* gcc.target/arm/pr66912.c: Likewise.
	* gcc.target/arm/stack-checking.c: Likewise.
	* gcc.target/arm/synchronize.c: Likewise.
	* lib/target-supports.exp: Likewise.

Comments

Joseph Myers May 8, 2018, 11:08 p.m. | #1
On Mon, 7 May 2018, Christophe Lyon wrote:

> Roughly speaking, it is a matter of extending cases where we try to match

> $target or $host against *-linux*, or $host_os against linux*. In all these

> cases I conservatively chose to add arm*-*-uclinuxfdpiceabi or

> uclinuxfdpiceabi to avoid side-effects on other uclinux targets.


A lot of cases look like they should apply to all uclinux targets.  I 
think you need to decide case by case whether something should be for 
*-*-uclinux*, or whether it's genuinely specific to e.g. ELF shared 
libraries (in which case this isn't the only such uclinux target either - 
some use FDPIC ELF, some use other formats - but the complete list is 
nonobvious).  I think the default should be to use *-*-uclinux* unless you 
have a concrete reason this would be inappropriate in a particular place.

-- 
Joseph S. Myers
joseph@codesourcery.com
Jeff Law May 22, 2018, 10:42 p.m. | #2
On 05/07/2018 06:29 AM, Christophe Lyon wrote:
> Hello,

> 

> 

> I am preparing the submission of a patch series to support the FDPIC ABI

> for Linux on ARM.

> 

> During development, we internally used arm-linux-uclibceabi as target

> name, but I had to change it to handle feedback when I submitted the

> binutils patches.

> 

> These have been merged to binutils master, and use arm-uclinuxfdpiceabi

> as target name.

> 

> 

> Changing the target name in binutils was a bit painful, but the

> equivalent change in GCC is more invasive: to get the same testsuite

> results we had with arm-linux-uclibceabi, I not only had to update

> several tests to accept the additional target, but I also had to edit

> several configure-related files to activate the same paths we had

> validated with the previous target name.

> 

> 

> Roughly speaking, it is a matter of extending cases where we try to

> match $target or $host against *-linux*, or $host_os against linux*. In

> all these cases I conservatively chose to add arm*-*-uclinuxfdpiceabi or

> uclinuxfdpiceabi to avoid side-effects on other uclinux targets.

> 

> I have attached the patch that handles that in the series, to check if

> this will be acceptable. Indeed, I am surprised by the number of changes

> involved, and I thought most of the enablement had already been done on

> other uclinux targets.

I don't see anything particularly objectionable here.  The ARM
maintainers would have the final say on this.

jeff

Patch

diff --git a/config/futex.m4 b/config/futex.m4
index e95144d..b8ca257 100644
--- a/config/futex.m4
+++ b/config/futex.m4
@@ -9,7 +9,7 @@  AC_DEFUN([GCC_LINUX_FUTEX],[dnl
 GCC_ENABLE(linux-futex,default, ,[use the Linux futex system call],
 	   permit yes|no|default)
 case "$target" in
-  *-linux*)
+  *-linux* | arm*-*-uclinuxfdpiceabi)
     case "$enable_linux_futex" in
       default)
 	# If headers don't have gettid/futex syscalls definition, then
diff --git a/config/tls.m4 b/config/tls.m4
index 4e170c8..6a3a609 100644
--- a/config/tls.m4
+++ b/config/tls.m4
@@ -76,7 +76,7 @@  AC_DEFUN([GCC_CHECK_TLS], [
 	  dnl Shared library options may depend on the host; this check
 	  dnl is only known to be needed for GNU/Linux.
 	  case $host in
-	    *-*-linux*)
+	    *-*-linux* | arm*-*-uclinuxfdpiceabi)
 	      LDFLAGS="-shared -Wl,--no-undefined $LDFLAGS"
 	      ;;
 	  esac
diff --git a/gcc/config.gcc b/gcc/config.gcc
index 0644470..f74bffe 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -744,7 +744,7 @@  case ${target} in
 *-*-fuchsia*)
   native_system_header_dir=/include
   ;;
-*-*-linux* | frv-*-*linux* | *-*-kfreebsd*-gnu | *-*-gnu* | *-*-kopensolaris*-gnu)
+*-*-linux* | frv-*-*linux* | *-*-kfreebsd*-gnu | *-*-gnu* | *-*-kopensolaris*-gnu | arm*-*-uclinuxfdpiceabi)
   extra_options="$extra_options gnu-user.opt"
   gas=yes
   gnu_ld=yes
@@ -753,7 +753,7 @@  case ${target} in
   esac
   tmake_file="t-slibgcc"
   case $target in
-    *-*-linux* | frv-*-*linux* | *-*-kfreebsd*-gnu | *-*-kopensolaris*-gnu)
+    *-*-linux* | frv-*-*linux* | *-*-kfreebsd*-gnu | *-*-kopensolaris*-gnu  | arm*-*-uclinuxfdpiceabi)
       :;;
     *-*-gnu*)
       native_system_header_dir=/include
@@ -773,7 +773,7 @@  case ${target} in
     *-*-*android*)
       tm_defines="$tm_defines DEFAULT_LIBC=LIBC_BIONIC"
       ;;
-    *-*-*uclibc*)
+    *-*-*uclibc*|arm*-*-uclinuxfdpiceabi)
       tm_defines="$tm_defines DEFAULT_LIBC=LIBC_UCLIBC"
       ;;
     *-*-*musl*)
@@ -1124,7 +1124,7 @@  arm*-*-netbsdelf*)
 	tmake_file="${tmake_file} arm/t-arm"
 	target_cpu_cname="arm6"
 	;;
-arm*-*-linux-*)			# ARM GNU/Linux with ELF
+arm*-*-linux-* | arm*-*-uclinuxfdpiceabi)			# ARM GNU/Linux with ELF
 	tm_file="dbxelf.h elfos.h gnu-user.h linux.h linux-android.h glibc-stdint.h arm/elf.h arm/linux-gas.h arm/linux-elf.h"
 	extra_options="${extra_options} linux-android.opt"
 	case $target in
diff --git a/libatomic/configure b/libatomic/configure
index 47a9b98..1c7686b 100755
--- a/libatomic/configure
+++ b/libatomic/configure
@@ -5820,7 +5820,7 @@  irix5* | irix6* | nonstopux*)
   ;;
 
 # This must be Linux ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
+linux* | k*bsd*-gnu | kopensolaris*-gnu | uclinuxfdpiceabi)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
@@ -8306,7 +8306,7 @@  $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
       lt_prog_compiler_static='-non_shared'
       ;;
 
-    linux* | k*bsd*-gnu | kopensolaris*-gnu)
+    linux* | k*bsd*-gnu | kopensolaris*-gnu | uclinuxfdpiceabi)
       case $cc_basename in
       # old Intel for x86_64 which still supported -KPIC.
       ecc*)
@@ -8901,7 +8901,7 @@  _LT_EOF
       archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
       ;;
 
-    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu | uclinuxfdpiceabi)
       tmp_diet=no
       if test "$host_os" = linux-dietlibc; then
 	case $cc_basename in
@@ -10432,7 +10432,7 @@  linux*oldld* | linux*aout* | linux*coff*)
   ;;
 
 # This must be Linux ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
+linux* | k*bsd*-gnu | kopensolaris*-gnu | uclinuxfdpiceabi)
   version_type=linux
   need_lib_prefix=no
   need_version=no
diff --git a/libatomic/configure.tgt b/libatomic/configure.tgt
index 807ef10..38d8aa4 100644
--- a/libatomic/configure.tgt
+++ b/libatomic/configure.tgt
@@ -124,7 +124,7 @@  case "${target}" in
 	config_path="${config_path} linux/aarch64 posix"
 	;;
 
-  arm*-*-linux*)
+  arm*-*-linux*|arm*-*-uclinuxfdpiceabi)
 	# OS support for atomic primitives.
 	config_path="${config_path} linux/arm posix"
 	;;
diff --git a/libgcc/config.host b/libgcc/config.host
index 96d55a4..eb30167 100644
--- a/libgcc/config.host
+++ b/libgcc/config.host
@@ -235,7 +235,7 @@  case ${host} in
   tmake_file="$tmake_file t-crtstuff-pic t-libgcc-pic t-eh-dw2-dip t-slibgcc t-slibgcc-fuchsia"
   extra_parts="crtbegin.o crtend.o"
   ;;
-*-*-linux* | frv-*-*linux* | *-*-kfreebsd*-gnu | *-*-gnu* | *-*-kopensolaris*-gnu)
+*-*-linux* | frv-*-*linux* | *-*-kfreebsd*-gnu | *-*-gnu* | *-*-kopensolaris*-gnu | arm*-*-uclinuxfdpiceabi)
   tmake_file="$tmake_file t-crtstuff-pic t-libgcc-pic t-eh-dw2-dip t-slibgcc t-slibgcc-gld t-slibgcc-elf-ver t-linux"
   extra_parts="crtbegin.o crtbeginS.o crtbeginT.o crtend.o crtendS.o"
   if test x$enable_vtable_verify = xyes; then
@@ -421,7 +421,7 @@  arm*-*-fuchsia*)
 arm*-*-netbsdelf*)
 	tmake_file="$tmake_file arm/t-arm arm/t-netbsd t-slibgcc-gld-nover"
 	;;
-arm*-*-linux*)			# ARM GNU/Linux with ELF
+arm*-*-linux* | arm*-*-uclinuxfdpiceabi)			# ARM GNU/Linux with ELF
 	tmake_file="${tmake_file} arm/t-arm t-fixedpoint-gnu-prefix t-crtfm"
 	tmake_file="${tmake_file} arm/t-elf arm/t-bpabi arm/t-linux-eabi t-slibgcc-libgcc"
 	tm_file="$tm_file arm/bpabi-lib.h"
diff --git a/libitm/configure b/libitm/configure
index d061c8c..97e3a3f 100644
--- a/libitm/configure
+++ b/libitm/configure
@@ -6495,7 +6495,7 @@  irix5* | irix6* | nonstopux*)
   ;;
 
 # This must be Linux ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
+linux* | k*bsd*-gnu | kopensolaris*-gnu | uclinuxfdpiceabi)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
@@ -8982,7 +8982,7 @@  $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
       lt_prog_compiler_static='-non_shared'
       ;;
 
-    linux* | k*bsd*-gnu | kopensolaris*-gnu)
+    linux* | k*bsd*-gnu | kopensolaris*-gnu | uclinuxfdpiceabi)
       case $cc_basename in
       # old Intel for x86_64 which still supported -KPIC.
       ecc*)
@@ -9577,7 +9577,7 @@  _LT_EOF
       archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
       ;;
 
-    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu | uclinuxfdpiceabi)
       tmp_diet=no
       if test "$host_os" = linux-dietlibc; then
 	case $cc_basename in
@@ -11108,7 +11108,7 @@  linux*oldld* | linux*aout* | linux*coff*)
   ;;
 
 # This must be Linux ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
+linux* | k*bsd*-gnu | kopensolaris*-gnu | uclinuxfdpiceabi)
   version_type=linux
   need_lib_prefix=no
   need_version=no
@@ -13009,7 +13009,7 @@  if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
         inherit_rpath_CXX=yes
         ;;
 
-      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+      linux* | k*bsd*-gnu | kopensolaris*-gnu | uclinuxfdpiceabi)
         case $cc_basename in
           KCC*)
 	    # Kuck and Associates, Inc. (KAI) C++ Compiler
@@ -13596,7 +13596,7 @@  interix[3-9]*)
   postdeps_CXX=
   ;;
 
-linux*)
+linux* | uclinuxfdpiceabi)
   case `$CC -V 2>&1 | sed 5q` in
   *Sun\ C*)
     # Sun C++ 5.9
@@ -13847,7 +13847,7 @@  $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
 	    ;;
 	esac
 	;;
-      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+      linux* | k*bsd*-gnu | kopensolaris*-gnu | uclinuxfdpiceabi)
 	case $cc_basename in
 	  KCC*)
 	    # KAI C++ Compiler
@@ -14768,7 +14768,7 @@  linux*oldld* | linux*aout* | linux*coff*)
   ;;
 
 # This must be Linux ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
+linux* | k*bsd*-gnu | kopensolaris*-gnu | uclinuxfdpiceabi)
   version_type=linux
   need_lib_prefix=no
   need_version=no
@@ -16240,7 +16240,7 @@  fi
 
 
 case "$target" in
-  *-linux*)
+  *-linux* | arm*-*-uclinuxfdpiceabi)
     case "$enable_linux_futex" in
       default)
 	# If headers don't have gettid/futex syscalls definition, then
@@ -16363,7 +16363,7 @@  _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
   chktls_save_LDFLAGS="$LDFLAGS"
 	  	  	  case $host in
-	    *-*-linux*)
+	    *-*-linux* | arm*-*-uclinuxfdpiceabi)
 	      LDFLAGS="-shared -Wl,--no-undefined $LDFLAGS"
 	      ;;
 	  esac
diff --git a/libitm/configure.tgt b/libitm/configure.tgt
index 0cbb097..a811a69 100644
--- a/libitm/configure.tgt
+++ b/libitm/configure.tgt
@@ -127,7 +127,7 @@  config_path="$ARCH posix generic"
 
 # Other system configury
 case "${target}" in
-  *-*-linux*)
+  *-*-linux* | arm*-*-uclinuxfdpiceabi)
 	if test "$enable_linux_futex" = yes; then
 	  config_path="linux/$ARCH linux $config_path"
 	fi
diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4
index 3bd669a..16f3c17 100644
--- a/libstdc++-v3/acinclude.m4
+++ b/libstdc++-v3/acinclude.m4
@@ -1403,7 +1403,7 @@  AC_DEFUN([GLIBCXX_ENABLE_LIBSTDCXX_TIME], [
         ac_has_nanosleep=yes
         ac_has_sched_yield=yes
         ;;
-      gnu* | linux* | kfreebsd*-gnu | knetbsd*-gnu)
+      gnu* | linux* | kfreebsd*-gnu | knetbsd*-gnu | uclinuxfdpiceabi)
         AC_MSG_CHECKING([for at least GNU libc 2.17])
         AC_TRY_COMPILE(
           [#include <features.h>],
@@ -1525,7 +1525,7 @@  AC_DEFUN([GLIBCXX_ENABLE_LIBSTDCXX_TIME], [
 
   if test x"$ac_has_clock_monotonic" != x"yes"; then
     case ${target_os} in
-      linux*)
+      linux* | uclinuxfdpiceabi)
 	AC_MSG_CHECKING([for clock_gettime syscall])
 	AC_TRY_COMPILE(
 	  [#include <unistd.h>
@@ -2410,7 +2410,7 @@  AC_DEFUN([GLIBCXX_ENABLE_CLOCALE], [
   # Default to "generic".
   if test $enable_clocale_flag = auto; then
     case ${target_os} in
-      linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu)
+      linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu | uclinuxfdpiceabi)
 	enable_clocale_flag=gnu
 	;;
       darwin*)
@@ -2656,7 +2656,7 @@  AC_DEFUN([GLIBCXX_ENABLE_ALLOCATOR], [
   # Default to "new".
   if test $enable_libstdcxx_allocator_flag = auto; then
     case ${target_os} in
-      linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu)
+      linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu | uclinuxfdpiceabi)
 	enable_libstdcxx_allocator_flag=new
 	;;
       *)
@@ -4291,7 +4291,7 @@  AC_DEFUN([GLIBCXX_ENABLE_FILESYSTEM_TS], [
       freebsd*|netbsd*|openbsd*|dragonfly*|darwin*)
         enable_libstdcxx_filesystem_ts=yes
         ;;
-      gnu* | linux* | kfreebsd*-gnu | knetbsd*-gnu)
+      gnu* | linux* | kfreebsd*-gnu | knetbsd*-gnu | uclinuxfdpiceabi)
         enable_libstdcxx_filesystem_ts=yes
         ;;
       rtems*)
@@ -4428,7 +4428,7 @@  dnl
   AC_MSG_CHECKING([for sendfile that can copy files])
   AC_CACHE_VAL(glibcxx_cv_sendfile, [dnl
     case "${target_os}" in
-      gnu* | linux* | solaris*)
+      gnu* | linux* | solaris* | uclinuxfdpiceabi)
         GCC_TRY_COMPILE_OR_LINK(
           [#include <sys/sendfile.h>],
           [sendfile(1, 2, (off_t*)0, sizeof 1);],
diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure
index 69845f4..d3f57c9 100755
--- a/libstdc++-v3/configure
+++ b/libstdc++-v3/configure
@@ -6411,7 +6411,7 @@  irix5* | irix6* | nonstopux*)
   ;;
 
 # This must be Linux ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
+linux* | k*bsd*-gnu | kopensolaris*-gnu | uclinuxfdpiceabi)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
@@ -8763,7 +8763,7 @@  $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
       lt_prog_compiler_static='-non_shared'
       ;;
 
-    linux* | k*bsd*-gnu | kopensolaris*-gnu)
+    linux* | k*bsd*-gnu | kopensolaris*-gnu | uclinuxfdpiceabi)
       case $cc_basename in
       # old Intel for x86_64 which still supported -KPIC.
       ecc*)
@@ -9358,7 +9358,7 @@  _LT_EOF
       archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
       ;;
 
-    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu | uclinuxfdpiceabi)
       tmp_diet=no
       if test "$host_os" = linux-dietlibc; then
 	case $cc_basename in
@@ -10898,7 +10898,7 @@  linux*oldld* | linux*aout* | linux*coff*)
   ;;
 
 # This must be Linux ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
+linux* | k*bsd*-gnu | kopensolaris*-gnu | uclinuxfdpiceabi)
   version_type=linux
   need_lib_prefix=no
   need_version=no
@@ -12823,7 +12823,7 @@  if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
         inherit_rpath_CXX=yes
         ;;
 
-      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+      linux* | k*bsd*-gnu | kopensolaris*-gnu | uclinuxfdpiceabi)
         case $cc_basename in
           KCC*)
 	    # Kuck and Associates, Inc. (KAI) C++ Compiler
@@ -13410,7 +13410,7 @@  interix[3-9]*)
   postdeps_CXX=
   ;;
 
-linux*)
+linux* | uclinuxfdpiceabi)
   case `$CC -V 2>&1 | sed 5q` in
   *Sun\ C*)
     # Sun C++ 5.9
@@ -13661,7 +13661,7 @@  $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
 	    ;;
 	esac
 	;;
-      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+      linux* | k*bsd*-gnu | kopensolaris*-gnu | uclinuxfdpiceabi)
 	case $cc_basename in
 	  KCC*)
 	    # KAI C++ Compiler
@@ -14582,7 +14582,7 @@  linux*oldld* | linux*aout* | linux*coff*)
   ;;
 
 # This must be Linux ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
+linux* | k*bsd*-gnu | kopensolaris*-gnu | uclinuxfdpiceabi)
   version_type=linux
   need_lib_prefix=no
   need_version=no
@@ -15841,7 +15841,7 @@  fi
   # Default to "generic".
   if test $enable_clocale_flag = auto; then
     case ${target_os} in
-      linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu)
+      linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu | uclinuxfdpiceabi)
 	enable_clocale_flag=gnu
 	;;
       darwin*)
@@ -16258,7 +16258,7 @@  fi
   # Default to "new".
   if test $enable_libstdcxx_allocator_flag = auto; then
     case ${target_os} in
-      linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu)
+      linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu | uclinuxfdpiceabi)
 	enable_libstdcxx_allocator_flag=new
 	;;
       *)
@@ -20534,7 +20534,7 @@  ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
         ac_has_nanosleep=yes
         ac_has_sched_yield=yes
         ;;
-      gnu* | linux* | kfreebsd*-gnu | knetbsd*-gnu)
+      gnu* | linux* | kfreebsd*-gnu | knetbsd*-gnu | uclinuxfdpiceabi)
         { $as_echo "$as_me:${as_lineno-$LINENO}: checking for at least GNU libc 2.17" >&5
 $as_echo_n "checking for at least GNU libc 2.17... " >&6; }
         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -21034,7 +21034,7 @@  $as_echo "$ac_has_nanosleep" >&6; }
 
   if test x"$ac_has_clock_monotonic" != x"yes"; then
     case ${target_os} in
-      linux*)
+      linux* | uclinuxfdpiceabi)
 	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime syscall" >&5
 $as_echo_n "checking for clock_gettime syscall... " >&6; }
 	cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -27926,7 +27926,7 @@  _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
   chktls_save_LDFLAGS="$LDFLAGS"
 	  	  	  case $host in
-	    *-*-linux*)
+	    *-*-linux* | arm*-*-uclinuxfdpiceabi)
 	      LDFLAGS="-shared -Wl,--no-undefined $LDFLAGS"
 	      ;;
 	  esac
@@ -53578,7 +53578,7 @@  _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
   chktls_save_LDFLAGS="$LDFLAGS"
 	  	  	  case $host in
-	    *-*-linux*)
+	    *-*-linux* | arm*-*-uclinuxfdpiceabi)
 	      LDFLAGS="-shared -Wl,--no-undefined $LDFLAGS"
 	      ;;
 	  esac
@@ -59779,7 +59779,7 @@  _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
   chktls_save_LDFLAGS="$LDFLAGS"
 	  	  	  case $host in
-	    *-*-linux*)
+	    *-*-linux* | arm*-*-uclinuxfdpiceabi)
 	      LDFLAGS="-shared -Wl,--no-undefined $LDFLAGS"
 	      ;;
 	  esac
@@ -78376,7 +78376,7 @@  fi
 
 
 case "$target" in
-  *-linux*)
+  *-linux* | arm*-*-uclinuxfdpiceabi)
     case "$enable_linux_futex" in
       default)
 	# If headers don't have gettid/futex syscalls definition, then
@@ -80012,7 +80012,7 @@  $as_echo_n "checking whether to build Filesystem TS support... " >&6; }
       freebsd*|netbsd*|openbsd*|dragonfly*|darwin*)
         enable_libstdcxx_filesystem_ts=yes
         ;;
-      gnu* | linux* | kfreebsd*-gnu | knetbsd*-gnu)
+      gnu* | linux* | kfreebsd*-gnu | knetbsd*-gnu | uclinuxfdpiceabi)
         enable_libstdcxx_filesystem_ts=yes
         ;;
       rtems*)
@@ -80435,7 +80435,7 @@  $as_echo_n "checking for sendfile that can copy files... " >&6; }
   $as_echo_n "(cached) " >&6
 else
       case "${target_os}" in
-      gnu* | linux* | solaris*)
+      gnu* | linux* | solaris* | uclinuxfdpiceabi)
         if test x$gcc_no_link = xyes; then
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
diff --git a/libstdc++-v3/configure.host b/libstdc++-v3/configure.host
index caea9de..af22585 100644
--- a/libstdc++-v3/configure.host
+++ b/libstdc++-v3/configure.host
@@ -261,7 +261,7 @@  case "${host_os}" in
   linux-musl*)
     os_include_dir="os/generic"
     ;;
-  gnu* | linux* | kfreebsd*-gnu)
+  gnu* | linux* | kfreebsd*-gnu | uclinuxfdpiceabi)
     if [ "$uclibc" = "yes" ]; then
       os_include_dir="os/uclibc"
     elif [ "$bionic" = "yes" ]; then
@@ -324,7 +324,7 @@  esac
 # Set any OS-dependent and CPU-dependent bits.
 # THIS TABLE IS SORTED.  KEEP IT THAT WAY.
 case "${host}" in
-  *-*-linux*)
+  *-*-linux* | arm*-*-uclinuxfdpiceabi)
     case "${host_cpu}" in
       i[567]86)
         abi_baseline_pair=i486-linux-gnu
@@ -355,7 +355,7 @@  case "${host}" in
         fi
     esac
     case "${host}" in
-      arm*-*-linux-*)
+      arm*-*-linux-* | arm*-*-uclinuxfdpiceabi)
 	port_specific_symbol_files="\$(srcdir)/../config/os/gnu-linux/arm-eabi-extra.ver"
 	;;
     esac
diff --git a/libtool.m4 b/libtool.m4
index 24d13f3..8792c37 100644
--- a/libtool.m4
+++ b/libtool.m4
@@ -2449,7 +2449,7 @@  linux*oldld* | linux*aout* | linux*coff*)
   ;;
 
 # This must be Linux ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
+linux* | k*bsd*-gnu | kopensolaris*-gnu | uclinuxfdpiceabi)
   version_type=linux
   need_lib_prefix=no
   need_version=no
@@ -3089,7 +3089,7 @@  irix5* | irix6* | nonstopux*)
   ;;
 
 # This must be Linux ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
+linux* | k*bsd*-gnu | kopensolaris*-gnu | uclinuxfdpiceabi)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
@@ -3734,7 +3734,7 @@  m4_if([$1], [CXX], [
 	    ;;
 	esac
 	;;
-      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+      linux* | k*bsd*-gnu | kopensolaris*-gnu | uclinuxfdpiceabi)
 	case $cc_basename in
 	  KCC*)
 	    # KAI C++ Compiler
@@ -4032,7 +4032,7 @@  m4_if([$1], [CXX], [
       _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
       ;;
 
-    linux* | k*bsd*-gnu | kopensolaris*-gnu)
+    linux* | k*bsd*-gnu | kopensolaris*-gnu | uclinuxfdpiceabi)
       case $cc_basename in
       # old Intel for x86_64 which still supported -KPIC.
       ecc*)
@@ -4449,7 +4449,7 @@  _LT_EOF
       _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
       ;;
 
-    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu | uclinuxfdpiceabi)
       tmp_diet=no
       if test "$host_os" = linux-dietlibc; then
 	case $cc_basename in
@@ -5946,7 +5946,7 @@  if test "$_lt_caught_CXX_error" != yes; then
         _LT_TAGVAR(inherit_rpath, $1)=yes
         ;;
 
-      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+      linux* | k*bsd*-gnu | kopensolaris*-gnu | uclinuxfdpiceabi)
         case $cc_basename in
           KCC*)
 	    # Kuck and Associates, Inc. (KAI) C++ Compiler
@@ -6598,7 +6598,7 @@  interix[[3-9]]*)
   _LT_TAGVAR(postdeps,$1)=
   ;;
 
-linux*)
+linux* | uclinuxfdpiceabi)
   case `$CC -V 2>&1 | sed 5q` in
   *Sun\ C*)
     # Sun C++ 5.9
diff --git a/gcc/testsuite/g++.dg/abi/forced.C b/gcc/testsuite/g++.dg/abi/forced.C
index 0e6be28..b842c7c 100644
--- a/gcc/testsuite/g++.dg/abi/forced.C
+++ b/gcc/testsuite/g++.dg/abi/forced.C
@@ -1,4 +1,4 @@ 
-// { dg-do run { target *-*-linux* *-*-gnu* } }
+// { dg-do run { target *-*-linux* *-*-gnu* arm*-*-uclinuxfdpiceabi } }
 // { dg-options "-pthread" }
 
 #include <pthread.h>
diff --git a/gcc/testsuite/g++.dg/abi/guard2.C b/gcc/testsuite/g++.dg/abi/guard2.C
index c35fa7e..fb8d8dc 100644
--- a/gcc/testsuite/g++.dg/abi/guard2.C
+++ b/gcc/testsuite/g++.dg/abi/guard2.C
@@ -1,6 +1,6 @@ 
 // PR c++/41611
 // Test that the guard gets its own COMDAT group.
-// { dg-final { scan-assembler "_ZGVZN1A1fEvE1i,comdat" { target *-*-linux* *-*-gnu* } } }
+// { dg-final { scan-assembler "_ZGVZN1A1fEvE1i,comdat" { target *-*-linux* *-*-gnu* arm*-*-uclinuxfdpiceabi } } }
 
 struct A {
   static int f()
diff --git a/gcc/testsuite/g++.dg/ext/cleanup-10.C b/gcc/testsuite/g++.dg/ext/cleanup-10.C
index 66c7b76..19ceb84 100644
--- a/gcc/testsuite/g++.dg/ext/cleanup-10.C
+++ b/gcc/testsuite/g++.dg/ext/cleanup-10.C
@@ -1,4 +1,4 @@ 
-/* { dg-do run { target hppa*-*-hpux* *-*-linux* *-*-gnu* powerpc*-*-darwin* *-*-darwin[912]* } } */
+/* { dg-do run { target hppa*-*-hpux* *-*-linux* *-*-gnu* powerpc*-*-darwin* *-*-darwin[912]* arm*-*-uclinuxfdpiceabi } } */
 /* { dg-options "-fexceptions -fnon-call-exceptions -O2" } */
 /* Verify that cleanups work with exception handling through signal frames
    on alternate stack.  */
diff --git a/gcc/testsuite/g++.dg/ext/cleanup-11.C b/gcc/testsuite/g++.dg/ext/cleanup-11.C
index 6e96521..9929311 100644
--- a/gcc/testsuite/g++.dg/ext/cleanup-11.C
+++ b/gcc/testsuite/g++.dg/ext/cleanup-11.C
@@ -1,4 +1,4 @@ 
-/* { dg-do run { target hppa*-*-hpux* *-*-linux* *-*-gnu* powerpc*-*-darwin* *-*-darwin[912]* } } */
+/* { dg-do run { target hppa*-*-hpux* *-*-linux* *-*-gnu* powerpc*-*-darwin* *-*-darwin[912]* arm*-*-uclinuxfdpiceabi } } */
 /* { dg-options "-fexceptions -fnon-call-exceptions -O2" } */
 /* Verify that cleanups work with exception handling through realtime signal
    frames on alternate stack.  */
diff --git a/gcc/testsuite/g++.dg/ext/cleanup-8.C b/gcc/testsuite/g++.dg/ext/cleanup-8.C
index ccf9bef..4b746c9 100644
--- a/gcc/testsuite/g++.dg/ext/cleanup-8.C
+++ b/gcc/testsuite/g++.dg/ext/cleanup-8.C
@@ -1,4 +1,4 @@ 
-/* { dg-do run { target hppa*-*-hpux* *-*-linux* *-*-gnu* powerpc*-*-darwin* *-*-darwin[912]* } } */
+/* { dg-do run { target hppa*-*-hpux* *-*-linux* *-*-gnu* powerpc*-*-darwin* *-*-darwin[912]* arm*-*-uclinuxfdpiceabi } } */
 /* { dg-options "-fexceptions -fnon-call-exceptions -O2" } */
 /* Verify that cleanups work with exception handling through signal
    frames.  */
diff --git a/gcc/testsuite/g++.dg/ext/cleanup-9.C b/gcc/testsuite/g++.dg/ext/cleanup-9.C
index dcdfcae..aa7d186 100644
--- a/gcc/testsuite/g++.dg/ext/cleanup-9.C
+++ b/gcc/testsuite/g++.dg/ext/cleanup-9.C
@@ -1,4 +1,4 @@ 
-/* { dg-do run { target hppa*-*-hpux* *-*-linux* *-*-gnu* powerpc*-*-darwin* *-*-darwin[912]* } } */
+/* { dg-do run { target hppa*-*-hpux* *-*-linux* *-*-gnu* powerpc*-*-darwin* *-*-darwin[912]* arm*-*-uclinuxfdpiceabi } } */
 /* { dg-options "-fexceptions -fnon-call-exceptions -O2" } */
 /* Verify that cleanups work with exception handling through realtime
    signal frames.  */
diff --git a/gcc/testsuite/g++.dg/ext/sync-4.C b/gcc/testsuite/g++.dg/ext/sync-4.C
index 47aa1e3..9623f11 100644
--- a/gcc/testsuite/g++.dg/ext/sync-4.C
+++ b/gcc/testsuite/g++.dg/ext/sync-4.C
@@ -1,4 +1,4 @@ 
-/* { dg-do run { target hppa*-*-hpux* *-*-linux* *-*-gnu* powerpc*-*-darwin* *-*-darwin[912]* } } */
+/* { dg-do run { target hppa*-*-hpux* *-*-linux* *-*-gnu* powerpc*-*-darwin* *-*-darwin[912]* arm*-*-uclinuxfdpiceabi } } */
 /* { dg-require-effective-target sync_long_long_runtime } */
 /* { dg-options "-fexceptions -fnon-call-exceptions -O2" } */
 /* { dg-additional-options "-march=pentium" { target { { i?86-*-* x86_64-*-* } && ia32 } } } */
diff --git a/gcc/testsuite/g++.dg/ipa/comdat.C b/gcc/testsuite/g++.dg/ipa/comdat.C
index 1945e32..43151a6 100644
--- a/gcc/testsuite/g++.dg/ipa/comdat.C
+++ b/gcc/testsuite/g++.dg/ipa/comdat.C
@@ -1,4 +1,4 @@ 
-/* { dg-do compile { target *-*-linux* *-*-gnu* } } */
+/* { dg-do compile { target *-*-linux* *-*-gnu* arm*-*-uclinuxfdpiceabi } } */
 /* { dg-options "-O2 -fdump-ipa-comdats"  } */
 #include <stdio.h>
 __attribute__ ((noinline))
diff --git a/gcc/testsuite/gcc.dg/20041106-1.c b/gcc/testsuite/gcc.dg/20041106-1.c
index cba4a06..b7bceba 100644
--- a/gcc/testsuite/gcc.dg/20041106-1.c
+++ b/gcc/testsuite/gcc.dg/20041106-1.c
@@ -1,4 +1,4 @@ 
-/* { dg-do run { target *-*-linux* *-*-gnu* *-*-solaris* } } */
+/* { dg-do run { target *-*-linux* *-*-gnu* *-*-solaris* arm*-*-uclinuxfdpiceabi } } */
 /* { dg-options -O2 } */
 
 #include <sys/types.h>
diff --git a/gcc/testsuite/gcc.dg/cleanup-10.c b/gcc/testsuite/gcc.dg/cleanup-10.c
index 16035b1..ec84054 100644
--- a/gcc/testsuite/gcc.dg/cleanup-10.c
+++ b/gcc/testsuite/gcc.dg/cleanup-10.c
@@ -1,4 +1,4 @@ 
-/* { dg-do run { target hppa*-*-hpux* *-*-linux* *-*-gnu* powerpc*-*-darwin* *-*-darwin[912]* } } */
+/* { dg-do run { target hppa*-*-hpux* *-*-linux* *-*-gnu* powerpc*-*-darwin* *-*-darwin[912]* arm*-*-uclinuxfdpiceabi } } */
 /* { dg-options "-fexceptions -fnon-call-exceptions -O2" } */
 /* Verify that cleanups work with exception handling through signal frames
    on alternate stack.  */
diff --git a/gcc/testsuite/gcc.dg/cleanup-11.c b/gcc/testsuite/gcc.dg/cleanup-11.c
index ccc61ed..82ed835 100644
--- a/gcc/testsuite/gcc.dg/cleanup-11.c
+++ b/gcc/testsuite/gcc.dg/cleanup-11.c
@@ -1,4 +1,4 @@ 
-/* { dg-do run { target hppa*-*-hpux* *-*-linux* *-*-gnu* powerpc*-*-darwin* *-*-darwin[912]* } } */
+/* { dg-do run { target hppa*-*-hpux* *-*-linux* *-*-gnu* powerpc*-*-darwin* *-*-darwin[912]* arm*-*-uclinuxfdpiceabi } } */
 /* { dg-options "-fexceptions -fnon-call-exceptions -O2" } */
 /* Verify that cleanups work with exception handling through realtime signal
    frames on alternate stack.  */
diff --git a/gcc/testsuite/gcc.dg/cleanup-8.c b/gcc/testsuite/gcc.dg/cleanup-8.c
index 553c038..bd3217b 100644
--- a/gcc/testsuite/gcc.dg/cleanup-8.c
+++ b/gcc/testsuite/gcc.dg/cleanup-8.c
@@ -1,4 +1,4 @@ 
-/* { dg-do run { target hppa*-*-hpux* *-*-linux* *-*-gnu* powerpc*-*-darwin* *-*-darwin[912]* } } */
+/* { dg-do run { target hppa*-*-hpux* *-*-linux* *-*-gnu* powerpc*-*-darwin* *-*-darwin[912]* arm*-*-uclinuxfdpiceabi } } */
 /* { dg-options "-fexceptions -fnon-call-exceptions -O2" } */
 /* Verify that cleanups work with exception handling through signal
    frames.  */
diff --git a/gcc/testsuite/gcc.dg/cleanup-9.c b/gcc/testsuite/gcc.dg/cleanup-9.c
index fe28072..3d5c82d 100644
--- a/gcc/testsuite/gcc.dg/cleanup-9.c
+++ b/gcc/testsuite/gcc.dg/cleanup-9.c
@@ -1,4 +1,4 @@ 
-/* { dg-do run { target hppa*-*-hpux* *-*-linux* *-*-gnu* powerpc*-*-darwin* *-*-darwin[912]* } } */
+/* { dg-do run { target hppa*-*-hpux* *-*-linux* *-*-gnu* powerpc*-*-darwin* *-*-darwin[912]* arm*-*-uclinuxfdpiceabi } } */
 /* { dg-options "-fexceptions -fnon-call-exceptions -O2" } */
 /* Verify that cleanups work with exception handling through realtime
    signal frames.  */
diff --git a/gcc/testsuite/gcc.dg/fdata-sections-1.c b/gcc/testsuite/gcc.dg/fdata-sections-1.c
index 51686b9..172e695 100644
--- a/gcc/testsuite/gcc.dg/fdata-sections-1.c
+++ b/gcc/testsuite/gcc.dg/fdata-sections-1.c
@@ -1,7 +1,7 @@ 
 /* PR middle-end/15486 */
 /* Origin: Jonathan Larmour <jifl-bugzilla@jifvik.org> */
 
-/* { dg-do compile { target *-*-linux* *-*-gnu* } } */
+/* { dg-do compile { target *-*-linux* *-*-gnu* arm*-*-uclinuxfdpiceabi } } */
 /* { dg-options "-fdata-sections" } */
 
 int x;
diff --git a/gcc/testsuite/gcc.dg/fdata-sections-2.c b/gcc/testsuite/gcc.dg/fdata-sections-2.c
index dda90ba7..abe6741 100644
--- a/gcc/testsuite/gcc.dg/fdata-sections-2.c
+++ b/gcc/testsuite/gcc.dg/fdata-sections-2.c
@@ -4,7 +4,7 @@ 
 /* This checks that string constants are put in per-function rodata
    sections, so that they can be garbage collected.  */
 
-/* { dg-do compile { target *-*-linux* } } */
+/* { dg-do compile { target *-*-linux* arm*-*-uclinuxfdpiceabi } } */
 /* { dg-options "-O -ffunction-sections -fdata-sections" } */
 
 const char *f1(void) { return "falderalde"; }
diff --git a/gcc/testsuite/gcc.dg/pr39323-1.c b/gcc/testsuite/gcc.dg/pr39323-1.c
index 5e3baec..82f3c7d 100644
--- a/gcc/testsuite/gcc.dg/pr39323-1.c
+++ b/gcc/testsuite/gcc.dg/pr39323-1.c
@@ -1,5 +1,5 @@ 
 /* PR c/39323 */
-/* { dg-do compile { target *-*-linux* *-*-gnu* } } */
+/* { dg-do compile { target *-*-linux* *-*-gnu* arm*-*-uclinuxfdpiceabi } } */
 
 int foo __attribute__ ((aligned(1 << 29))) =  20; /* { dg-error "requested alignment is too large" } */
 typedef int __attribute__ ((aligned(1 << 29))) int29; /* { dg-error "requested alignment is too large" } */
diff --git a/gcc/testsuite/gcc.dg/pr39323-2.c b/gcc/testsuite/gcc.dg/pr39323-2.c
index a870729..fe11c70 100644
--- a/gcc/testsuite/gcc.dg/pr39323-2.c
+++ b/gcc/testsuite/gcc.dg/pr39323-2.c
@@ -1,5 +1,5 @@ 
 /* PR c/39323 */
-/* { dg-do compile { target *-*-linux* *-*-gnu* } } */
+/* { dg-do compile { target *-*-linux* *-*-gnu* arm*-*-uclinuxfdpiceabi } } */
 
 int bar __attribute__ ((aligned(1 << 28))) =  20;
 
diff --git a/gcc/testsuite/gcc.dg/pr39323-3.c b/gcc/testsuite/gcc.dg/pr39323-3.c
index b452d3c..054a6fc 100644
--- a/gcc/testsuite/gcc.dg/pr39323-3.c
+++ b/gcc/testsuite/gcc.dg/pr39323-3.c
@@ -1,5 +1,5 @@ 
 /* PR c/39323 */
-/* { dg-do compile { target *-*-linux* *-*-gnu* } } */
+/* { dg-do compile { target *-*-linux* *-*-gnu* arm*-*-uclinuxfdpiceabi } } */
 
 typedef int __attribute__ ((aligned(1 << 28))) int28;
 int28 foo = 20;
diff --git a/gcc/testsuite/gcc.dg/pr65780-1.c b/gcc/testsuite/gcc.dg/pr65780-1.c
index b586211..d2a2dd7 100644
--- a/gcc/testsuite/gcc.dg/pr65780-1.c
+++ b/gcc/testsuite/gcc.dg/pr65780-1.c
@@ -1,5 +1,5 @@ 
 /* PR target/65780 */
-/* { dg-do link { target *-*-linux* *-*-gnu* } } */
+/* { dg-do link { target *-*-linux* *-*-gnu* arm*-*-uclinuxfdpiceabi } } */
 /* { dg-options "-O2" } */
 
 int optopt;
diff --git a/gcc/testsuite/gcc.dg/pr65780-2.c b/gcc/testsuite/gcc.dg/pr65780-2.c
index bff3323..f0baa65 100644
--- a/gcc/testsuite/gcc.dg/pr65780-2.c
+++ b/gcc/testsuite/gcc.dg/pr65780-2.c
@@ -1,5 +1,5 @@ 
 /* PR target/65780 */
-/* { dg-do link { target *-*-linux* *-*-gnu* } } */
+/* { dg-do link { target *-*-linux* *-*-gnu* arm*-*-uclinuxfdpiceabi } } */
 /* { dg-require-effective-target pie } */
 /* { dg-options "-O2 -fpie" } */
 
diff --git a/gcc/testsuite/gcc.dg/pr67338.c b/gcc/testsuite/gcc.dg/pr67338.c
index 0fdc302..f2fd69a 100644
--- a/gcc/testsuite/gcc.dg/pr67338.c
+++ b/gcc/testsuite/gcc.dg/pr67338.c
@@ -1,4 +1,4 @@ 
 /* PR c/67338 */
-/* { dg-do compile { target *-*-linux* *-*-gnu* } } */
+/* { dg-do compile { target *-*-linux* *-*-gnu* arm*-*-uclinuxfdpiceabi } } */
 
 struct S { __attribute__((aligned (1 << 28))) double a; };
diff --git a/gcc/testsuite/gcc.dg/pr78185.c b/gcc/testsuite/gcc.dg/pr78185.c
index 405f748..04d44c9 100644
--- a/gcc/testsuite/gcc.dg/pr78185.c
+++ b/gcc/testsuite/gcc.dg/pr78185.c
@@ -1,4 +1,4 @@ 
-/* { dg-do run { target *-*-linux* *-*-gnu* } } */
+/* { dg-do run { target *-*-linux* *-*-gnu* arm*-*-uclinuxfdpiceabi } } */
 /* { dg-options "-O" } */
 
 #include <unistd.h>
diff --git a/gcc/testsuite/gcc.dg/pr83100-1.c b/gcc/testsuite/gcc.dg/pr83100-1.c
index 233c1f6..dc7fd5b 100644
--- a/gcc/testsuite/gcc.dg/pr83100-1.c
+++ b/gcc/testsuite/gcc.dg/pr83100-1.c
@@ -1,5 +1,5 @@ 
 /* PR target/83100 */
-/* { dg-do compile { target *-*-linux* *-*-gnu* } } */
+/* { dg-do compile { target *-*-linux* *-*-gnu* arm*-*-uclinuxfdpiceabi } } */
 /* { dg-options "-O2 -fcommon -fdata-sections" } */
 
 const int a;
diff --git a/gcc/testsuite/gcc.dg/pr83100-4.c b/gcc/testsuite/gcc.dg/pr83100-4.c
index bb26735..6677352 100644
--- a/gcc/testsuite/gcc.dg/pr83100-4.c
+++ b/gcc/testsuite/gcc.dg/pr83100-4.c
@@ -1,5 +1,5 @@ 
 /* PR target/83100 */
-/* { dg-do compile { target *-*-linux* *-*-gnu* } } */
+/* { dg-do compile { target *-*-linux* *-*-gnu* arm*-*-uclinuxfdpiceabi } } */
 /* { dg-options "-O2 -fno-common -fdata-sections" } */
 
 const int a;
diff --git a/gcc/testsuite/gcc.dg/strlenopt-12g.c b/gcc/testsuite/gcc.dg/strlenopt-12g.c
index f1dec1f..70bf908 100644
--- a/gcc/testsuite/gcc.dg/strlenopt-12g.c
+++ b/gcc/testsuite/gcc.dg/strlenopt-12g.c
@@ -1,5 +1,5 @@ 
 /* This test needs runtime that provides stpcpy function.  */
-/* { dg-do run { target *-*-linux* *-*-gnu* } } */
+/* { dg-do run { target *-*-linux* *-*-gnu* arm*-*-uclinuxfdpiceabi } } */
 /* { dg-options "-O2" } */
 
 #define USE_GNU
diff --git a/gcc/testsuite/gcc.dg/strlenopt-14g.c b/gcc/testsuite/gcc.dg/strlenopt-14g.c
index 62a83bf..d3605fa 100644
--- a/gcc/testsuite/gcc.dg/strlenopt-14g.c
+++ b/gcc/testsuite/gcc.dg/strlenopt-14g.c
@@ -1,5 +1,5 @@ 
 /* This test needs runtime that provides stpcpy and mempcpy functions.  */
-/* { dg-do run { target *-*-linux* *-*-gnu* } } */
+/* { dg-do run { target *-*-linux* *-*-gnu* arm*-*-uclinuxfdpiceabi } } */
 /* { dg-options "-O2 -fdump-tree-strlen" } */
 /* Bionic targets don't have mempcpy */
 /* { dg-require-effective-target non_bionic } */
diff --git a/gcc/testsuite/gcc.dg/strlenopt-14gf.c b/gcc/testsuite/gcc.dg/strlenopt-14gf.c
index 8b126fc..0cd5d4c 100644
--- a/gcc/testsuite/gcc.dg/strlenopt-14gf.c
+++ b/gcc/testsuite/gcc.dg/strlenopt-14gf.c
@@ -1,6 +1,6 @@ 
 /* This test needs runtime that provides stpcpy, mempcpy and __*_chk
    functions.  */
-/* { dg-do run { target *-*-linux* *-*-gnu* } } */
+/* { dg-do run { target *-*-linux* *-*-gnu* arm*-*-uclinuxfdpiceabi } } */
 /* { dg-options "-O2 -fdump-tree-strlen" } */
 /* Bionic targets don't have mempcpy */
 /* { dg-require-effective-target non_bionic } */
diff --git a/gcc/testsuite/gcc.dg/strlenopt-16g.c b/gcc/testsuite/gcc.dg/strlenopt-16g.c
index 0cf8410..8ff6cc9 100644
--- a/gcc/testsuite/gcc.dg/strlenopt-16g.c
+++ b/gcc/testsuite/gcc.dg/strlenopt-16g.c
@@ -1,5 +1,5 @@ 
 /* This test needs runtime that provides stpcpy function.  */
-/* { dg-do run { target *-*-linux* *-*-gnu* } } */
+/* { dg-do run { target *-*-linux* *-*-gnu* arm*-*-uclinuxfdpiceabi } } */
 /* { dg-options "-O2 -fdump-tree-strlen" } */
 
 #define USE_GNU
diff --git a/gcc/testsuite/gcc.dg/strlenopt-17g.c b/gcc/testsuite/gcc.dg/strlenopt-17g.c
index 184e530..cb97165 100644
--- a/gcc/testsuite/gcc.dg/strlenopt-17g.c
+++ b/gcc/testsuite/gcc.dg/strlenopt-17g.c
@@ -1,5 +1,5 @@ 
 /* This test needs runtime that provides stpcpy function.  */
-/* { dg-do run { target *-*-linux* *-*-gnu* } } */
+/* { dg-do run { target *-*-linux* *-*-gnu* arm*-*-uclinuxfdpiceabi } } */
 /* { dg-options "-O2 -fdump-tree-strlen" } */
 
 #define USE_GNU
diff --git a/gcc/testsuite/gcc.dg/strlenopt-18g.c b/gcc/testsuite/gcc.dg/strlenopt-18g.c
index f734675..ef0f544 100644
--- a/gcc/testsuite/gcc.dg/strlenopt-18g.c
+++ b/gcc/testsuite/gcc.dg/strlenopt-18g.c
@@ -1,5 +1,5 @@ 
 /* This test needs runtime that provides stpcpy function.  */
-/* { dg-do run { target *-*-linux* *-*-gnu* } } */
+/* { dg-do run { target *-*-linux* *-*-gnu* arm*-*-uclinuxfdpiceabi } } */
 /* { dg-options "-O2 -fdump-tree-strlen" } */
 
 #define USE_GNU
diff --git a/gcc/testsuite/gcc.dg/strlenopt-1f.c b/gcc/testsuite/gcc.dg/strlenopt-1f.c
index 856774d..44eb915 100644
--- a/gcc/testsuite/gcc.dg/strlenopt-1f.c
+++ b/gcc/testsuite/gcc.dg/strlenopt-1f.c
@@ -1,5 +1,5 @@ 
 /* This test needs runtime that provides __*_chk functions.  */
-/* { dg-do run { target *-*-linux* *-*-gnu* } } */
+/* { dg-do run { target *-*-linux* *-*-gnu* arm*-*-uclinuxfdpiceabi } } */
 /* { dg-options "-O2 -fdump-tree-strlen" } */
 
 #define FORTIFY_SOURCE 2
diff --git a/gcc/testsuite/gcc.dg/strlenopt-22g.c b/gcc/testsuite/gcc.dg/strlenopt-22g.c
index 9c5d020..75d3b7c 100644
--- a/gcc/testsuite/gcc.dg/strlenopt-22g.c
+++ b/gcc/testsuite/gcc.dg/strlenopt-22g.c
@@ -1,5 +1,5 @@ 
 /* This test needs runtime that provides stpcpy function.  */
-/* { dg-do run { target *-*-linux* *-*-gnu* } } */
+/* { dg-do run { target *-*-linux* *-*-gnu* arm*-*-uclinuxfdpiceabi } } */
 /* { dg-options "-O2 -fdump-tree-strlen" } */
 
 #define USE_GNU
diff --git a/gcc/testsuite/gcc.dg/strlenopt-2f.c b/gcc/testsuite/gcc.dg/strlenopt-2f.c
index 1e915da..1005073 100644
--- a/gcc/testsuite/gcc.dg/strlenopt-2f.c
+++ b/gcc/testsuite/gcc.dg/strlenopt-2f.c
@@ -1,5 +1,5 @@ 
 /* This test needs runtime that provides __*_chk functions.  */
-/* { dg-do run { target *-*-linux* *-*-gnu* } } */
+/* { dg-do run { target *-*-linux* *-*-gnu* arm*-*-uclinuxfdpiceabi } } */
 /* { dg-options "-O2 -fdump-tree-strlen" } */
 
 #define FORTIFY_SOURCE 2
diff --git a/gcc/testsuite/gcc.dg/strlenopt-31g.c b/gcc/testsuite/gcc.dg/strlenopt-31g.c
index 45cc29c..8521bfc 100644
--- a/gcc/testsuite/gcc.dg/strlenopt-31g.c
+++ b/gcc/testsuite/gcc.dg/strlenopt-31g.c
@@ -1,4 +1,4 @@ 
-/* { dg-do run { target *-*-linux* *-*-gnu* } } */
+/* { dg-do run { target *-*-linux* *-*-gnu* arm*-*-uclinuxfdpiceabi } } */
 /* { dg-options "-O2 -fdump-tree-strlen" } */
 
 #define USE_GNU
diff --git a/gcc/testsuite/gcc.dg/strlenopt-33g.c b/gcc/testsuite/gcc.dg/strlenopt-33g.c
index 7d24d2b..af4f3ca 100644
--- a/gcc/testsuite/gcc.dg/strlenopt-33g.c
+++ b/gcc/testsuite/gcc.dg/strlenopt-33g.c
@@ -1,4 +1,4 @@ 
-/* { dg-do run { target *-*-linux* *-*-gnu* } } */
+/* { dg-do run { target *-*-linux* *-*-gnu* arm*-*-uclinuxfdpiceabi } } */
 /* { dg-options "-O2 -fdump-tree-strlen" } */
 
 #define USE_GNU
diff --git a/gcc/testsuite/gcc.dg/strlenopt-4g.c b/gcc/testsuite/gcc.dg/strlenopt-4g.c
index 879d566..263909a 100644
--- a/gcc/testsuite/gcc.dg/strlenopt-4g.c
+++ b/gcc/testsuite/gcc.dg/strlenopt-4g.c
@@ -1,5 +1,5 @@ 
 /* This test needs runtime that provides stpcpy function.  */
-/* { dg-do run { target *-*-linux* *-*-gnu* } } */
+/* { dg-do run { target *-*-linux* *-*-gnu* arm*-*-uclinuxfdpiceabi } } */
 /* { dg-options "-O2 -fdump-tree-strlen" } */
 
 #define USE_GNU
diff --git a/gcc/testsuite/gcc.dg/strlenopt-4gf.c b/gcc/testsuite/gcc.dg/strlenopt-4gf.c
index 7f261b7..cd0caad 100644
--- a/gcc/testsuite/gcc.dg/strlenopt-4gf.c
+++ b/gcc/testsuite/gcc.dg/strlenopt-4gf.c
@@ -1,5 +1,5 @@ 
 /* This test needs runtime that provides stpcpy and __*_chk functions.  */
-/* { dg-do run { target *-*-linux* *-*-gnu* } } */
+/* { dg-do run { target *-*-linux* *-*-gnu* arm*-*-uclinuxfdpiceabi } } */
 /* { dg-options "-O2 -fdump-tree-strlen" } */
 
 #define USE_GNU
diff --git a/gcc/testsuite/gcc.dg/strncmp-2.c b/gcc/testsuite/gcc.dg/strncmp-2.c
index f5555ba..92e872d 100644
--- a/gcc/testsuite/gcc.dg/strncmp-2.c
+++ b/gcc/testsuite/gcc.dg/strncmp-2.c
@@ -1,5 +1,5 @@ 
 /* Test strncmp builtin expansion for compilation and proper execution.  */
-/* { dg-do run { target *-*-linux* *-*-gnu* } } */
+/* { dg-do run { target *-*-linux* *-*-gnu* arm*-*-uclinuxfdpiceabi } } */
 /* { dg-options "-O2" } */
 /* { dg-require-effective-target ptr32plus } */
 
diff --git a/gcc/testsuite/gcc.dg/struct-ret-3.c b/gcc/testsuite/gcc.dg/struct-ret-3.c
index 4083bb4..0232a76 100644
--- a/gcc/testsuite/gcc.dg/struct-ret-3.c
+++ b/gcc/testsuite/gcc.dg/struct-ret-3.c
@@ -1,7 +1,7 @@ 
 /* PR middle-end/31309 */
 /* Origin: Peeter Joot <peeterj@ca.ibm.com> */
 
-/* { dg-do run { target *-*-linux* *-*-gnu* } } */
+/* { dg-do run { target *-*-linux* *-*-gnu* arm*-*-uclinuxfdpiceabi } } */
 /* { dg-add-options stack_size } */
  
 #include <sys/mman.h>
diff --git a/gcc/testsuite/gcc.dg/torture/pr69760.c b/gcc/testsuite/gcc.dg/torture/pr69760.c
index 8f24608..629ee4e 100644
--- a/gcc/testsuite/gcc.dg/torture/pr69760.c
+++ b/gcc/testsuite/gcc.dg/torture/pr69760.c
@@ -1,5 +1,5 @@ 
 /* PR tree-optimization/69760 */
-/* { dg-do run { target { { *-*-linux* *-*-gnu* } && mmap } } } */
+/* { dg-do run { target { { *-*-linux* *-*-gnu* arm*-*-uclinuxfdpiceabi } && mmap } } } */
 /* { dg-options "-O2" } */
 
 #include <unistd.h>
diff --git a/gcc/testsuite/gcc.target/arm/atomic-op-seq_cst-3.c b/gcc/testsuite/gcc.target/arm/atomic-op-seq_cst-3.c
index 58bd941..789d25d 100644
--- a/gcc/testsuite/gcc.target/arm/atomic-op-seq_cst-3.c
+++ b/gcc/testsuite/gcc.target/arm/atomic-op-seq_cst-3.c
@@ -2,7 +2,7 @@ 
 /* { dg-require-effective-target arm_arch_v8m_base_ok } */
 /* { dg-options "-O2" } */
 /* { dg-add-options arm_arch_v8m_base } */
-/* { dg-skip-if "" { arm*-*-uclinuxfdpicceabi } "*" "" } */
+/* { dg-skip-if "" { arm*-*-uclinuxfdpiceabi } "*" "" } */
 
 #include "../aarch64/atomic-op-seq_cst.x"
 
diff --git a/gcc/testsuite/gcc.target/arm/div64-unwinding.c b/gcc/testsuite/gcc.target/arm/div64-unwinding.c
index 7f112ee..dbd036c 100644
--- a/gcc/testsuite/gcc.target/arm/div64-unwinding.c
+++ b/gcc/testsuite/gcc.target/arm/div64-unwinding.c
@@ -1,6 +1,6 @@ 
 /* Performing a 64-bit division should not pull in the unwinder.  */
 
-/* { dg-do run { target { ! *-*-linux* } } } */
+/* { dg-do run { target { { ! *-*-linux* } && { ! arm*-*-uclinuxfdpiceabi } } } } */
 /* { dg-options "-O0" } */
 
 #include <stdlib.h>
diff --git a/gcc/testsuite/gcc.target/arm/pr66912.c b/gcc/testsuite/gcc.target/arm/pr66912.c
index 27e4c45..7e6294c 100644
--- a/gcc/testsuite/gcc.target/arm/pr66912.c
+++ b/gcc/testsuite/gcc.target/arm/pr66912.c
@@ -1,4 +1,4 @@ 
-/* { dg-do compile { target *-*-linux* } } */
+/* { dg-do compile { target *-*-linux* arm*-*-uclinuxfdpiceabi } } */
 /* { dg-options "-O2 -fpic" } */
 
 __attribute__((visibility("protected")))
diff --git a/gcc/testsuite/gcc.target/arm/stack-checking.c b/gcc/testsuite/gcc.target/arm/stack-checking.c
index 4b53bed..f2d981d 100644
--- a/gcc/testsuite/gcc.target/arm/stack-checking.c
+++ b/gcc/testsuite/gcc.target/arm/stack-checking.c
@@ -1,4 +1,4 @@ 
-/* { dg-do run { target { *-*-linux* } } } */
+/* { dg-do run { target { *-*-linux* arm*-*-uclinuxfdpiceabi } } } */
 /* { dg-require-stack-check "" } */
 /* { dg-options "-fstack-check" } */
 
diff --git a/gcc/testsuite/gcc.target/arm/synchronize.c b/gcc/testsuite/gcc.target/arm/synchronize.c
index 7ef10e2..b201481 100644
--- a/gcc/testsuite/gcc.target/arm/synchronize.c
+++ b/gcc/testsuite/gcc.target/arm/synchronize.c
@@ -1,4 +1,4 @@ 
-/* { dg-final { scan-assembler "__sync_synchronize|dmb|mcr" { target arm*-*-linux-* } } } */
+/* { dg-final { scan-assembler "__sync_synchronize|dmb|mcr" { target arm*-*-linux-* arm*-*-uclinuxfdpiceabi } } } */
 
 void *foo (void)
 {
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index 8479290..c1d3f11 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -1183,6 +1183,7 @@  proc check_effective_target_pie { } {
 	 || [istarget *-*-dragonfly*]
 	 || [istarget *-*-freebsd*]
 	 || [istarget *-*-linux*]
+	 || [istarget arm*-*-uclinuxfdpiceabi]
 	 || [istarget *-*-gnu*] } {
 	return 1;
     }
@@ -7353,6 +7354,7 @@  proc check_effective_target_sync_long_long_runtime { } {
 	      } ""
 	  }])
 	 || [istarget aarch64*-*-*]
+	 || [istarget arm*-*-uclinuxfdpiceabi]
 	 || ([istarget arm*-*-linux-*]
 	     && [check_runtime sync_longlong_runtime {
 		 #include <stdlib.h>
@@ -7429,6 +7431,7 @@  proc check_effective_target_sync_int_long { } {
 	     || [istarget aarch64*-*-*]
 	     || [istarget alpha*-*-*] 
 	     || [istarget arm*-*-linux-*] 
+	     || [istarget arm*-*-uclinuxfdpiceabi] 
 	     || ([istarget arm*-*-*]
 		 && [check_effective_target_arm_acq_rel])
 	     || [istarget bfin*-*linux*]
@@ -7464,6 +7467,7 @@  proc check_effective_target_sync_char_short { } {
 	     || [istarget i?86-*-*] || [istarget x86_64-*-*]
 	     || [istarget alpha*-*-*] 
 	     || [istarget arm*-*-linux-*] 
+	     || [istarget arm*-*-uclinuxfdpiceabi] 
 	     || ([istarget arm*-*-*]
 		 && [check_effective_target_arm_acq_rel])
 	     || [istarget hppa*-*linux*]