re PR target/34777 (uClibc-0.9.29 compilation error for sh4 arch with gcc-4.x)
authorOleg Endo <olegendo@gcc.gnu.org>
Mon, 15 Oct 2012 21:59:21 +0000 (21:59 +0000)
committerOleg Endo <olegendo@gcc.gnu.org>
Mon, 15 Oct 2012 21:59:21 +0000 (21:59 +0000)
PR target/34777
* gcc.target/sh/torture/sh-torture.exp: New.
* gcc.target/sh/torture/pr34777.c: New.

From-SVN: r192478

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/sh/torture/pr34777.c [new file with mode: 0644]
gcc/testsuite/gcc.target/sh/torture/sh-torture.exp [new file with mode: 0644]

index 588928a..805bfb2 100644 (file)
@@ -1,3 +1,9 @@
+2012-10-15  Oleg Endo  <olegendo@gcc.gnu.org>
+
+       PR target/34777
+       * gcc.target/sh/torture/sh-torture.exp: New.
+       * gcc.target/sh/torture/pr34777.c: New.
+
 2012-10-15  Matthias Klose  <doko@ubuntu.com>
 
        * lib/target-supports.exp (check_profiling_available): Match
diff --git a/gcc/testsuite/gcc.target/sh/torture/pr34777.c b/gcc/testsuite/gcc.target/sh/torture/pr34777.c
new file mode 100644 (file)
index 0000000..b2ec56a
--- /dev/null
@@ -0,0 +1,30 @@
+/* { dg-do compile { target "sh*-*-*" } } */
+/* { dg-additional-options "-fschedule-insns -fPIC -mprefergot" }  */
+/* { dg-skip-if "" { "sh*-*-*" } { "-m5*" } { "" } }  */
+
+static __inline __attribute__ ((__always_inline__)) void *
+_dl_mmap (void * start, int length, int prot, int flags, int fd,
+         int offset)
+{
+  register long __sc3 __asm__ ("r3") = 90;
+  register long __sc4 __asm__ ("r4") = (long) start;
+  register long __sc5 __asm__ ("r5") = (long) length;
+  register long __sc6 __asm__ ("r6") = (long) prot;
+  register long __sc7 __asm__ ("r7") = (long) flags;
+  register long __sc0 __asm__ ("r0") = (long) fd;
+  register long __sc1 __asm__ ("r1") = (long) offset;
+  __asm__ __volatile__ ("trapa %1"
+                       : "=z" (__sc0)
+                       : "i" (0x10 + 6), "0" (__sc0), "r" (__sc4),
+                         "r" (__sc5), "r" (__sc6), "r" (__sc7),
+                         "r" (__sc3), "r" (__sc1)
+                       : "memory" );
+}
+
+extern int _dl_pagesize;
+void
+_dl_dprintf(int fd, const char *fmt, ...)
+{
+  static char *buf;
+  buf = _dl_mmap ((void *) 0, _dl_pagesize, 0x1 | 0x2, 0x02 | 0x20, -1, 0);
+}
diff --git a/gcc/testsuite/gcc.target/sh/torture/sh-torture.exp b/gcc/testsuite/gcc.target/sh/torture/sh-torture.exp
new file mode 100644 (file)
index 0000000..f025aa3
--- /dev/null
@@ -0,0 +1,41 @@
+#   Copyright (C) 2012 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3.  If not see
+# <http://www.gnu.org/licenses/>.
+
+# GCC testsuite that uses the `gcc-dg.exp' driver, looping over
+# optimization options.
+
+# Exit immediately if this isn't a SH target.
+if { ![istarget sh*-*-*] } then {
+  return
+}
+
+# Load support procs.
+load_lib gcc-dg.exp
+
+# If a testcase doesn't have special options, use these.
+global DEFAULT_CFLAGS
+if ![info exists DEFAULT_CFLAGS] then {
+    set DEFAULT_CFLAGS " -ansi -pedantic-errors"
+}
+
+# Initialize `dg'.
+dg-init
+
+# Main loop.
+gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] $DEFAULT_CFLAGS
+
+# All done.
+dg-finish