summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrpollock <rpollock@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2003-04-11 23:33:40 +0000
committerrpollock <rpollock@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2003-04-11 23:33:40 +0000
commit8b5429cdf5a74fb0ea1e81275a59cb969a00e904 (patch)
tree098693df1daa2ae24707d9b3180d4466444650ea
parent57b4b18803c36a2a410163db4631522e9c0d7608 (diff)
downloadATCD-8b5429cdf5a74fb0ea1e81275a59cb969a00e904.tar.gz
ChangeLogTag:Fri Apr 11 18:05:00 2003 Roy Pollock <rpollock@ghs.com>
-rw-r--r--ChangeLog35
-rw-r--r--ace/Default_Constants.h3
-rw-r--r--ace/Log_Msg.h4
-rw-r--r--ace/Mem_Map.cpp2
-rw-r--r--ace/OS.cpp23
-rw-r--r--ace/OS.h9
-rw-r--r--ace/OS.i47
-rw-r--r--ace/POSIX_Asynch_IO.h4
-rw-r--r--ace/RMCast/RMCast_Reassembly.cpp12
-rw-r--r--ace/RMCast/RMCast_Retransmission.cpp15
-rw-r--r--ace/SOCK_Dgram_Mcast.i2
-rw-r--r--ace/SString.cpp4
-rw-r--r--ace/config-integritySCA.h281
-rw-r--r--include/makeinclude/platform_integrity_ghs.GNU64
-rw-r--r--protocols/ace/RMCast/RMCast_Reassembly.cpp12
-rw-r--r--protocols/ace/RMCast/RMCast_Retransmission.cpp15
-rw-r--r--tests/ACE.bsp25
-rw-r--r--tests/INTEGRITY.ld31
-rw-r--r--tests/Token_Strategy_Test.cpp6
19 files changed, 563 insertions, 31 deletions
diff --git a/ChangeLog b/ChangeLog
index 5d493e5bb98..9bd3ebdce88 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,38 @@
+Fri Apr 11 18:05:00 2003 Roy Pollock <rpollock@ghs.com>
+
+ * ace/config-integritySCA.h
+ * tests/ACE.bsp
+ * tests/INTEGRITY.ld
+
+ Add configuration and build files for INTEGRITY 4.0.9+SCA
+
+ * ace/Default_Constants.h
+ * ace/Log_Msg.h
+ * ace/Mem_Map.cpp
+ * ace/OS.cpp
+ * ace/OS.h
+ * ace/SOCK_Dgram_Mcast.i
+
+ Add defined(INTEGRITY) cases
+
+ * ace/OS.i
+
+ Cast the ACE_NOTSUP_RETURN of umask to mode_t
+ Add defined(INTEGRITY) cases
+
+ * ace/POSIX_Asynch_IO.h
+
+ Add two header includes under defined(INTEGRITY). I'm not sure
+ why these aren't needed on other platforms.
+
+ * ace/SString.cpp
+ * ace/RMCast/RMCast_Reassembly.cpp
+ * ace/RMCast/RMCast_Retransmission.cpp
+ * tests/Token_Strategy_Test.cpp
+
+ Fix #pragma instatiate cases to have correct syntax and match
+ the explicit template instantiation case.
+
Fri Apr 11 13:37:34 2003 Chad Elliott <elliott_c@ociweb.com>
* bin/MakeProjectCreator/modules/Driver.pm:
diff --git a/ace/Default_Constants.h b/ace/Default_Constants.h
index 3780d186d2f..87c0934d555 100644
--- a/ace/Default_Constants.h
+++ b/ace/Default_Constants.h
@@ -321,6 +321,9 @@
// A simple free list which doen't allocate/deallocate elements.
# define ACE_PURE_FREE_LIST 2
+# if defined (INTEGRITY)
+# define ACE_MAX_USERID 32
+# endif
# if defined (ACE_WIN32)
diff --git a/ace/Log_Msg.h b/ace/Log_Msg.h
index 5c39559c015..cb340d66e43 100644
--- a/ace/Log_Msg.h
+++ b/ace/Log_Msg.h
@@ -99,7 +99,7 @@
# pragma once
#endif /* ACE_LACKS_PRAGMA_ONCE */
-#if defined (__Lynx__)
+#if defined (__Lynx__) || defined (INTEGRITY)
# undef STDERR
#endif /* __Lynx__ */
@@ -640,7 +640,7 @@ private:
/// Process id of the current process.
static pid_t pid_;
- /// Options flags used to hold the logger flag options, e.g.,
+ /// Options flags used to hold the logger flag options, e.g.,
/// STDERR, LOGGER, OSTREAM, MSG_CALLBACK, etc.
static u_long flags_;
diff --git a/ace/Mem_Map.cpp b/ace/Mem_Map.cpp
index 8112a31c1bf..e8885c393aa 100644
--- a/ace/Mem_Map.cpp
+++ b/ace/Mem_Map.cpp
@@ -245,7 +245,7 @@ ACE_Mem_Map::open (const ACE_TCHAR *file_name,
file_name,
MAXPATHLEN);
-#if defined (CHORUS)
+#if defined (CHORUS) || defined(INTEGRITY)
this->handle_ = ACE_OS::shm_open (file_name, flags, mode, sa);
#else
this->handle_ = ACE_OS::open (file_name, flags, mode, sa);
diff --git a/ace/OS.cpp b/ace/OS.cpp
index 170b1885fb3..09d88b6a746 100644
--- a/ace/OS.cpp
+++ b/ace/OS.cpp
@@ -14,6 +14,11 @@
# include "ace/OS.i"
#endif /* ACE_HAS_INLINED_OS_CALLS */
+#if defined(INTEGRITY) && defined(ACE_HAS_SHM_OPEN)
+char* shm_area_name = "ACE_Area";
+char* shm_area_password = "******";
+#endif
+
ACE_RCSID(ace, OS, "$Id$")
#if defined (ACE_MT_SAFE) && (ACE_MT_SAFE != 0)
@@ -4804,14 +4809,14 @@ ACE_OS::localtime_r (const time_t *t, struct tm *res)
*res = *res_ptr;
return res;
}
-#elif defined (ACE_HAS_WINCE)
+#elif defined (ACE_HAS_WINCE)
// This is really stupid, converting FILETIME to timeval back and
// forth. It assumes FILETIME and DWORDLONG are the same structure
// internally.
-
+
TIME_ZONE_INFORMATION pTz;
- const unsigned short int __mon_yday[2][13] =
+ const unsigned short int __mon_yday[2][13] =
{
/* Normal years. */
{ 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 },
@@ -4826,12 +4831,12 @@ ACE_OS::localtime_r (const time_t *t, struct tm *res)
FILETIME file_time;
file_time.dwLowDateTime = _100ns.LowPart;
file_time.dwHighDateTime = _100ns.HighPart;
-
+
FILETIME localtime;
SYSTEMTIME systime;
FileTimeToLocalFileTime (&file_time, &localtime);
FileTimeToSystemTime (&localtime, &systime);
-
+
res->tm_hour = systime.wHour;
if(pTz.DaylightBias!=0)
@@ -5239,6 +5244,14 @@ ACE_OS::open (const char *filename,
}
return ACE_static_cast (ACE_HANDLE, handle);
# endif /* defined (ACE_PSOS_LACKS_PHILE) */
+#elif defined (INTEGRITY)
+ ACE_UNUSED_ARG (sa);
+ if(!strcmp(filename,ACE_DEV_NULL)) {
+ ACE_OSCALL_RETURN (::AllocateNullConsoleDescriptor(), ACE_HANDLE, -1);
+ }
+ else {
+ ACE_OSCALL_RETURN (::open (filename, mode, perms), ACE_HANDLE, -1);
+ }
#else
ACE_UNUSED_ARG (sa);
ACE_OSCALL_RETURN (::open (filename, mode, perms), ACE_HANDLE, -1);
diff --git a/ace/OS.h b/ace/OS.h
index 0bf671803cb..c89757927c0 100644
--- a/ace/OS.h
+++ b/ace/OS.h
@@ -93,7 +93,7 @@ int const ACE_FD_SETSIZE = FD_SETSIZE;
// ACE.
#include "ace/Global_Macros.h"
-#if !defined (ACE_WIN32)
+#if !defined (ACE_WIN32) && !defined (INTEGRITY)
#define ACE_MAX_USERID L_cuserid
#endif /*!ACE_WIN32*/
@@ -2625,6 +2625,9 @@ typedef void (__cdecl *ACE_SignalHandlerV)(int);
# elif defined (ACE_HAS_UNIXWARE_SVR4_SIGNAL_T)
typedef void (*ACE_SignalHandler)(int);
typedef void (*ACE_SignalHandlerV)(...);
+# elif defined (INTEGRITY)
+typedef void (*ACE_SignalHandler)();
+typedef void (*ACE_SignalHandlerV)(int);
# else /* This is necessary for some older broken version of cfront */
# if defined (SIG_PF)
# define ACE_SignalHandler SIG_PF
@@ -3303,7 +3306,7 @@ extern "C"
int select (int n, fd_set *readfds, fd_set *writefds,
fd_set *exceptfds, const struct timeval *timeout);
};
-# elif ! defined (VXWORKS)
+# elif ! defined (VXWORKS) && ! defined (INTEGRITY)
# include /**/ <sys/uio.h>
# include /**/ <sys/ipc.h>
# if !defined(ACE_LACKS_SYSV_SHMEM)
@@ -4171,7 +4174,7 @@ typedef int ACE_Sched_Priority;
class ACE_Sched_Params;
# if defined (ACE_LACKS_FILELOCKS)
-# if ! defined (VXWORKS) && ! defined (ACE_PSOS) && ! defined (__rtems__)
+# if ! defined (VXWORKS) && ! defined (ACE_PSOS) && ! defined (__rtems__) && !defined (INTEGRITY)
// VxWorks defines struct flock in sys/fcntlcom.h. But it doesn't
// appear to support flock (). RTEMS defines struct flock but
// currently does not support locking.
diff --git a/ace/OS.i b/ace/OS.i
index 404db5f3222..ef140f38641 100644
--- a/ace/OS.i
+++ b/ace/OS.i
@@ -363,7 +363,7 @@ ACE_INLINE int
ACE_OS::getopt (int argc, char *const *argv, const char *optstring)
{
ACE_OS_TRACE ("ACE_OS::getopt");
-#if defined (VXWORKS) || defined (ACE_PSOS)
+#if defined (VXWORKS) || defined (ACE_PSOS) || defined (INTEGRITY)
ACE_UNUSED_ARG (argc);
ACE_UNUSED_ARG (argv);
ACE_UNUSED_ARG (optstring);
@@ -381,7 +381,7 @@ ACE_INLINE int
ACE_OS::pipe (ACE_HANDLE fds[])
{
ACE_OS_TRACE ("ACE_OS::pipe");
-# if defined (VXWORKS) || defined (ACE_PSOS)
+# if defined (VXWORKS) || defined (ACE_PSOS) || defined (INTEGRITY)
ACE_UNUSED_ARG (fds);
ACE_NOTSUP_RETURN (-1);
# else
@@ -440,7 +440,7 @@ ACE_INLINE pid_t
ACE_OS::setsid (void)
{
ACE_OS_TRACE ("ACE_OS::setsid");
-# if defined (VXWORKS) || defined (CHORUS) || defined (ACE_PSOS)
+# if defined (VXWORKS) || defined (CHORUS) || defined (ACE_PSOS) || defined (INTEGRITY)
ACE_NOTSUP_RETURN (-1);
# else
ACE_OSCALL_RETURN (::setsid (), int, -1);
@@ -451,9 +451,9 @@ ACE_INLINE mode_t
ACE_OS::umask (mode_t cmask)
{
ACE_OS_TRACE ("ACE_OS::umask");
-# if defined (VXWORKS) || defined (ACE_PSOS)
+# if defined (VXWORKS) || defined (ACE_PSOS) || defined (INTEGRITY)
ACE_UNUSED_ARG (cmask);
- ACE_NOTSUP_RETURN (-1);
+ ACE_NOTSUP_RETURN ((mode_t)-1);
# else
return ::umask (cmask); // This call shouldn't fail...
# endif /* VXWORKS || ACE_PSOS */
@@ -850,6 +850,10 @@ ACE_OS::tempnam (const ACE_TCHAR *dir, const ACE_TCHAR *pfx)
#endif /* VXWORKS */
}
+#if defined (ACE_HAS_SHM_OPEN) && defined(INTEGRITY)
+#include <sys/mman.h>
+#endif
+
ACE_INLINE ACE_HANDLE
ACE_OS::shm_open (const ACE_TCHAR *filename,
int mode,
@@ -1077,7 +1081,7 @@ ACE_INLINE long
ACE_OS::sysconf (int name)
{
ACE_OS_TRACE ("ACE_OS::sysconf");
-#if defined (ACE_WIN32) || defined (VXWORKS) || defined (ACE_PSOS)
+#if defined (ACE_WIN32) || defined (VXWORKS) || defined (ACE_PSOS) || defined (INTEGRITY)
ACE_UNUSED_ARG (name);
ACE_NOTSUP_RETURN (-1);
#else
@@ -7717,8 +7721,21 @@ ACE_OS::creat (const ACE_TCHAR *filename, mode_t mode)
ACE_INLINE int
ACE_OS::uname (ACE_utsname *name)
{
+#if defined (INTEGRITY)
+ if(!name) {
+ errno = EFAULT;
+ return -1;
+ }
+ strcpy(name->sysname,"INTEGRITY");
+ int status = gethostname(name->nodename,_SYS_NMLN);
+ strcpy(name->release,"4.0");
+ strcpy(name->version,"4.0.9");
+ strcpy(name->machine,"a standard name");
+ return status;
+#else
ACE_OS_TRACE ("ACE_OS::uname");
ACE_OSCALL_RETURN (::uname (name), int, -1);
+#endif
}
#endif /* ! ACE_WIN32 && ! VXWORKS && ! CHORUS */
@@ -9983,7 +10000,7 @@ ACE_OS::waitpid (pid_t pid,
ACE_HANDLE handle)
{
ACE_OS_TRACE ("ACE_OS::waitpid");
-#if defined (VXWORKS) || defined (ACE_PSOS)
+#if defined (VXWORKS) || defined (ACE_PSOS) || defined (INTEGRITY)
ACE_UNUSED_ARG (pid);
ACE_UNUSED_ARG (status);
ACE_UNUSED_ARG (wait_options);
@@ -10065,7 +10082,7 @@ ACE_INLINE pid_t
ACE_OS::wait (int *status)
{
ACE_OS_TRACE ("ACE_OS::wait");
-#if defined (ACE_WIN32) || defined (VXWORKS) || defined(CHORUS) || defined (ACE_PSOS)
+#if defined (ACE_WIN32) || defined (VXWORKS) || defined(CHORUS) || defined (ACE_PSOS) || defined (INTEGRITY)
ACE_UNUSED_ARG (status);
ACE_NOTSUP_RETURN (0);
@@ -10459,6 +10476,12 @@ ACE_OS::getenv (const wchar_t *symbol)
}
#endif /* ACE_HAS_WCHAR && ACE_WIN32 */
+#if defined(INTEGRITY)
+extern "C" {
+ int putenv(char *string);
+}
+#endif
+
ACE_INLINE int
ACE_OS::putenv (const ACE_TCHAR *string)
{
@@ -10895,7 +10918,7 @@ ACE_INLINE int
ACE_OS::setuid (uid_t uid)
{
ACE_OS_TRACE ("ACE_OS::setuid");
-#if defined (VXWORKS) || defined (ACE_PSOS)
+#if defined (VXWORKS) || defined (ACE_PSOS) || defined (INTEGRITY)
// setuid() is not supported: just one user anyways
ACE_UNUSED_ARG (uid);
return 0;
@@ -10911,7 +10934,7 @@ ACE_INLINE uid_t
ACE_OS::getuid (void)
{
ACE_OS_TRACE ("ACE_OS::getuid");
-#if defined (VXWORKS) || defined (ACE_PSOS)
+#if defined (VXWORKS) || defined (ACE_PSOS) || defined (INTEGRITY)
// getuid() is not supported: just one user anyways
return 0;
# elif defined (ACE_WIN32) || defined (CHORUS)
@@ -10925,7 +10948,7 @@ ACE_INLINE int
ACE_OS::setgid (gid_t gid)
{
ACE_OS_TRACE ("ACE_OS::setgid");
-#if defined (VXWORKS) || defined (ACE_PSOS)
+#if defined (VXWORKS) || defined (ACE_PSOS) || defined (INTEGRITY)
// setgid() is not supported: just one user anyways
ACE_UNUSED_ARG (gid);
return 0;
@@ -10941,7 +10964,7 @@ ACE_INLINE gid_t
ACE_OS::getgid (void)
{
ACE_OS_TRACE ("ACE_OS::getgid");
-#if defined (VXWORKS) || defined (ACE_PSOS)
+#if defined (VXWORKS) || defined (ACE_PSOS) || defined (INTEGRITY)
// getgid() is not supported: just one user anyways
return 0;
# elif defined (ACE_WIN32) || defined (CHORUS)
diff --git a/ace/POSIX_Asynch_IO.h b/ace/POSIX_Asynch_IO.h
index d3aab26cf71..e54a4a2de57 100644
--- a/ace/POSIX_Asynch_IO.h
+++ b/ace/POSIX_Asynch_IO.h
@@ -33,6 +33,10 @@
#include "ace/Asynch_IO_Impl.h"
#include "ace/Unbounded_Queue.h"
#include "ace/Map_Manager.h"
+#if defined(INTEGRITY)
+#include "ace/Event_Handler.h"
+#include "ace/ACE.h"
+#endif
// Forward declarations
class ACE_POSIX_Proactor;
diff --git a/ace/RMCast/RMCast_Reassembly.cpp b/ace/RMCast/RMCast_Reassembly.cpp
index d20b72d88c5..9e4e9103c45 100644
--- a/ace/RMCast/RMCast_Reassembly.cpp
+++ b/ace/RMCast/RMCast_Reassembly.cpp
@@ -136,5 +136,15 @@ template class ACE_Hash_Map_Iterator_Base_Ex<ACE_UINT32,ACE_RMCast_Partial_Messa
template class ACE_Hash_Map_Entry<ACE_UINT32,ACE_RMCast_Partial_Message*>;
template class ACE_Less_Than<ACE_UINT32>;
-
+#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)
+#pragma instantiate ACE_Hash_Map_Manager<ACE_UINT32,ACE_RMCast_Partial_Message*,ACE_Null_Mutex>
+#pragma instantiate ACE_Hash_Map_Manager_Ex<ACE_UINT32,ACE_RMCast_Partial_Message*,ACE_Hash<ACE_UINT32>,ACE_Equal_To<ACE_UINT32>,ACE_Null_Mutex>
+#pragma instantiate ACE_Hash_Map_Iterator<ACE_UINT32,ACE_RMCast_Partial_Message*,ACE_Null_Mutex>
+#pragma instantiate ACE_Hash_Map_Iterator_Ex<ACE_UINT32,ACE_RMCast_Partial_Message*,ACE_Hash<ACE_UINT32>,ACE_Equal_To<ACE_UINT32>,ACE_Null_Mutex >
+#pragma instantiate ACE_Hash_Map_Reverse_Iterator_Ex<ACE_UINT32,ACE_RMCast_Partial_Message*,ACE_Hash<ACE_UINT32>,ACE_Equal_To<ACE_UINT32>,ACE_Null_Mutex >
+#pragma instantiate ACE_Hash_Map_Iterator_Base_Ex<ACE_UINT32,ACE_RMCast_Partial_Message*,ACE_Hash<ACE_UINT32>,ACE_Equal_To<ACE_UINT32>,ACE_Null_Mutex >
+#pragma instantiate ACE_Hash_Map_Entry<ACE_UINT32,ACE_RMCast_Partial_Message*>
+
+#pragma instantiate ACE_Less_Than<ACE_UINT32>
#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */
+
diff --git a/ace/RMCast/RMCast_Retransmission.cpp b/ace/RMCast/RMCast_Retransmission.cpp
index 7b626a4ef7d..d3c8ee97d84 100644
--- a/ace/RMCast/RMCast_Retransmission.cpp
+++ b/ace/RMCast/RMCast_Retransmission.cpp
@@ -131,4 +131,19 @@ template class ACE_RMCast_Copy_On_Write_Read_Guard<ACE_RMCast_Retransmission::Co
template class ACE_RMCast_Copy_On_Write_Collection<ACE_RMCast_Retransmission::Collection,ACE_RMCast_Retransmission::Collection_Iterator>;
template class ACE_RMCast_Worker<ACE_UINT32,ACE_RMCast::Data>;
+#elif defined(ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)
+
+#pragma instantiate ACE_RB_Tree<ACE_UINT32,ACE_RMCast::Data,ACE_Less_Than<ACE_UINT32>,ACE_Null_Mutex>
+#pragma instantiate ACE_RB_Tree_Iterator_Base<ACE_UINT32,ACE_RMCast::Data,ACE_Less_Than<ACE_UINT32>,ACE_Null_Mutex>
+#pragma instantiate ACE_RB_Tree_Iterator<ACE_UINT32,ACE_RMCast::Data,ACE_Less_Than<ACE_UINT32>,ACE_Null_Mutex>
+#pragma instantiate ACE_RB_Tree_Reverse_Iterator<ACE_UINT32,ACE_RMCast::Data,ACE_Less_Than<ACE_UINT32>,ACE_Null_Mutex>
+#pragma instantiate ACE_RB_Tree_Node<ACE_UINT32,ACE_RMCast::Data>
+
+#pragma instantiate ACE_RMCast_Copy_On_Write<ACE_UINT32,ACE_RMCast::Data,ACE_RMCast_Retransmission::Collection,ACE_RMCast_Retransmission::Collection_Iterator>
+#pragma instantiate ACE_RMCast_Copy_On_Write_Container<ACE_RMCast_Retransmission::Collection,ACE_RMCast_Retransmission::Collection_Iterator>
+#pragma instantiate ACE_RMCast_Copy_On_Write_Write_Guard<ACE_RMCast_Retransmission::Collection,ACE_RMCast_Retransmission::Collection_Iterator>
+#pragma instantiate ACE_RMCast_Copy_On_Write_Read_Guard<ACE_RMCast_Retransmission::Collection,ACE_RMCast_Retransmission::Collection_Iterator>
+#pragma instantiate ACE_RMCast_Copy_On_Write_Collection<ACE_RMCast_Retransmission::Collection,ACE_RMCast_Retransmission::Collection_Iterator>
+#pragma instantiate ACE_RMCast_Worker<ACE_UINT32,ACE_RMCast::Data>
+
#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */
diff --git a/ace/SOCK_Dgram_Mcast.i b/ace/SOCK_Dgram_Mcast.i
index 32ee9e7e426..c50b572f14c 100644
--- a/ace/SOCK_Dgram_Mcast.i
+++ b/ace/SOCK_Dgram_Mcast.i
@@ -11,7 +11,7 @@ ACE_SOCK_Dgram_Mcast::set_option (int option,
return -1;
int level = IPPROTO_IP;
-#if defined (IPPROTO_IPV6)
+#if defined (IPPROTO_IPV6) && ! defined (INTEGRITY)
if (this->send_addr_.get_type () == PF_INET6)
level = IPPROTO_IPV6;
#endif /* IPPROTO_IPV6 */
diff --git a/ace/SString.cpp b/ace/SString.cpp
index d4536025dc7..88fad2ae74c 100644
--- a/ace/SString.cpp
+++ b/ace/SString.cpp
@@ -541,11 +541,11 @@ template ACE_String_Base<ACE_WSTRING_TYPE> operator + (const ACE_WSTRING_TYPE *,
#pragma instantiate ACE_String_Base<char>
#pragma instantiate ACE_String_Base<char> operator + (const ACE_String_Base<char> &, const ACE_String_Base<char> &)
#pragma instantiate ACE_String_Base<char> operator + (const ACE_String_Base<char> &, const char *)
-#pragma instantiate ACE_String_Base<char> operator + (const char *,ACE_String_Base<char> &)
+#pragma instantiate ACE_String_Base<char> operator + (const char *,const ACE_String_Base<char> &)
#pragma instantiate ACE_String_Base<ACE_WSTRING_TYPE>
#pragma instantiate ACE_String_Base<ACE_WSTRING_TYPE> operator + (const ACE_String_Base<ACE_WSTRING_TYPE> &, const ACE_String_Base<ACE_WSTRING_TYPE> &)
#pragma instantiate ACE_String_Base<ACE_WSTRING_TYPE> operator + (const ACE_String_Base<ACE_WSTRING_TYPE> &, const ACE_WSTRING_TYPE *)
-#pragma instantiate ACE_String_Base<ACE_WSTRING_TYPE> operator + (const ACE_WSTRING_TYPE *,ACE_String_Base<ACE_WSTRING_TYPE> &)
+#pragma instantiate ACE_String_Base<ACE_WSTRING_TYPE> operator + (const ACE_WSTRING_TYPE *,const ACE_String_Base<ACE_WSTRING_TYPE> &)
#elif defined (__GNUC__) && (defined (_AIX) || defined (__hpux) || defined (VXWORKS))
template char ACE_String_Base<char>::NULL_String_;
template ACE_WSTRING_TYPE ACE_String_Base<ACE_WSTRING_TYPE>::NULL_String_;
diff --git a/ace/config-integritySCA.h b/ace/config-integritySCA.h
new file mode 100644
index 00000000000..fa2c07fd824
--- /dev/null
+++ b/ace/config-integritySCA.h
@@ -0,0 +1,281 @@
+#ifndef ACE_INT_CONFIG_H
+#define ACE_INT_CONFIG_H
+
+/*
+ * This config.h file is for version 4.0.x of the
+ * Integrity RTOS with SCA from Green Hills Software
+ * http://www.ghs.com/products/rtos/integrity.html
+ *
+ * $Id$
+ */
+
+#define ghs
+/* compilation defines */
+#define ACE_LACKS_GETPGID
+#define ACE_LACKS_SETPGID
+#define ACE_LACKS_SETREUID
+#define ACE_LACKS_SETREGID
+#ifndef ACE_HAS_EXCEPTIONS
+ #define ACE_HAS_EXCEPTIONS
+#endif
+#define ACE_NEW_THROWS_EXCEPTIONS
+#define ACE_HAS_STANDARD_CPP_LIBRARY 1
+#define ACE_HAS_ANSI_CASTS
+#define ACE_HAS_TEMPLATE_SPECIALIZATION
+#define ACE_HAS_ANSI_CASTS
+#if 0
+#define ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA
+#endif
+#define ACE_TEMPLATES_REQUIRE_SOURCE 1
+#define ACE_HAS_TEMPLATE_TYPEDEFS
+#define TAO_USE_SEQUENCE_TEMPLATES
+#define ACE_HAS_USING_KEYWORD
+#define ACE_NEEDS_FUNC_DEFINITIONS
+#define _REENTRANT
+#define ACE_MT_SAFE 1
+#define __ACE_INLINE__
+#define ACE_HAS_ONE_DEFINITION_RULE
+
+// Compiler/platform has correctly prototyped header files.
+#define ACE_HAS_CPLUSPLUS_HEADERS
+
+#define ACE_HAS_SHM_OPEN
+
+/***** Operating System Defines *****/
+
+/***** ANSI defines *****/
+#define ACE_LACKS_TEMPNAM /* believe it or not, this is ANSI C */
+#define ACE_HAS_STRERROR
+
+
+#define ACE_LACKS_SENDMSG
+
+/***** End Stack Defines *****/
+
+
+/* SCA STUFF */
+#define ACE_HAS_SIGWAIT
+#define ACE_HAS_SIGACTION
+#define ACE_HAS_SIGINFO_T
+#define ACE_LACKS_SIGINFO_H
+#define ACE_LACKS_UCONTEXT_H
+#define ACE_HAS_SIG_C_FUNC
+#define ACE_LACKS_SI_ADDR
+#define ACE_HAS_AIO_CALLS
+
+#define ACE_HAS_POSIX_NONBLOCK
+#define ACE_HAS_DIRENT
+
+#define ACE_HAS_THREADS
+
+#define ACE_HAS_PTHREADS
+#define ACE_HAS_PTHREADS_STD
+/***** End Threading Defines *****/
+
+/***** ACE Specific Features *****/
+#define ACE_NTRACE 1
+/***** end ACE Specific Features *****/
+
+/***** Hardware Defines *****/
+#define ACE_PAGE_SIZE 4096
+/***** End Hardware Defines *****/
+
+/****** SYSV_IPC STUFF *****/
+#define ACE_LACKS_KEY_T
+
+/****** Posix Defines *****/
+#define ACE_HAS_POSIX_TIME
+#define ACE_HAS_POSIX_SEM
+#define ACE_HAS_STRDUP_EMULATION
+#define ACE_HAS_MSG
+#define ACE_LACKS_CONDATTR_PSHARED
+#define ACE_LACKS_EXEC
+#define ACE_LACKS_FORK
+#define ACE_LACKS_MKFIFO
+#define ACE_LACKS_MKTEMP
+#define ACE_LACKS_MKSTEMP
+#if 0
+#define ACE_LACKS_MMAP
+#endif
+#define ACE_LACKS_MPROTECT
+#define ACE_LACKS_MUTEXATTR_PSHARED
+#define ACE_LACKS_PIPE
+#define ACE_LACKS_RLIMIT
+#define ACE_LACKS_RPC_H
+#define ACE_LACKS_RECVMSG
+#define ACE_LACKS_RWLOCK_T
+#define ACE_LACKS_SEMBUF_T
+#if 0
+#define ACE_LACKS_SOCKETPAIR
+#endif
+#define ACE_LACKS_SOME_POSIX_PROTOTYPES
+#define ACE_LACKS_UNIX_DOMAIN_SOCKETS
+#define ACE_LACKS_USER
+#if 0
+#define ACE_LACKS_STAT
+#endif
+#define ACE_LACKS_FILE_FCNTL
+#define ACE_LACKS_FCNTL
+#define ACE_LACKS_SYS_FILE_H
+#if 0
+#define ACE_LACKS_DIRECTORY_FUNCTIONS
+#define ACE_LACKS_UNLINK
+#endif
+#define ACE_LACKS_UMASK
+#if 0
+#define ACE_LACKS_CREAT
+#define ACE_LACKS_TRUNCATE
+#define ACE_LACKS_DUP
+#endif
+#define ACE_LACKS_SEEK
+#define ACE_LACKS_SHARED_MEMORY
+#define ACE_LACKS_MSYNC
+#if 0
+#define ACE_LACKS_SIGNALS
+#endif
+#define ACE_LACKS_PID_STUFF
+#define ACE_LACKS_NETDB_REENTRANT_FUNCTIONS
+#define ACE_LACKS_IPC_H
+#define ACE_LACKS_PARAM_H
+#define ACE_LACKS_SYSV_MSG_H
+#define ACE_LACKS_UTSNAME_T
+#define ACE_LACKS_ISATTY
+#define ACE_LACKS_GETOPT
+#define ACE_LACKS_STRCASECMP
+#define ACE_HAS_SYS_BSDTIME_H
+#define ACE_LACKS_TRUNCATE
+#define ACE_LACKS_PWD_FUNCTIONS
+#define ACE_LACKS_UNIX_SIGNALS
+#if 0
+#define ACE_LACKS_ACCESS
+#define ACE_LACKS_UNAME
+#endif
+#define ACE_HAS_THREAD_SPECIFIC_STORAGE
+#define ACE_LACKS_SYSV_SHMEM
+#define ACE_LACKS_PUTENV
+#define ACE_HAS_4_4BSD_SENDMSG_RECVMSG
+#define ACE_HAS_CLOCK_GETTIME
+#define ACE_LACKS_THREAD_PROCESS_SCOPING
+#define ACE_LACKS_SETSCHED
+/* #define ACE_LACKS_SYS_NERR */
+#if 0
+#define ACE_LACKS_PTHREAD_CANCEL
+#define ACE_LACKS_PTHREAD_KILL
+#define ACE_LACKS_PTHREAD_THR_SIGSETMASK
+#define ACE_LACKS_PTHREAD_CLEANUP
+#endif
+#define ACE_LACKS_STRRECVFD
+#define ACE_LACKS_WRITEV
+#define ACE_LACKS_READV
+/* below refers to fcntl style locking */
+#define ACE_LACKS_FILELOCKS
+
+/***** Not tied to standards AFAIK ****/
+#define ACE_LACKS_MADVISE /* paging optimization not needed with INTEGRITY */
+#define ACE_LACKS_MALLOC_H /* netbsd's just includes stdlib.h */
+#define ACE_LACKS_MEMORY_H /* netbsd's just includes string.h */
+
+/***** STUFF INTEGRITY 4.0.8 APPEARS TO SUPPORT ****/
+/* note, possibly untested with ace */
+#if 0
+#define ACE_LACKS_GETSERVBYNAME
+#endif
+
+/***** TAO STUFF ****/
+#define TAO_USE_DOTTED_DECIMAL_ADDRESSES 1
+
+#include <INTEGRITY.h>
+
+#include <time.h>
+
+typedef void (*__sighandler_t)(int);
+
+extern "C"
+{
+ inline int isatty(int) { return 0; }
+}
+
+#if 0
+struct stat
+{
+ unsigned int st_atime; // time of last access
+ unsigned int st_mtime; // time of last data modification
+ unsigned int st_size; // file size, in bytes
+ unsigned int st_mode;
+ unsigned int st_nlink;
+};
+
+#define MAXNAMLEN 1024
+#define S_IRUSR 1
+#define S_IRGRP 2
+#define S_IROTH 4
+#define S_IWUSR 8
+#define S_IWGRP 16
+#define S_IWOTH 32
+#endif
+
+#ifdef ppc
+#define ACE_HAS_POWERPC_TIMER
+#endif
+
+typedef union sigval sigval_t;
+
+/* MIKEC Addtions */
+#define ACE_HAS_NONCONST_SELECT_TIMEVAL
+#include <sys/uio.h> // needed to define iovec
+#define ACE_LACKS_READLINK
+#define ACE_LACKS_GETPPID
+#define NSIG (SIGRTMAX+1)
+#define ACE_USES_STD_NAMESPACE_FOR_STDCPP_LIB 1
+#define ACE_USE_RCSID 0
+#if 0
+typedef int mode_t;
+typedef int gid_t;
+typedef int uid_t;
+#endif
+#define ACE_LACKS_CUSERID
+#if 0
+#define ACE_LACKS_FSYNC
+#define ACE_LACKS_CHDIR
+#define ACE_LACKS_LSTAT
+#endif
+#define ACE_NEEDS_HUGE_THREAD_STACKSIZE 0x20000
+// #include <stdio.h>
+#define fileno(file) ((file)->io_channel) //Hack to get Svc_Conf_l.cpp compiled
+#define ACE_DEFAULT_THREAD_PRIORITY 127
+#define ACE_HAS_ATTR_SETSCHED
+#if 0
+#define ACE_LACKS_INHERIT_SCHED
+#endif
+#define PRI_FIFO_MIN 1
+#define PRI_FIFO_MAX 127
+#define ACE_THR_PRI_FIFO_DEF 127
+#define PRI_RR_MIN 1
+#define PRI_RR_MAX 127
+#define ACE_THR_PRI_RR_DEF 127
+#define PRI_OTHER_MIN 1
+#define PRI_OTHER_MAX 127
+#define ACE_THR_PRI_OTHER_DEF 127
+#define ACE_PTHREAD_RETURN_ON_EXIT
+#undef ACE_LACKS_UNLINK
+
+#define ACE_HAS_TIMED_MESSAGE_BLOCKS
+
+extern "C" {
+int unlink(const char *);
+}
+
+#define ACE_LACKS_SETSID
+#define ACE_HAS_TIMEZONE_GETTIMEOFDAY /* TZ is ignored */
+#define ACE_LACKS_UNIX_SYSLOG
+#define ACE_LACKS_TELLDIR
+#define ACE_LACKS_SEEKDIR
+#if 0
+#define ACE_LACKS_REWINDDIR
+#endif
+#define ACE_LACKS_GETHOSTENT
+
+
+/* end MIKEC Addtions */
+
+#endif /* ACE_CONFIG_H */
diff --git a/include/makeinclude/platform_integrity_ghs.GNU b/include/makeinclude/platform_integrity_ghs.GNU
new file mode 100644
index 00000000000..17786c44e36
--- /dev/null
+++ b/include/makeinclude/platform_integrity_ghs.GNU
@@ -0,0 +1,64 @@
+CROSS-COMPILE = 1
+
+ifndef debug
+ debug = 1
+endif
+ifndef optimize
+ optimize = 1
+endif
+ifndef rtti
+ rtti = 0
+endif # rtti
+shared_libs =
+static_libs = 1
+ifndef exceptions
+ exceptions = 1
+endif
+
+#### CPU type
+ifndef CPU
+ CPU = ppc
+endif # CPU
+
+INTEGRITYTARGET = 1
+
+#### Green Hills location, and target-specific definitions.
+ifndef GHSROOT
+ GHSROOT = /home/scooter2/i40_solaris2
+endif
+
+ifndef RTOSROOT
+ RTOSROOT = /export/integrity/rtos
+endif
+
+ifndef BSP
+ BSP = mcp750
+endif
+
+CC = $(GHSROOT)/cc$(CPU)
+CXX = $(GHSROOT)/cx$(CPU)
+
+# undefine "vector" because it's predefined for 7400 boards
+IOPS = -bspname=$(RTOSROOT)/target/$(BSP).bld -os_dir $(RTOSROOT) --one_instantiation_per_object -non_shared -Uvector
+ifeq (1, $(exceptions))
+ IOPS += --exceptions
+ override rtti = 1
+endif # exceptions
+
+CCFLAGS += $(CFLAGS) -integrate -dynamic -I$(RTOSROOT)/INTEGRITY-include-SCA $(IOPS) -bspfile=$(ACE_ROOT)/tests/ACE.bsp $(ACE_ROOT)/tests/INTEGRITY.ld
+DCFLAGS += -G
+SOFLAGS += -shared
+DLD = $(CXX)
+LD = $(CXX)
+LDLIBS += -lACE -lshm_client -lnet -livfssca -lposixsca -lsocket
+LDFLAGS = -lACE -lshm_client -lnet -livfssca -lposixsca -lsocket
+#LDFLAGS = --no_auto_instantiation
+#OCFLAGS += -OL -OM
+PIC =
+AR := $(CXX) -archive $(IOPS)
+ARFLAGS = -o
+
+
+ifeq (0, $(rtti))
+ CCFLAGS += --no_rtti
+endif # rtti
diff --git a/protocols/ace/RMCast/RMCast_Reassembly.cpp b/protocols/ace/RMCast/RMCast_Reassembly.cpp
index d20b72d88c5..9e4e9103c45 100644
--- a/protocols/ace/RMCast/RMCast_Reassembly.cpp
+++ b/protocols/ace/RMCast/RMCast_Reassembly.cpp
@@ -136,5 +136,15 @@ template class ACE_Hash_Map_Iterator_Base_Ex<ACE_UINT32,ACE_RMCast_Partial_Messa
template class ACE_Hash_Map_Entry<ACE_UINT32,ACE_RMCast_Partial_Message*>;
template class ACE_Less_Than<ACE_UINT32>;
-
+#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)
+#pragma instantiate ACE_Hash_Map_Manager<ACE_UINT32,ACE_RMCast_Partial_Message*,ACE_Null_Mutex>
+#pragma instantiate ACE_Hash_Map_Manager_Ex<ACE_UINT32,ACE_RMCast_Partial_Message*,ACE_Hash<ACE_UINT32>,ACE_Equal_To<ACE_UINT32>,ACE_Null_Mutex>
+#pragma instantiate ACE_Hash_Map_Iterator<ACE_UINT32,ACE_RMCast_Partial_Message*,ACE_Null_Mutex>
+#pragma instantiate ACE_Hash_Map_Iterator_Ex<ACE_UINT32,ACE_RMCast_Partial_Message*,ACE_Hash<ACE_UINT32>,ACE_Equal_To<ACE_UINT32>,ACE_Null_Mutex >
+#pragma instantiate ACE_Hash_Map_Reverse_Iterator_Ex<ACE_UINT32,ACE_RMCast_Partial_Message*,ACE_Hash<ACE_UINT32>,ACE_Equal_To<ACE_UINT32>,ACE_Null_Mutex >
+#pragma instantiate ACE_Hash_Map_Iterator_Base_Ex<ACE_UINT32,ACE_RMCast_Partial_Message*,ACE_Hash<ACE_UINT32>,ACE_Equal_To<ACE_UINT32>,ACE_Null_Mutex >
+#pragma instantiate ACE_Hash_Map_Entry<ACE_UINT32,ACE_RMCast_Partial_Message*>
+
+#pragma instantiate ACE_Less_Than<ACE_UINT32>
#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */
+
diff --git a/protocols/ace/RMCast/RMCast_Retransmission.cpp b/protocols/ace/RMCast/RMCast_Retransmission.cpp
index 7b626a4ef7d..d3c8ee97d84 100644
--- a/protocols/ace/RMCast/RMCast_Retransmission.cpp
+++ b/protocols/ace/RMCast/RMCast_Retransmission.cpp
@@ -131,4 +131,19 @@ template class ACE_RMCast_Copy_On_Write_Read_Guard<ACE_RMCast_Retransmission::Co
template class ACE_RMCast_Copy_On_Write_Collection<ACE_RMCast_Retransmission::Collection,ACE_RMCast_Retransmission::Collection_Iterator>;
template class ACE_RMCast_Worker<ACE_UINT32,ACE_RMCast::Data>;
+#elif defined(ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)
+
+#pragma instantiate ACE_RB_Tree<ACE_UINT32,ACE_RMCast::Data,ACE_Less_Than<ACE_UINT32>,ACE_Null_Mutex>
+#pragma instantiate ACE_RB_Tree_Iterator_Base<ACE_UINT32,ACE_RMCast::Data,ACE_Less_Than<ACE_UINT32>,ACE_Null_Mutex>
+#pragma instantiate ACE_RB_Tree_Iterator<ACE_UINT32,ACE_RMCast::Data,ACE_Less_Than<ACE_UINT32>,ACE_Null_Mutex>
+#pragma instantiate ACE_RB_Tree_Reverse_Iterator<ACE_UINT32,ACE_RMCast::Data,ACE_Less_Than<ACE_UINT32>,ACE_Null_Mutex>
+#pragma instantiate ACE_RB_Tree_Node<ACE_UINT32,ACE_RMCast::Data>
+
+#pragma instantiate ACE_RMCast_Copy_On_Write<ACE_UINT32,ACE_RMCast::Data,ACE_RMCast_Retransmission::Collection,ACE_RMCast_Retransmission::Collection_Iterator>
+#pragma instantiate ACE_RMCast_Copy_On_Write_Container<ACE_RMCast_Retransmission::Collection,ACE_RMCast_Retransmission::Collection_Iterator>
+#pragma instantiate ACE_RMCast_Copy_On_Write_Write_Guard<ACE_RMCast_Retransmission::Collection,ACE_RMCast_Retransmission::Collection_Iterator>
+#pragma instantiate ACE_RMCast_Copy_On_Write_Read_Guard<ACE_RMCast_Retransmission::Collection,ACE_RMCast_Retransmission::Collection_Iterator>
+#pragma instantiate ACE_RMCast_Copy_On_Write_Collection<ACE_RMCast_Retransmission::Collection,ACE_RMCast_Retransmission::Collection_Iterator>
+#pragma instantiate ACE_RMCast_Worker<ACE_UINT32,ACE_RMCast::Data>
+
#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */
diff --git a/tests/ACE.bsp b/tests/ACE.bsp
new file mode 100644
index 00000000000..58959b48998
--- /dev/null
+++ b/tests/ACE.bsp
@@ -0,0 +1,25 @@
+# Target description File for the Integrate utility for use with the
+# INTEGRITY real-time operating system by Green Hills Software.
+# Before editing this file, refer to your Integrate documentation.
+
+# ACE.bsp is only appropriate for dynamic download INTEGRITY applications
+# built for use with ACE/TAO
+
+Target
+ MinimumAddress 0x0
+ MaximumAddress 0x2fffffff
+ Clock StandardTick
+ EndClock
+ Clock HighResTimer
+ EndClock
+ Clock RealTimeClock
+ EndClock
+ InitialKernelObjects 50
+ DefaultStartIt false
+ DefaultMaxPriority 255
+ DefaultPriority 127
+ DefaultWeight 255
+ DefaultMaxWeight 255
+ DefaultStackSize 0x10000
+ DefaultMemoryRegionSize 0x100000
+EndTarget
diff --git a/tests/INTEGRITY.ld b/tests/INTEGRITY.ld
new file mode 100644
index 00000000000..d971fd3d4ad
--- /dev/null
+++ b/tests/INTEGRITY.ld
@@ -0,0 +1,31 @@
+# default link map for INTEGRITY
+# text (readonly) and data (read/write) areas must be page-aligned
+
+-sec
+{
+# text/readonly segment
+ .picbase 0x10000 :
+ .text :
+ .syscall :
+ .intercall :
+ .interfunc :
+ .secinfo :
+ .rodata :
+ .sdata2 :
+ .fixaddr :
+ .fixtype :
+# .textchecksum MUST be the last section of the text/readonly segment
+ .textchecksum :
+
+# data/readwrite segment
+ .pidbase align(0x4000) :
+ .data :
+ .sdabase :
+ .sdata :
+# .datachecksum MUST be the last section of the data portion of the
+# data/read/write segment (i.e., it must come before the BSS sections).
+ .datachecksum :
+ .sbss :
+ .bss :
+ .heap align(16) pad(0x800000) :
+}
diff --git a/tests/Token_Strategy_Test.cpp b/tests/Token_Strategy_Test.cpp
index 96a8c5f0981..a30f786c28e 100644
--- a/tests/Token_Strategy_Test.cpp
+++ b/tests/Token_Strategy_Test.cpp
@@ -249,9 +249,9 @@ template class ACE_Guard<ACE_Token>;
#pragma instantiate ACE_Atomic_Op<ACE_Thread_Mutex, int>
#pragma instantiate ACE_Atomic_Op_Ex<ACE_Thread_Mutex, int>
#pragma instantiate ACE_Vector<ACE_INT32>
-#pragma instantiate ACE_Array<ACE_INT32>;
-#pragma instantiate ACE_Array_Base<ACE_INT32>;
-#pragma instantiate ACE_Array_Iterator<ACE_INT32>;
+#pragma instantiate ACE_Array<ACE_INT32>
+#pragma instantiate ACE_Array_Base<ACE_INT32>
+#pragma instantiate ACE_Array_Iterator<ACE_INT32>
#pragma instantiate ACE_Auto_IncDec<ACE_Atomic_Op<ACE_Thread_Mutex, int> >
#pragma instantiate ACE_Guard<ACE_Token>
#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */