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 011d933c0717c587ceb692957788ac5a99e1ddcc..b72c326c153887b39505fba4947ac1436d9cf89a 100644 (file)
@@ -1,3 +1,7 @@
+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.
index 214c6161343e89e482ee654387fd6455d64fa496..3ed706e92b3dcfc84a1c2e693b0beda6fb29c8c3 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 b172d714851585633c2a4bb1ede7b026cccc13a0..928b5a86ac138d58f76e9f96260994de9a080c16 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 df70feecef3f68850888013fa713da2029573e32..2db8e05966e1056083712af255fdc9da6e0b95b8 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 f0293feb4728254620ea5233bfc36855f28aa6f7..054ab7c4091299b3828d7bbf5144aec9f4166ee3 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);
+}