Leverage cacheTextUpdate for __clear_cache on VxWorks
authorOlivier Hainque <hainque@gcc.gnu.org>
Fri, 21 Sep 2018 13:09:51 +0000 (13:09 +0000)
committerOlivier Hainque <hainque@gcc.gnu.org>
Fri, 21 Sep 2018 13:09:51 +0000 (13:09 +0000)
2018-09-21  Alexandre Oliva  <oliva@adacore.com>

libgcc/
* config/vxcache.c: New file.  Provide __clear_cache, based on
the cacheTextUpdate VxWorks service.
* config/t-vxworks (LIB2ADD): Add vxcache.c.
(LIB2FUNCS_EXCLUDE): Add _clear_cache.
* config/t-vxwoks7: Likewise.
gcc/
* config/vxworks.h (CLEAR_INSN_CACHE): #define to 1.

From-SVN: r264479

gcc/ChangeLog
gcc/config/vxworks.h
libgcc/ChangeLog
libgcc/config/t-vxworks
libgcc/config/t-vxworks7
libgcc/config/vxcache.c [new file with mode: 0644]

index 011d933..b72c326 100644 (file)
@@ -1,5 +1,9 @@
 2018-09-21  Olivier Hainque  <hainque@adacore.com>
 
+       * config/vxworks.h (CLEAR_INSN_CACHE): #define to 1.
+
+2018-09-21  Olivier Hainque  <hainque@adacore.com>
+
        * config/vxworks.h (VXWORKS_LIBGCC_SPEC): Remove -lc_internal.
        Merge block comment with the one ahead of VXWORKS_LIBS_RTP. Then:
        (VXWORKS_LIBS_RTP): Minor reordering.
index 214c616..3ed706e 100644 (file)
@@ -206,6 +206,10 @@ extern void vxworks_asm_out_destructor (rtx symbol, int priority);
 /* The diab linker does not handle .gnu_attribute sections.  */
 #undef HAVE_AS_GNU_ATTRIBUTE
 
+/* We provide our own version of __clear_cache in libgcc, using a separate C
+   file to facilitate #inclusion of VxWorks header files.  */
+#define CLEAR_INSN_CACHE 1
+
 /* Default dwarf control values, for non-gdb debuggers that come with
    VxWorks.  */
 
index b172d71..928b5a8 100644 (file)
@@ -1,3 +1,11 @@
+2018-09-21  Alexandre Oliva  <oliva@adacore.com>
+
+       * config/vxcache.c: New file.  Provide __clear_cache, based on
+       the cacheTextUpdate VxWorks service.
+       * config/t-vxworks (LIB2ADD): Add vxcache.c.
+       (LIB2FUNCS_EXCLUDE): Add _clear_cache.
+       * config/t-vxwoks7: Likewise.
+
 2018-09-21  Martin Liska  <mliska@suse.cz>
 
        * libgcov-driver.c (crc32_unsigned): Remove.
index df70fee..2db8e05 100644 (file)
@@ -1,6 +1,11 @@
 # Don't build libgcc.a with debug info
 LIBGCC2_DEBUG_CFLAGS =
 
+# We provide our own implementation for __clear_cache, using a
+# VxWorks specific entry point.
+LIB2FUNCS_EXCLUDE += _clear_cache
+LIB2ADD += $(srcdir)/config/vxcache.c
+
 # Extra libgcc2 modules used by gthr-vxworks.h functions
 LIB2ADDEH += $(srcdir)/config/vxlib.c $(srcdir)/config/vxlib-tls.c
 
index f0293fe..054ab7c 100644 (file)
@@ -1,6 +1,11 @@
 # Don't build libgcc.a with debug info
 LIBGCC2_DEBUG_CFLAGS =
 
+# We provide our own implementation for __clear_cache, using a
+# VxWorks specific entry point.
+LIB2FUNCS_EXCLUDE += _clear_cache
+LIB2ADD += $(srcdir)/config/vxcache.c
+
 # Extra libgcc2 modules used by gthr-vxworks.h functions
 LIB2ADDEH += $(srcdir)/config/vxlib.c $(srcdir)/config/vxlib-tls.c
 
diff --git a/libgcc/config/vxcache.c b/libgcc/config/vxcache.c
new file mode 100644 (file)
index 0000000..23c72fb
--- /dev/null
@@ -0,0 +1,35 @@
+/* Copyright (C) 2018 Free Software Foundation, Inc.
+   Contributed by Alexandre Oliva <oliva@adacore.com>
+
+This file is part of GCC.
+
+GCC 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, or (at your option) any later
+version.
+
+GCC 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.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+/* Instruction cache invalidation routine using VxWorks' cacheLib.  */
+
+#include <vxWorks.h>
+#include <cacheLib.h>
+
+void
+__clear_cache (char *beg __attribute__((__unused__)),
+              char *end __attribute__((__unused__)))
+{
+  cacheTextUpdate (beg, end - beg);
+}