]> rtime.felk.cvut.cz Git - rtems-devel.git/blobdiff - rtems-patches/rtems-clone-ss555-to-ec555.patch
Series updated to latest 4.6.99 RTEMS version.
[rtems-devel.git] / rtems-patches / rtems-clone-ss555-to-ec555.patch
index cf7a0826e3d48f734c71683a1c66bb1bdb2fefd0..313d71c5b71c5708cc0b1b4927ca60ad370c45da 100644 (file)
@@ -1,4 +1,4 @@
-Index: rtems-051009/c/src/lib/libbsp/powerpc/ec555/.cvsignore
+Index: rtems/c/src/lib/libbsp/powerpc/ec555/.cvsignore
 ===================================================================
 --- /dev/null
 +++ rtems/c/src/lib/libbsp/powerpc/ec555/.cvsignore
@@ -17,11 +17,33 @@ Index: rtems-051009/c/src/lib/libbsp/powerpc/ec555/.cvsignore
 +Makefile.in
 +missing
 +mkinstalldirs
-Index: rtems-051009/c/src/lib/libbsp/powerpc/ec555/ChangeLog
+Index: rtems/c/src/lib/libbsp/powerpc/ec555/ChangeLog
 ===================================================================
 --- /dev/null
 +++ rtems/c/src/lib/libbsp/powerpc/ec555/ChangeLog
-@@ -0,0 +1,97 @@
+@@ -0,0 +1,119 @@
++2006-03-08    Joel Sherrill <joel@OARcorp.com>
++
++      * startup/linkcmds: Add .gnu.linkonce.b.* section.
++
++2006-02-08    Joel Sherrill <joel@OARcorp.com>
++
++      * startup/linkcmds: Add sections required by newer gcc versions.
++
++2006-01-11    Ralf Corsepius <ralf.corsepius@rtems.org>
++
++      * configure.ac: Remove explicit ampolish3 support (now in
++      RTEMS_BSP_CONFIGURE).
++
++2006-01-10    Ralf Corsepius <ralf.corsepius@rtems.org>
++
++      * configure.ac: Add ampolish3 support.
++      * Makefile.am: Add preinstall.am.
++
++2006-01-09    Ralf Corsepius <ralf.corsepius@rtems.org>
++
++      * Makefile.am: Don't include subdirs.am.
++
 +2005-05-26    Ralf Corsepius <ralf.corsepius@rtems.org>
 +
 +      * include/bsp.h: New header guard.
@@ -119,13 +141,13 @@ Index: rtems-051009/c/src/lib/libbsp/powerpc/ec555/ChangeLog
 +      startup/iss555.c, startup/linkcmds, startup/start.S,
 +      wrapup/.cvsignore, wrapup/Makefile.am: New files.
 +
-Index: rtems-051009/c/src/lib/libbsp/powerpc/ec555/Makefile.am
+Index: rtems/c/src/lib/libbsp/powerpc/ec555/Makefile.am
 ===================================================================
 --- /dev/null
 +++ rtems/c/src/lib/libbsp/powerpc/ec555/Makefile.am
-@@ -0,0 +1,116 @@
+@@ -0,0 +1,65 @@
 +##
-+## $Id: Makefile.am,v 1.6 2005/02/12 03:31:07 ralf Exp $
++## $Id: Makefile.am,v 1.10 2006/01/12 10:12:30 ralf Exp $
 +##
 +
 +ACLOCAL_AMFLAGS = -I ../../../../aclocal
@@ -187,60 +209,9 @@ Index: rtems-051009/c/src/lib/libbsp/powerpc/ec555/Makefile.am
 +    ../../../libcpu/@RTEMS_CPU@/mpc5xx/timer.rel \
 +    ../../../libcpu/@RTEMS_CPU@/mpc5xx/vectors.rel
 +
-+all-local: $(PREINSTALL_FILES) $(TMPINSTALL_FILES)
-+
-+PREINSTALL_DIRS =
-+PREINSTALL_FILES =
-+
-+$(PROJECT_INCLUDE)/$(dirstamp):
-+      @$(mkdir_p) $(PROJECT_INCLUDE)
-+      @: > $(PROJECT_INCLUDE)/$(dirstamp)
-+PREINSTALL_DIRS += $(PROJECT_INCLUDE)/$(dirstamp)
-+
-+$(PROJECT_LIB)/$(dirstamp):
-+      @$(mkdir_p) $(PROJECT_LIB)
-+      @: > $(PROJECT_LIB)/$(dirstamp)
-+PREINSTALL_DIRS += $(PROJECT_LIB)/$(dirstamp)
-+
-+$(PROJECT_LIB)/bsp_specs: bsp_specs $(PROJECT_LIB)/$(dirstamp)
-+      $(INSTALL_DATA) $< $(PROJECT_LIB)/bsp_specs
-+PREINSTALL_FILES += $(PROJECT_LIB)/bsp_specs
-+
-+$(PROJECT_INCLUDE)/bsp.h: include/bsp.h $(PROJECT_INCLUDE)/$(dirstamp)
-+      $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp.h
-+PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp.h
-+
-+$(PROJECT_INCLUDE)/tm27.h: include/tm27.h $(PROJECT_INCLUDE)/$(dirstamp)
-+      $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/tm27.h
-+PREINSTALL_FILES += $(PROJECT_INCLUDE)/tm27.h
-+
-+$(PROJECT_INCLUDE)/bspopts.h: include/bspopts.h $(PROJECT_INCLUDE)/$(dirstamp)
-+      $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bspopts.h
-+PREINSTALL_FILES += $(PROJECT_INCLUDE)/bspopts.h
-+
-+$(PROJECT_INCLUDE)/bsp/$(dirstamp):
-+      @$(mkdir_p) $(PROJECT_INCLUDE)/bsp
-+      @: > $(PROJECT_INCLUDE)/bsp/$(dirstamp)
-+PREINSTALL_DIRS += $(PROJECT_INCLUDE)/bsp/$(dirstamp)
-+
-+$(PROJECT_INCLUDE)/coverhd.h: include/coverhd.h $(PROJECT_INCLUDE)/$(dirstamp)
-+      $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/coverhd.h
-+PREINSTALL_FILES += $(PROJECT_INCLUDE)/coverhd.h
-+
-+$(PROJECT_INCLUDE)/bsp/irq.h: irq/irq.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
-+      $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/irq.h
-+PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/irq.h
-+
-+$(PROJECT_LIB)/linkcmds: startup/linkcmds $(PROJECT_LIB)/$(dirstamp)
-+      $(INSTALL_DATA) $< $(PROJECT_LIB)/linkcmds
-+PREINSTALL_FILES += $(PROJECT_LIB)/linkcmds
-+
-+CLEANFILES = $(PREINSTALL_FILES)
-+DISTCLEANFILES += $(PREINSTALL_DIRS)
-+
-+include $(top_srcdir)/../../../../automake/subdirs.am
++include $(srcdir)/preinstall.am
 +include $(top_srcdir)/../../../../automake/local.am
-Index: rtems-051009/c/src/lib/libbsp/powerpc/ec555/README
+Index: rtems/c/src/lib/libbsp/powerpc/ec555/README
 ===================================================================
 --- /dev/null
 +++ rtems/c/src/lib/libbsp/powerpc/ec555/README
@@ -507,7 +478,7 @@ Index: rtems-051009/c/src/lib/libbsp/powerpc/ec555/README
 +    - The loopback, fileio, unilimited, and pppd tests fail due to memory
 +      limitations.
 +    - The paranoia program dies on a floating-point assist exception.
-Index: rtems-051009/c/src/lib/libbsp/powerpc/ec555/bsp_specs
+Index: rtems/c/src/lib/libbsp/powerpc/ec555/bsp_specs
 ===================================================================
 --- /dev/null
 +++ rtems/c/src/lib/libbsp/powerpc/ec555/bsp_specs
@@ -532,7 +503,7 @@ Index: rtems-051009/c/src/lib/libbsp/powerpc/ec555/bsp_specs
 +*link:
 +%{!qrtems: %(old_link)} %{qrtems: -dc -dp -u __vectors -N -u start -e start}
 +
-Index: rtems-051009/c/src/lib/libbsp/powerpc/ec555/clock/p_clock.c
+Index: rtems/c/src/lib/libbsp/powerpc/ec555/clock/p_clock.c
 ===================================================================
 --- /dev/null
 +++ rtems/c/src/lib/libbsp/powerpc/ec555/clock/p_clock.c
@@ -606,14 +577,14 @@ Index: rtems-051009/c/src/lib/libbsp/powerpc/ec555/clock/p_clock.c
 +
 +  return BSP_install_rtems_irq_handler (&clockIrqData);
 +}
-Index: rtems-051009/c/src/lib/libbsp/powerpc/ec555/configure.ac
+Index: rtems/c/src/lib/libbsp/powerpc/ec555/configure.ac
 ===================================================================
 --- /dev/null
 +++ rtems/c/src/lib/libbsp/powerpc/ec555/configure.ac
 @@ -0,0 +1,52 @@
 +## Process this file with autoconf to produce a configure script.
 +## 
-+## $Id: configure.ac,v 1.5 2005/02/16 10:13:09 ralf Exp $
++## $Id: configure.ac,v 1.7 2006/01/11 04:52:39 ralf Exp $
 +
 +AC_PREREQ(2.59)
 +AC_INIT([rtems-c-src-lib-libbsp-powerpc-mbx5xx],[_RTEMS_VERSION],[rtems-bugs@rtems.com])
@@ -663,7 +634,7 @@ Index: rtems-051009/c/src/lib/libbsp/powerpc/ec555/configure.ac
 +RTEMS_PPC_EXCEPTIONS
 +
 +AC_OUTPUT
-Index: rtems-051009/c/src/lib/libbsp/powerpc/ec555/console/console.c
+Index: rtems/c/src/lib/libbsp/powerpc/ec555/console/console.c
 ===================================================================
 --- /dev/null
 +++ rtems/c/src/lib/libbsp/powerpc/ec555/console/console.c
@@ -1036,7 +1007,7 @@ Index: rtems-051009/c/src/lib/libbsp/powerpc/ec555/console/console.c
 +    return RTEMS_SUCCESSFUL;
 +  #endif
 +}
-Index: rtems-051009/c/src/lib/libbsp/powerpc/ec555/include/.cvsignore
+Index: rtems/c/src/lib/libbsp/powerpc/ec555/include/.cvsignore
 ===================================================================
 --- /dev/null
 +++ rtems/c/src/lib/libbsp/powerpc/ec555/include/.cvsignore
@@ -1045,7 +1016,7 @@ Index: rtems-051009/c/src/lib/libbsp/powerpc/ec555/include/.cvsignore
 +bspopts.h.in
 +stamp-h
 +stamp-h.in
-Index: rtems-051009/c/src/lib/libbsp/powerpc/ec555/include/bsp.h
+Index: rtems/c/src/lib/libbsp/powerpc/ec555/include/bsp.h
 ===================================================================
 --- /dev/null
 +++ rtems/c/src/lib/libbsp/powerpc/ec555/include/bsp.h
@@ -1165,7 +1136,7 @@ Index: rtems-051009/c/src/lib/libbsp/powerpc/ec555/include/bsp.h
 +
 +#endif
 +/* end of include file */
-Index: rtems-051009/c/src/lib/libbsp/powerpc/ec555/include/coverhd.h
+Index: rtems/c/src/lib/libbsp/powerpc/ec555/include/coverhd.h
 ===================================================================
 --- /dev/null
 +++ rtems/c/src/lib/libbsp/powerpc/ec555/include/coverhd.h
@@ -1287,7 +1258,7 @@ Index: rtems-051009/c/src/lib/libbsp/powerpc/ec555/include/coverhd.h
 +
 +#endif
 +/* end of include file */
-Index: rtems-051009/c/src/lib/libbsp/powerpc/ec555/include/tm27.h
+Index: rtems/c/src/lib/libbsp/powerpc/ec555/include/tm27.h
 ===================================================================
 --- /dev/null
 +++ rtems/c/src/lib/libbsp/powerpc/ec555/include/tm27.h
@@ -1346,7 +1317,7 @@ Index: rtems-051009/c/src/lib/libbsp/powerpc/ec555/include/tm27.h
 +}
 +
 +#endif
-Index: rtems-051009/c/src/lib/libbsp/powerpc/ec555/irq/irq.h
+Index: rtems/c/src/lib/libbsp/powerpc/ec555/irq/irq.h
 ===================================================================
 --- /dev/null
 +++ rtems/c/src/lib/libbsp/powerpc/ec555/irq/irq.h
@@ -1406,7 +1377,7 @@ Index: rtems-051009/c/src/lib/libbsp/powerpc/ec555/irq/irq.h
 +#endif /* ASM */
 +
 +#endif /* LIBBSP_POWERPC_SS555_IRQ_IRQ_H */
-Index: rtems-051009/c/src/lib/libbsp/powerpc/ec555/startup/bspstart.c
+Index: rtems/c/src/lib/libbsp/powerpc/ec555/startup/bspstart.c
 ===================================================================
 --- /dev/null
 +++ rtems/c/src/lib/libbsp/powerpc/ec555/startup/bspstart.c
@@ -1612,7 +1583,7 @@ Index: rtems-051009/c/src/lib/libbsp/powerpc/ec555/startup/bspstart.c
 +   */
 +  BSP_rtems_irq_mng_init(0);
 +}
-Index: rtems-051009/c/src/lib/libbsp/powerpc/ec555/startup/iss555.c
+Index: rtems/c/src/lib/libbsp/powerpc/ec555/startup/iss555.c
 ===================================================================
 --- /dev/null
 +++ rtems/c/src/lib/libbsp/powerpc/ec555/startup/iss555.c
@@ -1765,11 +1736,11 @@ Index: rtems-051009/c/src/lib/libbsp/powerpc/ec555/startup/iss555.c
 +  msr |= MSR_IP;              /* set prefix for exception relocation */
 +  _CPU_MSR_SET(msr);
 +}
-Index: rtems-051009/c/src/lib/libbsp/powerpc/ec555/startup/linkcmds
+Index: rtems/c/src/lib/libbsp/powerpc/ec555/startup/linkcmds
 ===================================================================
 --- /dev/null
 +++ rtems/c/src/lib/libbsp/powerpc/ec555/startup/linkcmds
-@@ -0,0 +1,320 @@
+@@ -0,0 +1,319 @@
 +/*
 + * Linker command file for Intec SS555 board
 + *
@@ -1789,7 +1760,7 @@ Index: rtems-051009/c/src/lib/libbsp/powerpc/ec555/startup/linkcmds
 + * RTEMS_DEBUG symbol is defined in the bsp_specs file whenever make(1) is
 + * invoked with VARIANT=DEBUG.
 + *
-+ *  $Id: linkcmds,v 1.1 2004/04/12 21:52:13 joel Exp $
++ *  $Id: linkcmds,v 1.3 2006/03/08 18:50:12 joel Exp $
 + */
 +
 +OUTPUT_FORMAT("elf32-powerpc", "elf32-powerpc", "elf32-powerpc")
@@ -1823,9 +1794,8 @@ Index: rtems-051009/c/src/lib/libbsp/powerpc/ec555/startup/linkcmds
 +    *(.entry2)
 +
 +    /* Actual code */
-+    *(.text)
-+    *(.text.*)
-+           
++    *(.text*)
++
 +    /* C++ constructors/destructors */
 +    *(.gnu.linkonce.t*)
 +           
@@ -1930,7 +1900,7 @@ Index: rtems-051009/c/src/lib/libbsp/powerpc/ec555/startup/linkcmds
 +    *(.data1)
 +    
 +    PROVIDE (__SDATA_START__ = .);
-+    *(.sdata)
++    *(.sdata*)
 +    *(.gnu.linkonce.d*)
 +    *(.gnu.linkonce.s.*)
 +    PROVIDE (__SDATA_END__ = .);
@@ -1979,10 +1949,10 @@ Index: rtems-051009/c/src/lib/libbsp/powerpc/ec555/startup/linkcmds
 +    PROVIDE (__SBSS2_END__ = .);
 +      
 +    PROVIDE (__SBSS_START__ = .);
-+    *(.sbss)
++    *(.sbss*)
 +    PROVIDE (__SBSS_END__ = .);
 +
-+    *(.bss
++    *(.bss .bss* .gnu.linkonce.b*)
 +    *(COMMON)
 +
 +    . = ALIGN(4);
@@ -2090,7 +2060,7 @@ Index: rtems-051009/c/src/lib/libbsp/powerpc/ec555/startup/linkcmds
 +  .debug_varnames  0 : { *(.debug_varnames) }
 +  /* These must appear regardless of  .  */
 +}
-Index: rtems-051009/c/src/lib/libbsp/powerpc/ec555/startup/start.S
+Index: rtems/c/src/lib/libbsp/powerpc/ec555/startup/start.S
 ===================================================================
 --- /dev/null
 +++ rtems/c/src/lib/libbsp/powerpc/ec555/startup/start.S
@@ -2506,7 +2476,7 @@ Index: rtems-051009/c/src/lib/libbsp/powerpc/ec555/startup/start.S
 +      blr                     /* return */
 +
 +.L_text_e:
-Index: rtems-051009/c/src/lib/libbsp/powerpc/ec555/startup/tm27supp.c
+Index: rtems/c/src/lib/libbsp/powerpc/ec555/startup/tm27supp.c
 ===================================================================
 --- /dev/null
 +++ rtems/c/src/lib/libbsp/powerpc/ec555/startup/tm27supp.c
@@ -2540,7 +2510,7 @@ Index: rtems-051009/c/src/lib/libbsp/powerpc/ec555/startup/tm27supp.c
 +  (rtems_irq_is_enabled)tm27IsOn                                      
 +};
 +
-Index: rtems-051009/c/src/lib/libbsp/powerpc/ec555/times
+Index: rtems/c/src/lib/libbsp/powerpc/ec555/times
 ===================================================================
 --- /dev/null
 +++ rtems/c/src/lib/libbsp/powerpc/ec555/times
@@ -2734,3 +2704,120 @@ Index: rtems-051009/c/src/lib/libbsp/powerpc/ec555/times
 +   rtems_rate_monotonic_delete: inactive                                18
 +   rtems_rate_monotonic_delete: active                                  20
 +   rtems_rate_monotonic_period: conclude periods -- caller blocks       36
+Index: rtems/make/custom/ec555.cfg
+===================================================================
+--- /dev/null
++++ rtems/make/custom/ec555.cfg
+@@ -0,0 +1,49 @@
++#
++#  Config file for an Intec Automation SS555 MPC555-based card
++#
++#  This file is derived from:
++#
++#  Config file for a PowerPC MPC860-based MBX821-001 card.
++#  Config file for a PowerPC 403 based helas403 card
++#  Config file for MPC860 based Ethernet Comm Board
++#
++
++include $(RTEMS_ROOT)/make/custom/default.cfg
++
++RTEMS_CPU=powerpc
++GCC_CPU_MODEL=505
++RTEMS_CPU_MODEL=mpc555
++
++# This is the actual bsp directory used during the build process.
++RTEMS_BSP_FAMILY=ss555
++
++#  This contains the compiler options necessary to select the CPU model
++#  and (hopefully) optimize for it.
++#
++CPU_CFLAGS = -mcpu=$(GCC_CPU_MODEL) -D$(RTEMS_CPU_MODEL) -D$(RTEMS_BSP_FAMILY)
++
++# Debugging flags:  If we debug with optimization on, single-stepping
++# sometimes looks a little odd, but there won't be any surprises later.
++CFLAGS_DEBUG_V += -O4 -ggdb
++CXXFLAGS_DEBUG_V += -O4 -ggdb
++
++# optimize flag: typically -O, could use -O4 or -fast
++# -O4 is ok for RTEMS
++# NOTE: some level of -O may be actually required by inline assembler
++CFLAGS_OPTIMIZE_V=-O4 -fno-keep-inline-functions
++CXXFLAGS_OPTIMIZE_V=-O4
++
++define make-exe
++      $(LINK.c) $(AM_CFLAGS) $(AM_LDFLAGS) $(SS555_LDFLAGS) \
++          -o $(basename $@)_sym.exe $(LINK_OBJS) $(LINK_LIBS)
++      $(NM) -g -n $(basename $@)_sym.exe > $(basename $@).nm
++      cp $(basename $@)_sym.exe $(basename $@).exe 
++      $(STRIP) $(basename $@).exe
++      $(SIZE) $(basename $@)_sym.exe
++endef
++
++# Miscellaneous additions go here
++
++# Override default start file
++START_BASE=
++
+Index: rtems/c/src/lib/libbsp/powerpc/ec555/preinstall.am
+===================================================================
+--- /dev/null
++++ rtems/c/src/lib/libbsp/powerpc/ec555/preinstall.am
+@@ -0,0 +1,58 @@
++## Automatically generated by ampolish3 - Do not edit
++
++if AMPOLISH3
++$(srcdir)/preinstall.am: Makefile.am
++      $(AMPOLISH3) $(srcdir)/Makefile.am > $(srcdir)/preinstall.am
++endif
++
++PREINSTALL_DIRS =
++DISTCLEANFILES += $(PREINSTALL_DIRS)
++
++all-am: $(PREINSTALL_FILES)
++
++PREINSTALL_FILES =
++CLEANFILES = $(PREINSTALL_FILES)
++
++$(PROJECT_LIB)/$(dirstamp):
++      @$(mkdir_p) $(PROJECT_LIB)
++      @: > $(PROJECT_LIB)/$(dirstamp)
++PREINSTALL_DIRS += $(PROJECT_LIB)/$(dirstamp)
++
++$(PROJECT_INCLUDE)/$(dirstamp):
++      @$(mkdir_p) $(PROJECT_INCLUDE)
++      @: > $(PROJECT_INCLUDE)/$(dirstamp)
++PREINSTALL_DIRS += $(PROJECT_INCLUDE)/$(dirstamp)
++
++$(PROJECT_LIB)/bsp_specs: bsp_specs $(PROJECT_LIB)/$(dirstamp)
++      $(INSTALL_DATA) $< $(PROJECT_LIB)/bsp_specs
++PREINSTALL_FILES += $(PROJECT_LIB)/bsp_specs
++
++$(PROJECT_INCLUDE)/bsp.h: include/bsp.h $(PROJECT_INCLUDE)/$(dirstamp)
++      $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp.h
++PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp.h
++
++$(PROJECT_INCLUDE)/tm27.h: include/tm27.h $(PROJECT_INCLUDE)/$(dirstamp)
++      $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/tm27.h
++PREINSTALL_FILES += $(PROJECT_INCLUDE)/tm27.h
++
++$(PROJECT_INCLUDE)/bspopts.h: include/bspopts.h $(PROJECT_INCLUDE)/$(dirstamp)
++      $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bspopts.h
++PREINSTALL_FILES += $(PROJECT_INCLUDE)/bspopts.h
++
++$(PROJECT_INCLUDE)/bsp/$(dirstamp):
++      @$(mkdir_p) $(PROJECT_INCLUDE)/bsp
++      @: > $(PROJECT_INCLUDE)/bsp/$(dirstamp)
++PREINSTALL_DIRS += $(PROJECT_INCLUDE)/bsp/$(dirstamp)
++
++$(PROJECT_INCLUDE)/coverhd.h: include/coverhd.h $(PROJECT_INCLUDE)/$(dirstamp)
++      $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/coverhd.h
++PREINSTALL_FILES += $(PROJECT_INCLUDE)/coverhd.h
++
++$(PROJECT_INCLUDE)/bsp/irq.h: irq/irq.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
++      $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/irq.h
++PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/irq.h
++
++$(PROJECT_LIB)/linkcmds: startup/linkcmds $(PROJECT_LIB)/$(dirstamp)
++      $(INSTALL_DATA) $< $(PROJECT_LIB)/linkcmds
++PREINSTALL_FILES += $(PROJECT_LIB)/linkcmds
++