summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFred Hornsey <hornseyf@objectcomputing.com>2019-06-21 12:25:01 -0500
committerGitHub <noreply@github.com>2019-06-21 12:25:01 -0500
commitb1dee1f113c794e8df239a4b164458db63ab8507 (patch)
tree791a15d2184e3f5c624542c0ebc6edc0fbaced93
parent4a76c5d4c6606370ce3df6c34c5614c6f7393da2 (diff)
parentd2eb67e35258d1a67a74bf8a4da5258fc568f9d2 (diff)
downloadATCD-b1dee1f113c794e8df239a4b164458db63ab8507.tar.gz
Merge pull request #887 from iguessthislldo/igtd/gettid
Linux: Refactor config-linux.h and use gettid() for %t for Log_Msg
-rw-r--r--ACE/NEWS3
-rw-r--r--ACE/ace/Log_Msg.cpp21
-rw-r--r--ACE/ace/OS_NS_Thread.cpp13
-rw-r--r--ACE/ace/OS_NS_Thread.h20
-rw-r--r--ACE/ace/OS_NS_Thread.inl7
-rw-r--r--ACE/ace/config-android.h249
-rw-r--r--ACE/ace/config-linux-common.h255
-rw-r--r--ACE/ace/config-linux.h251
8 files changed, 341 insertions, 478 deletions
diff --git a/ACE/NEWS b/ACE/NEWS
index dd5a0c3fd96..1fce8d2e2fd 100644
--- a/ACE/NEWS
+++ b/ACE/NEWS
@@ -1,6 +1,9 @@
USER VISIBLE CHANGES BETWEEN ACE-6.5.5 and ACE-6.5.6
====================================================
+. On Linux, the ACE_Log_Msg format specifier `%t` is now replaced with the
+ system thread id provided by gettid(), instead of the much longer pthread id.
+
USER VISIBLE CHANGES BETWEEN ACE-6.5.4 and ACE-6.5.5
====================================================
diff --git a/ACE/ace/Log_Msg.cpp b/ACE/ace/Log_Msg.cpp
index 60a034399d2..aa2e354b068 100644
--- a/ACE/ace/Log_Msg.cpp
+++ b/ACE/ace/Log_Msg.cpp
@@ -1790,16 +1790,27 @@ ACE_Log_Msg::log (const ACE_TCHAR *format_str,
ACE_OS::sprintf (bp,
format,
static_cast <unsigned> (ACE_Thread::self ()));
-#elif defined ACE_USES_WCHAR
+#else
+
+# ifdef ACE_HAS_GETTID
+# define ACE_LOG_MSG_GET_THREAD_ID ACE_OS::thr_gettid
+# define ACE_LOG_MSG_GET_THREAD_ID_BUFFER_SIZE 8
+# else
+# define ACE_LOG_MSG_GET_THREAD_ID ACE_OS::thr_id
+# define ACE_LOG_MSG_GET_THREAD_ID_BUFFER_SIZE 32
+# endif
+
+# if defined ACE_USES_WCHAR
{
- char tid_buf[32] = {};
- ACE_OS::thr_id (tid_buf, sizeof tid_buf);
+ char tid_buf[ACE_LOG_MSG_GET_THREAD_ID_BUFFER_SIZE] = {};
+ ACE_LOG_MSG_GET_THREAD_ID (tid_buf, sizeof tid_buf);
this_len = ACE_OS::strlen (tid_buf);
ACE_OS::strncpy (bp, ACE_TEXT_CHAR_TO_TCHAR (tid_buf),
bspace);
}
-#else
- this_len = ACE_OS::thr_id (bp, bspace);
+# else
+ this_len = ACE_LOG_MSG_GET_THREAD_ID (bp, bspace);
+# endif /* ACE_USES_WCHAR */
#endif /* ACE_WIN32 */
ACE_UPDATE_COUNT (bspace, this_len);
break;
diff --git a/ACE/ace/OS_NS_Thread.cpp b/ACE/ace/OS_NS_Thread.cpp
index 8a052271775..37821a55ad7 100644
--- a/ACE/ace/OS_NS_Thread.cpp
+++ b/ACE/ace/OS_NS_Thread.cpp
@@ -17,6 +17,9 @@
#include "ace/Thread_Mutex.h"
#include "ace/Condition_Thread_Mutex.h"
#include "ace/Guard_T.h"
+#ifdef ACE_HAS_GETTID
+# include "ace/OS_NS_sys_resource.h" // syscall for gettid impl
+#endif
extern "C" void
ACE_MUTEX_LOCK_CLEANUP_ADAPTER_NAME (void *args)
@@ -4806,6 +4809,16 @@ ACE_OS::unique_name (const void *object,
}
#endif
+pid_t
+ACE_OS::thr_gettid ()
+{
+#ifdef ACE_HAS_GETTID
+ return syscall (SYS_gettid);
+#else
+ ACE_NOTSUP_RETURN (-1);
+#endif
+}
+
ACE_END_VERSIONED_NAMESPACE_DECL
#if defined (ACE_VXWORKS) && !defined (__RTP__)
diff --git a/ACE/ace/OS_NS_Thread.h b/ACE/ace/OS_NS_Thread.h
index f932a701cea..f5073d5ef85 100644
--- a/ACE/ace/OS_NS_Thread.h
+++ b/ACE/ace/OS_NS_Thread.h
@@ -1754,6 +1754,26 @@ namespace ACE_OS {
ACE_NAMESPACE_INLINE_FUNCTION
ssize_t thr_id (char buffer[], size_t buffer_length);
+ /**
+ * For systems that support it (Only Linux as of writing), this is a wrapper
+ * for pid_t gettid().
+ *
+ * It returns the system-wide thread id (TID) for the current thread. These
+ * are similar to PIDs and, for x86 Linux at least, are much shorter than
+ * what is returned from thr_self(), which is an address.
+ *
+ * For older Linux (pre 2.4.11) and other systems that don't have gettid(),
+ * this uses ACE_NOTSUP_RETURN (-1).
+ */
+ pid_t thr_gettid ();
+
+ /**
+ * Puts the string representation of pid_t thr_gettid() into the buffer and
+ * returns number of bytes added.
+ */
+ ACE_NAMESPACE_INLINE_FUNCTION
+ ssize_t thr_gettid (char buffer[], size_t buffer_length);
+
/// State is THR_CANCEL_ENABLE or THR_CANCEL_DISABLE
ACE_NAMESPACE_INLINE_FUNCTION
int thr_setcancelstate (int new_state, int *old_state);
diff --git a/ACE/ace/OS_NS_Thread.inl b/ACE/ace/OS_NS_Thread.inl
index d4023d05704..8fa3f86f19d 100644
--- a/ACE/ace/OS_NS_Thread.inl
+++ b/ACE/ace/OS_NS_Thread.inl
@@ -3184,6 +3184,13 @@ ACE_OS::thr_id (char buffer[], size_t buffer_length)
#endif /* WIN32 */
}
+ACE_INLINE ssize_t
+ACE_OS::thr_gettid (char buffer[], size_t buffer_length)
+{
+ return ACE_OS::snprintf (buffer, buffer_length, "%d",
+ static_cast<int> (ACE_OS::thr_gettid ()));
+}
+
ACE_INLINE ACE_thread_t
ACE_OS::thr_self (void)
{
diff --git a/ACE/ace/config-android.h b/ACE/ace/config-android.h
index 4cb908207ff..c30389f1f64 100644
--- a/ACE/ace/config-android.h
+++ b/ACE/ace/config-android.h
@@ -21,6 +21,8 @@
#define ACE_ANDROID
#define ACE_PLATFORM_CONFIG config-android.h
+#include "ace/config-linux-common.h"
+
/*
* Android NDK Revision Macros
*
@@ -86,12 +88,26 @@
# define ACE_HAS_SEMUN
#endif
+#if ACE_ANDROID_NDK_LESS_THAN(15, 0) && __ANDROID_API__ < 21
+// NOTE: The && is correct, SYS_GETTID is present in API 16 in r15 onwards
+# ifdef ACE_HAS_GETTID
+# undef ACE_HAS_GETTID
+# endif
+#endif
+
// NDK has telldir() and seekdir() by 15c
#if ACE_ANDROID_NDK_LESS_THAN(15, 2) || __ANDROID_API__ < 23
# define ACE_LACKS_TELLDIR
# define ACE_LACKS_SEEKDIR
#endif
+// strbuf was added by r16
+#if ACE_ANDROID_NDK_LESS_THAN(16, 0)
+# ifdef ACE_HAS_STRBUF_T
+# undef ACE_HAS_STRBUF_T
+# endif
+#endif
+
// fd_mask was added in r17c
#if ACE_ANDROID_NDK_LESS_THAN(17, 2)
# define ACE_LACKS_FD_MASK
@@ -102,6 +118,9 @@
# define ACE_LACKS_WCSTOLL
# define ACE_LACKS_WCSTOULL
# define ACE_LACKS_CONDATTR_SETCLOCK
+# ifdef ACE_HAS_EVENT_POLL
+# undef ACE_HAS_EVENT_POLL
+# endif
#endif
// These were available before r18, but in r18 they are restricted to API >= 28 ¯\_(ツ)_/¯
@@ -110,11 +129,12 @@
# define ACE_LACKS_ENDHOSTENT
#endif
-#define ACE_HAS_SSIZE_T
+#if !defined(ACE_HAS_GLIBC_2_2_3) && (ACE_ANDROID_NDK_AT_LEAST(15, 0) || __ANDROID_API__ >= 21)
+# define ACE_HAS_CPU_SET_T
+#endif
// system errorno is a volatile int
#define ACE_HAS_VOLATILE_ERRNO
-
#define ACE_ERRNO_TYPE volatile int
// Android doesn't check is sig is out of range.
@@ -153,15 +173,6 @@
// Used in tests/Sequence_Unit_Tests/string_sequence_tester.hpp
# define TAO_LACKS_WCHAR_CXX_STDLIB
-#if !defined (ACE_MT_SAFE)
-# define ACE_MT_SAFE 1
-#endif
-
-// Needed to differentiate between libc 5 and libc 6 (aka glibc).
-#include <features.h>
-
-#include "ace/config-posix.h"
-
// @todo JW, test if this works
// #define ACE_HAS_POSIX_SEM
// #define ACE_HAS_POSIX_SEM_TIMEOUT
@@ -174,231 +185,17 @@
# undef ACE_HAS_AIO_CALLS
#endif
-// First the machine specific part
-#if defined (__powerpc__) || defined (__x86_64__)
-# if !defined (ACE_DEFAULT_BASE_ADDR)
-# define ACE_DEFAULT_BASE_ADDR ((char *) 0x40000000)
-# endif /* ! ACE_DEFAULT_BASE_ADDR */
-#endif /* ! __powerpc__ && ! __ia64 */
-
#define ACE_HAS_SIGINFO_T
#define ACE_HAS_SOCKLEN_T
#define ACE_HAS_4_4BSD_SENDMSG_RECVMSG
-#define ACE_HAS_LSEEK64
-//#define ACE_LACKS_LSEEK64_PROTOTYPE
-
-#define ACE_HAS_P_READ_WRITE
-// Use ACE's alternate cuserid() implementation since the use of the
-// system cuserid() is discouraged.
#define ACE_LACKS_CUSERID
-#define ACE_HAS_ALT_CUSERID
-
-#if (__GLIBC__ > 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)
-# define ACE_HAS_ISASTREAM_PROTOTYPE
-# define ACE_HAS_PTHREAD_SIGMASK_PROTOTYPE
-# define ACE_HAS_CPU_SET_T
-#elif ACE_ANDROID_NDK_AT_LEAST(15, 0) || __ANDROID_API__ >= 21
-# define ACE_HAS_CPU_SET_T
-#endif /* __GLIBC__ > 2 || __GLIBC__ === 2 && __GLIBC_MINOR__ >= 3) */
-
-// Then the compiler specific parts
-
-#if defined (__GNUG__)
- // config-g++-common.h undef's ACE_HAS_STRING_CLASS with -frepo, so
- // this must appear before its #include.
-# define ACE_HAS_STRING_CLASS
-# include "ace/config-g++-common.h"
-#elif defined (__GNUC__)
-/**
- * GNU C compiler.
- *
- * We need to recognize the GNU C compiler since TAO has at least one
- * C source header and file
- * (TAO/orbsvcs/orbsvcs/SSLIOP/params_dup.{h,c}) that may indirectly
- * include this
- */
-#else /* ! __GNUG__ && !__DECCXX && !__INTEL_COMPILER && && !__PGI */
-# ifdef __cplusplus /* Let it slide for C compilers. */
-# error unsupported compiler in ace/config-android.h
-# endif /* __cplusplus */
-#endif /* ! __GNUG__*/
-
-// Completely common part :-)
-
-// Platform/compiler has the sigwait(2) prototype
-#define ACE_HAS_SIGWAIT
-
-#define ACE_HAS_SIGSUSPEND
-
-#define ACE_HAS_STRSIGNAL
-
-#ifndef ACE_HAS_POSIX_REALTIME_SIGNALS
-# define ACE_HAS_POSIX_REALTIME_SIGNALS
-#endif /* ACE_HAS_POSIX_REALTIME_SIGNALS */
-
-#define ACE_HAS_XPG4_MULTIBYTE_CHAR
-#define ACE_HAS_VFWPRINTF
-
-#define ACE_LACKS_ITOW
-#define ACE_LACKS_WCSICMP
-#define ACE_LACKS_WCSNICMP
-#define ACE_LACKS_ISWASCII
-
-#define ACE_HAS_3_PARAM_WCSTOK
-
-#define ACE_HAS_3_PARAM_READDIR_R
-
-#if !defined (ACE_DEFAULT_BASE_ADDR)
-# define ACE_DEFAULT_BASE_ADDR ((char *) 0x80000000)
-#endif /* ! ACE_DEFAULT_BASE_ADDR */
-
-#define ACE_HAS_ALLOCA
-
-// Compiler/platform has <alloca.h>
-#define ACE_HAS_ALLOCA_H
-#define ACE_HAS_SYS_SYSINFO_H
-#define ACE_HAS_LINUX_SYSINFO
-
-// Compiler/platform has the getrusage() system call.
-#define ACE_HAS_GETRUSAGE
-#define ACE_HAS_GETRUSAGE_PROTOTYPE
-
-#define ACE_HAS_BYTESWAP_H
-#define ACE_HAS_BSWAP_16
-#define ACE_HAS_BSWAP_32
-#define ACE_HAS_BSWAP_64
-
-#define ACE_HAS_CONSISTENT_SIGNAL_PROTOTYPES
-
-// Optimize ACE_Handle_Set for select().
-#define ACE_HAS_HANDLE_SET_OPTIMIZED_FOR_SELECT
-
-// ONLY define this if you have config'd multicast into a 2.0.34 or
-// prior kernel. It is enabled by default in 2.0.35 kernels.
-#if !defined (ACE_HAS_IP_MULTICAST)
-# define ACE_HAS_IP_MULTICAST
-#endif /* ! ACE_HAS_IP_MULTICAST */
-
-// At least for IPv4, Linux lacks perfect filtering.
-#if !defined ACE_LACKS_PERFECT_MULTICAST_FILTERING
-# define ACE_LACKS_PERFECT_MULTICAST_FILTERING 1
-#endif /* ACE_LACKS_PERFECT_MULTICAST_FILTERING */
-
-#define ACE_HAS_BIG_FD_SET
-
-// Linux defines struct msghdr in /usr/include/socket.h
-#define ACE_HAS_MSG
-
-// Linux "improved" the interface to select() so that it modifies
-// the struct timeval to reflect the amount of time not slept
-// (see NOTES in Linux's select(2) man page).
-#define ACE_HAS_NONCONST_SELECT_TIMEVAL
-
-#define ACE_DEFAULT_MAX_SOCKET_BUFSIZ 65535
-
-#define ACE_CDR_IMPLEMENT_WITH_NATIVE_DOUBLE 1
-
-#define ACE_HAS_GETPAGESIZE 1
-
-// Platform defines struct timespec but not timespec_t
-#define ACE_LACKS_TIMESPEC_T
-
-// Platform supplies scandir()
-#define ACE_HAS_SCANDIR
#define ACE_MMAP_NO_ZERO
-// Compiler/platform contains the <sys/syscall.h> file.
-#define ACE_HAS_SYS_SYSCALL_H
-
-#define ACE_HAS_TIMEZONE_GETTIMEOFDAY
-
-// Compiler supports the ssize_t typedef.
-#define ACE_HAS_SSIZE_T
-
-// Compiler/platform defines the sig_atomic_t typedef.
-#define ACE_HAS_SIG_ATOMIC_T
-
-#define ACE_HAS_POSIX_TIME
-
-#define ACE_HAS_GPERF
-
-#define ACE_HAS_DIRENT
-
-// Starting with FC9 rawhide this file is not available anymore but
-// this define is set
-#if defined _XOPEN_STREAMS && _XOPEN_STREAMS == -1
-# define ACE_LACKS_STROPTS_H
-# define ACE_LACKS_STRRECVFD
-#endif
-
-#if !defined (ACE_LACKS_STROPTS_H)
-# define ACE_HAS_STRBUF_T
-#endif
-
-#if defined (__ia64) || defined(__alpha) || defined (__x86_64__) || defined(__powerpc64__)
-// On 64 bit platforms, the "long" type is 64-bits. Override the
-// default 32-bit platform-specific format specifiers appropriately.
-# define ACE_UINT64_FORMAT_SPECIFIER_ASCII "%lu"
-# define ACE_SSIZE_T_FORMAT_SPECIFIER_ASCII "%ld"
-# define ACE_SIZE_T_FORMAT_SPECIFIER_ASCII "%lu"
-#endif /* __ia64 */
-
-#define ACE_SIZEOF_WCHAR 4
-
-// Platform has POSIX terminal interface.
-#define ACE_HAS_TERMIOS
-
-// Linux implements sendfile().
-#define ACE_HAS_SENDFILE 1
-
-#define ACE_HAS_VOIDPTR_MMAP
-
-#define ACE_HAS_VASPRINTF
-
-#define ACE_LACKS_PTHREAD_SCOPE_PROCESS
-
-// According to man pages Linux uses different (compared to UNIX systems) types
-// for setting IP_MULTICAST_TTL and IPV6_MULTICAST_LOOP / IP_MULTICAST_LOOP
-// in setsockopt/getsockopt.
-#define ACE_HAS_IP_MULTICAST_TTL_AS_INT 1
-#define ACE_HAS_IPV6_MULTICAST_LOOP_AS_BOOL 1
-#define ACE_HAS_IP_MULTICAST_LOOP_AS_INT 1
-
#define ACE_HAS_NETLINK
#define ACE_HAS_SIOCGIFCONF
-#if !defined (ACE_GETNAME_RETURNS_RANDOM_SIN_ZERO)
-// Detect if getsockname() and getpeername() returns random values in
-// the sockaddr_in::sin_zero field by evaluation of the kernel
-// version. Since version 2.5.47 this problem is fixed.
-# if !defined (ACE_LACKS_LINUX_VERSION_H)
-# include <linux/version.h>
-# endif /* !ACE_LACKS_LINUX_VERSION_H */
-# if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,47))
-# define ACE_GETNAME_RETURNS_RANDOM_SIN_ZERO 0
-# else
-# define ACE_GETNAME_RETURNS_RANDOM_SIN_ZERO 1
-# endif /* (LINUX_VERSION_CODE <= KERNEL_VERSION(2,5,47)) */
-#endif /* ACE_GETNAME_RETURNS_RANDOM_SIN_ZERO */
-
-#if !defined (ACE_HAS_EVENT_POLL) && !defined (ACE_HAS_DEV_POLL)
-# if !defined (ACE_LACKS_LINUX_VERSION_H)
-# include <linux/version.h>
-# endif /* !ACE_LACKS_LINUX_VERSION_H */
-#endif
-
-#define ACE_HAS_SVR4_DYNAMIC_LINKING
-#define ACE_HAS_AUTOMATIC_INIT_FINI
-#define ACE_HAS_DLSYM_SEGFAULT_ON_INVALID_HANDLE
-#define ACE_HAS_RECURSIVE_MUTEXES
-#define ACE_HAS_THREAD_SPECIFIC_STORAGE
-#define ACE_HAS_RECURSIVE_THR_EXIT_SEMANTICS
-#define ACE_HAS_2_PARAM_ASCTIME_R_AND_CTIME_R
-#define ACE_HAS_REENTRANT_FUNCTIONS
-#define ACE_HAS_TIMEZONE
-
#if !defined ACE_DEFAULT_TEMP_DIR
# define ACE_DEFAULT_TEMP_DIR "/data/tmp"
#endif
@@ -407,6 +204,8 @@
# define TEST_DIR "/data"
#endif
+#define ACE_HAS_DLSYM_SEGFAULT_ON_INVALID_HANDLE
+
#if !defined (ACE_AS_STATIC_LIBS)
# if (__GNUC__ == 4 && __GNUC_MINOR__ == 4)
# error Shared library support is not possible with GCC 4.4.x
diff --git a/ACE/ace/config-linux-common.h b/ACE/ace/config-linux-common.h
new file mode 100644
index 00000000000..b9d112602ad
--- /dev/null
+++ b/ACE/ace/config-linux-common.h
@@ -0,0 +1,255 @@
+/**
+ * Common configuration for platforms using the Linux Kernel, specifically
+ * ACE_LINUX and ACE_ANDROID as of writing. config-android.h was originally
+ * based off config-linux.h and this file was created from the common parts of
+ * both.
+ */
+#ifndef ACE_CONFIG_LINUX_COMMON_H
+#define ACE_CONFIG_LINUX_COMMON_H
+
+#if !defined (ACE_MT_SAFE)
+# define ACE_MT_SAFE 1
+#endif
+
+// Compiler supports the ssize_t typedef.
+#define ACE_HAS_SSIZE_T
+
+// Needed to differentiate between libc 5 and libc 6 (aka glibc).
+#include <features.h>
+
+#include "ace/config-posix.h"
+
+#ifndef ACE_DEFAULT_BASE_ADDR
+# if defined (__powerpc__) || defined (__x86_64__)
+# define ACE_DEFAULT_BASE_ADDR (reinterpret_cast< char* >(0x40000000))
+# elif defined (__ia64)
+// Zero base address should work fine for Linux of IA-64: it just lets
+// the kernel to choose the right value.
+# define ACE_DEFAULT_BASE_ADDR (reinterpret_cast< char*>(0x0000000000000000))
+# else
+# define ACE_DEFAULT_BASE_ADDR (reinterpret_cast< char* >(0x80000000))
+# endif
+#endif /* ! ACE_DEFAULT_BASE_ADDR */
+
+#define ACE_HAS_LSEEK64
+
+#define ACE_HAS_P_READ_WRITE
+// Use ACE's alternate cuserid() implementation since the use of the
+// system cuserid() is discouraged.
+#define ACE_HAS_ALT_CUSERID
+
+#if (__GLIBC__ > 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)
+# define ACE_HAS_ISASTREAM_PROTOTYPE
+# define ACE_HAS_PTHREAD_SIGMASK_PROTOTYPE
+# define ACE_HAS_CPU_SET_T
+# define ACE_HAS_GLIBC_2_2_3
+#endif /* __GLIBC__ > 2 || __GLIBC__ === 2 && __GLIBC_MINOR__ >= 3) */
+
+#if defined (__INTEL_COMPILER)
+# include "ace/config-icc-common.h"
+#elif defined (__GNUG__)
+ // config-g++-common.h undef's ACE_HAS_STRING_CLASS with -frepo, so
+ // this must appear before its #include.
+# define ACE_HAS_STRING_CLASS
+# include "ace/config-g++-common.h"
+#elif defined (__SUNCC_PRO) || defined (__SUNPRO_CC)
+# include "ace/config-suncc-common.h"
+#elif defined (__PGI)
+// Portable group compiler
+# define ACE_HAS_CPLUSPLUS_HEADERS
+# define ACE_HAS_STDCPP_STL_INCLUDES
+# define ACE_HAS_STANDARD_CPP_LIBRARY 1
+# define ACE_USES_STD_NAMESPACE_FOR_STDCPP_LIB 1
+# define ACE_LACKS_SWAB
+#elif defined (__GNUC__)
+/**
+ * GNU C compiler.
+ *
+ * We need to recognize the GNU C compiler since TAO has at least one
+ * C source header and file
+ * (TAO/orbsvcs/orbsvcs/SSLIOP/params_dup.{h,c}) that may indirectly
+ * include this
+ */
+#else /* ! __GNUG__ && !__DECCXX && !__INTEL_COMPILER && && !__PGI */
+# ifdef __cplusplus /* Let it slide for C compilers. */
+# error unsupported compiler in ace/config-linux.h
+# endif /* __cplusplus */
+#endif /* ! __GNUG__*/
+
+// Platform/compiler has the sigwait(2) prototype
+#define ACE_HAS_SIGWAIT
+
+#define ACE_HAS_SIGSUSPEND
+
+#define ACE_HAS_STRSIGNAL
+
+#ifndef ACE_HAS_POSIX_REALTIME_SIGNALS
+# define ACE_HAS_POSIX_REALTIME_SIGNALS
+#endif /* ACE_HAS_POSIX_REALTIME_SIGNALS */
+
+#define ACE_HAS_XPG4_MULTIBYTE_CHAR
+#define ACE_HAS_VFWPRINTF
+
+#define ACE_LACKS_ITOW
+#define ACE_LACKS_WCSICMP
+#define ACE_LACKS_WCSNICMP
+#define ACE_LACKS_ISWASCII
+
+#define ACE_HAS_3_PARAM_WCSTOK
+
+#define ACE_HAS_3_PARAM_READDIR_R
+
+#define ACE_HAS_ALLOCA
+
+// Compiler/platform has <alloca.h>
+#define ACE_HAS_ALLOCA_H
+#define ACE_HAS_SYS_SYSINFO_H
+#define ACE_HAS_LINUX_SYSINFO
+
+// Compiler/platform has the getrusage() system call.
+#define ACE_HAS_GETRUSAGE
+#define ACE_HAS_GETRUSAGE_PROTOTYPE
+
+#define ACE_HAS_BYTESWAP_H
+#define ACE_HAS_BSWAP_16
+#define ACE_HAS_BSWAP_32
+
+#if defined (__GNUC__)
+# define ACE_HAS_BSWAP_64
+#endif
+
+#define ACE_HAS_CONSISTENT_SIGNAL_PROTOTYPES
+
+// Optimize ACE_Handle_Set for select().
+#define ACE_HAS_HANDLE_SET_OPTIMIZED_FOR_SELECT
+
+// ONLY define this if you have config'd multicast into a 2.0.34 or
+// prior kernel. It is enabled by default in 2.0.35 kernels.
+#if !defined (ACE_HAS_IP_MULTICAST)
+# define ACE_HAS_IP_MULTICAST
+#endif /* ! ACE_HAS_IP_MULTICAST */
+
+// At least for IPv4, Linux lacks perfect filtering.
+#if !defined ACE_LACKS_PERFECT_MULTICAST_FILTERING
+# define ACE_LACKS_PERFECT_MULTICAST_FILTERING 1
+#endif /* ACE_LACKS_PERFECT_MULTICAST_FILTERING */
+
+#define ACE_HAS_BIG_FD_SET
+
+// Linux defines struct msghdr in /usr/include/socket.h
+#define ACE_HAS_MSG
+
+// Linux "improved" the interface to select() so that it modifies
+// the struct timeval to reflect the amount of time not slept
+// (see NOTES in Linux's select(2) man page).
+#define ACE_HAS_NONCONST_SELECT_TIMEVAL
+
+#define ACE_DEFAULT_MAX_SOCKET_BUFSIZ 65535
+
+#define ACE_CDR_IMPLEMENT_WITH_NATIVE_DOUBLE 1
+
+#define ACE_HAS_GETPAGESIZE 1
+
+// Platform defines struct timespec but not timespec_t
+#define ACE_LACKS_TIMESPEC_T
+
+// Platform supplies scandir()
+#define ACE_HAS_SCANDIR
+
+// Compiler/platform contains the <sys/syscall.h> file.
+#define ACE_HAS_SYS_SYSCALL_H
+
+#define ACE_HAS_TIMEZONE
+#define ACE_HAS_TIMEZONE_GETTIMEOFDAY
+
+// Compiler/platform defines the sig_atomic_t typedef.
+#define ACE_HAS_SIG_ATOMIC_T
+
+#define ACE_HAS_POSIX_TIME
+
+#define ACE_HAS_GPERF
+
+#define ACE_HAS_DIRENT
+
+// Starting with FC9 rawhide this file is not available anymore but
+// this define is set
+#if defined _XOPEN_STREAMS && _XOPEN_STREAMS == -1
+# define ACE_LACKS_STROPTS_H
+# define ACE_LACKS_STRRECVFD
+#endif
+
+#if !defined (ACE_LACKS_STROPTS_H)
+# define ACE_HAS_STRBUF_T
+#endif
+
+#if defined (__ia64) || defined(__alpha) || defined (__x86_64__) || defined(__powerpc64__) || (defined(__mips__) && defined(__LP64__)) || defined (__aarch64__)
+// On 64 bit platforms, the "long" type is 64-bits. Override the
+// default 32-bit platform-specific format specifiers appropriately.
+# define ACE_UINT64_FORMAT_SPECIFIER_ASCII "%lu"
+# define ACE_SSIZE_T_FORMAT_SPECIFIER_ASCII "%ld"
+# define ACE_SIZE_T_FORMAT_SPECIFIER_ASCII "%lu"
+#endif /* __ia64 */
+
+#define ACE_SIZEOF_WCHAR 4
+
+// Platform has POSIX terminal interface.
+#define ACE_HAS_TERMIOS
+
+// Linux implements sendfile().
+#define ACE_HAS_SENDFILE 1
+
+#define ACE_HAS_VOIDPTR_MMAP
+
+#define ACE_HAS_VASPRINTF
+
+#define ACE_LACKS_PTHREAD_SCOPE_PROCESS
+
+// According to man pages Linux uses different (compared to UNIX systems) types
+// for setting IP_MULTICAST_TTL and IPV6_MULTICAST_LOOP / IP_MULTICAST_LOOP
+// in setsockopt/getsockopt.
+// In the current (circa 2012) kernel source however there is an explicit check
+// for IPV6_MULTICAST_LOOP being sizeof(int). Anything else is rejected so it must
+// not be a passed a bool, irrespective of what the man pages (still) say.
+// i.e. #define ACE_HAS_IPV6_MULTICAST_LOOP_AS_BOOL 1 is wrong
+#define ACE_HAS_IP_MULTICAST_TTL_AS_INT 1
+#define ACE_HAS_IP_MULTICAST_LOOP_AS_INT 1
+
+#define ACE_HAS_SVR4_DYNAMIC_LINKING
+#define ACE_HAS_AUTOMATIC_INIT_FINI
+#define ACE_HAS_RECURSIVE_MUTEXES
+#define ACE_HAS_THREAD_SPECIFIC_STORAGE
+#define ACE_HAS_RECURSIVE_THR_EXIT_SEMANTICS
+#define ACE_HAS_2_PARAM_ASCTIME_R_AND_CTIME_R
+#define ACE_HAS_REENTRANT_FUNCTIONS
+
+/* ===========================================================================
+ * By Kernel API Version
+ * ===========================================================================
+ */
+
+#if !defined (ACE_LACKS_LINUX_VERSION_H)
+# include <linux/version.h>
+#endif /* !ACE_LACKS_LINUX_VERSION_H */
+
+#if !defined (ACE_GETNAME_RETURNS_RANDOM_SIN_ZERO)
+// Detect if getsockname() and getpeername() returns random values in
+// the sockaddr_in::sin_zero field by evaluation of the kernel
+// version. Since version 2.5.47 this problem is fixed.
+# if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,47))
+# define ACE_GETNAME_RETURNS_RANDOM_SIN_ZERO 0
+# else
+# define ACE_GETNAME_RETURNS_RANDOM_SIN_ZERO 1
+# endif /* (LINUX_VERSION_CODE <= KERNEL_VERSION(2,5,47)) */
+#endif /* ACE_GETNAME_RETURNS_RANDOM_SIN_ZERO */
+
+#if !defined (ACE_HAS_EVENT_POLL) && !defined (ACE_HAS_DEV_POLL)
+# if (LINUX_VERSION_CODE > KERNEL_VERSION (2,6,0))
+# define ACE_HAS_EVENT_POLL
+# endif
+#endif
+
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION (2,4,11))
+# define ACE_HAS_GETTID // See ACE_OS::thr_gettid()
+#endif
+
+#endif
diff --git a/ACE/ace/config-linux.h b/ACE/ace/config-linux.h
index e248aea30b3..954d61f091d 100644
--- a/ACE/ace/config-linux.h
+++ b/ACE/ace/config-linux.h
@@ -10,10 +10,6 @@
#define ACE_LINUX
#endif /* ACE_LINUX */
-#if !defined (ACE_MT_SAFE)
-# define ACE_MT_SAFE 1
-#endif
-
#if !defined (__ACE_INLINE__)
# define __ACE_INLINE__
#endif /* ! __ACE_INLINE__ */
@@ -22,17 +18,14 @@
#define ACE_PLATFORM_CONFIG config-linux.h
#endif
-#define ACE_HAS_BYTESEX_H
+#include "ace/config-linux-common.h"
-// Needed to differentiate between libc 5 and libc 6 (aka glibc).
-#include <features.h>
+#define ACE_HAS_BYTESEX_H
#if (defined _XOPEN_SOURCE && (_XOPEN_SOURCE - 0) >= 500)
# define ACE_HAS_PTHREADS_UNIX98_EXT
#endif /* _XOPEN_SOURCE - 0 >= 500 */
-# include "ace/config-posix.h"
-
#if !defined (ACE_LACKS_LINUX_NPTL)
// Temporary fix because NPTL kernels do have shm_open but there is a problem
@@ -65,20 +58,6 @@
# undef ACE_HAS_AIO_CALLS
#endif
-// First the machine specific part
-
-#if defined (__powerpc__) || defined (__x86_64__)
-# if !defined (ACE_DEFAULT_BASE_ADDR)
-# define ACE_DEFAULT_BASE_ADDR (reinterpret_cast< char* >(0x40000000))
-# endif /* ! ACE_DEFAULT_BASE_ADDR */
-#elif defined (__ia64)
-# if !defined (ACE_DEFAULT_BASE_ADDR)
-// Zero base address should work fine for Linux of IA-64: it just lets
-// the kernel to choose the right value.
-# define ACE_DEFAULT_BASE_ADDR (reinterpret_cast< char*>(0x0000000000000000))
-# endif /* ! ACE_DEFAULT_BASE_ADDR */
-#endif /* ! __powerpc__ && ! __ia64 */
-
// Then glibc/libc5 specific parts
#if defined(__GLIBC__) || defined (__INTEL_COMPILER)
@@ -123,144 +102,14 @@
# define ACE_LACKS_MSG_ACCRIGHTS
#endif /* ! __GLIBC__ */
-#define ACE_HAS_LSEEK64
-//#define ACE_LACKS_LSEEK64_PROTOTYPE
-
-#define ACE_HAS_P_READ_WRITE
-// Use ACE's alternate cuserid() implementation since the use of the
-// system cuserid() is discouraged.
-#define ACE_HAS_ALT_CUSERID
-
-#if (__GLIBC__ > 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)
-# define ACE_HAS_ISASTREAM_PROTOTYPE
-# define ACE_HAS_PTHREAD_SIGMASK_PROTOTYPE
-# define ACE_HAS_CPU_SET_T
-#endif /* __GLIBC__ > 2 || __GLIBC__ === 2 && __GLIBC_MINOR__ >= 3) */
-
-// Then the compiler specific parts
-
-#if defined (__INTEL_COMPILER)
-# include "ace/config-icc-common.h"
-#elif defined (__GNUG__)
- // config-g++-common.h undef's ACE_HAS_STRING_CLASS with -frepo, so
- // this must appear before its #include.
-# define ACE_HAS_STRING_CLASS
-# include "ace/config-g++-common.h"
-#elif defined (__SUNCC_PRO) || defined (__SUNPRO_CC)
-# include "ace/config-suncc-common.h"
-#elif defined (__PGI)
-// Portable group compiler
-# define ACE_HAS_CPLUSPLUS_HEADERS
-# define ACE_HAS_STDCPP_STL_INCLUDES
-# define ACE_HAS_STANDARD_CPP_LIBRARY 1
-# define ACE_USES_STD_NAMESPACE_FOR_STDCPP_LIB 1
-# define ACE_LACKS_SWAB
-#elif defined (__GNUC__)
-/**
- * GNU C compiler.
- *
- * We need to recognize the GNU C compiler since TAO has at least one
- * C source header and file
- * (TAO/orbsvcs/orbsvcs/SSLIOP/params_dup.{h,c}) that may indirectly
- * include this
- */
-#else /* ! __GNUG__ && !__DECCXX && !__INTEL_COMPILER && && !__PGI */
-# ifdef __cplusplus /* Let it slide for C compilers. */
-# error unsupported compiler in ace/config-linux.h
-# endif /* __cplusplus */
-#endif /* ! __GNUG__*/
-
// Completely common part :-)
-// Platform/compiler has the sigwait(2) prototype
-#define ACE_HAS_SIGWAIT
-
-#define ACE_HAS_SIGSUSPEND
-
#define ACE_HAS_UALARM
-#define ACE_HAS_STRSIGNAL
-
-#ifndef ACE_HAS_POSIX_REALTIME_SIGNALS
-# define ACE_HAS_POSIX_REALTIME_SIGNALS
-#endif /* ACE_HAS_POSIX_REALTIME_SIGNALS */
-
-#define ACE_HAS_XPG4_MULTIBYTE_CHAR
-#define ACE_HAS_VFWPRINTF
-
-#define ACE_LACKS_ITOW
-#define ACE_LACKS_WCSICMP
-#define ACE_LACKS_WCSNICMP
-#define ACE_LACKS_ISWASCII
-
-#define ACE_HAS_3_PARAM_WCSTOK
-
-#define ACE_HAS_3_PARAM_READDIR_R
-
-#if !defined (ACE_DEFAULT_BASE_ADDR)
-# define ACE_DEFAULT_BASE_ADDR (reinterpret_cast< char* >(0x80000000))
-#endif /* ! ACE_DEFAULT_BASE_ADDR */
-
-#define ACE_HAS_ALLOCA
-
-// Compiler/platform has <alloca.h>
-#define ACE_HAS_ALLOCA_H
-#define ACE_HAS_SYS_SYSINFO_H
-#define ACE_HAS_LINUX_SYSINFO
-
-// Compiler/platform has the getrusage() system call.
-#define ACE_HAS_GETRUSAGE
-#define ACE_HAS_GETRUSAGE_PROTOTYPE
-
-#define ACE_HAS_BYTESWAP_H
-#define ACE_HAS_BSWAP_16
-#define ACE_HAS_BSWAP_32
-
-#if defined (__GNUC__)
-# define ACE_HAS_BSWAP_64
-#endif
-
-#define ACE_HAS_CONSISTENT_SIGNAL_PROTOTYPES
-
-// Optimize ACE_Handle_Set for select().
-#define ACE_HAS_HANDLE_SET_OPTIMIZED_FOR_SELECT
-
-// ONLY define this if you have config'd multicast into a 2.0.34 or
-// prior kernel. It is enabled by default in 2.0.35 kernels.
-#if !defined (ACE_HAS_IP_MULTICAST)
-# define ACE_HAS_IP_MULTICAST
-#endif /* ! ACE_HAS_IP_MULTICAST */
-
-// At least for IPv4, Linux lacks perfect filtering.
-#if !defined ACE_LACKS_PERFECT_MULTICAST_FILTERING
-# define ACE_LACKS_PERFECT_MULTICAST_FILTERING 1
-#endif /* ACE_LACKS_PERFECT_MULTICAST_FILTERING */
-
-#define ACE_HAS_BIG_FD_SET
-
-// Linux defines struct msghdr in /usr/include/socket.h
-#define ACE_HAS_MSG
-
-// Linux "improved" the interface to select() so that it modifies
-// the struct timeval to reflect the amount of time not slept
-// (see NOTES in Linux's select(2) man page).
-#define ACE_HAS_NONCONST_SELECT_TIMEVAL
-
-#define ACE_DEFAULT_MAX_SOCKET_BUFSIZ 65535
-
-#define ACE_CDR_IMPLEMENT_WITH_NATIVE_DOUBLE 1
-
-#define ACE_HAS_GETPAGESIZE 1
-
-// Platform defines struct timespec but not timespec_t
-#define ACE_LACKS_TIMESPEC_T
-
-// Platform supplies scandir()
-#define ACE_HAS_SCANDIR
#if (__GLIBC__ < 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 10)
// Although the scandir man page says otherwise, this setting is correct.
// The setting was fixed in 2.10, so do not use the hack after that.
-#define ACE_SCANDIR_CMP_USES_CONST_VOIDPTR
+# define ACE_SCANDIR_CMP_USES_CONST_VOIDPTR
#endif
// A conflict appears when including both <ucontext.h> and
@@ -270,82 +119,19 @@
// Platform supports System V IPC (most versions of UNIX, but not Win32)
#define ACE_HAS_SYSV_IPC
-// Compiler/platform contains the <sys/syscall.h> file.
-#define ACE_HAS_SYS_SYSCALL_H
-
-// Platform/compiler supports global timezone variable.
-#define ACE_HAS_TIMEZONE
-
-#define ACE_HAS_TIMEZONE_GETTIMEOFDAY
-
-// Compiler supports the ssize_t typedef.
-#define ACE_HAS_SSIZE_T
-
-// Compiler/platform defines the sig_atomic_t typedef.
-#define ACE_HAS_SIG_ATOMIC_T
-
// Compiler/platform defines a union semun for SysV shared memory.
#define ACE_HAS_SEMUN
-#define ACE_HAS_POSIX_TIME
-
-#define ACE_HAS_GPERF
-
-#define ACE_HAS_DIRENT
-
-// Starting with FC9 rawhide this file is not available anymore but
-// this define is set
-#if defined _XOPEN_STREAMS && _XOPEN_STREAMS == -1
-# define ACE_LACKS_STROPTS_H
-# define ACE_LACKS_STRRECVFD
-#endif
-
-#if !defined (ACE_LACKS_STROPTS_H)
-# define ACE_HAS_STRBUF_T
-#endif
-
-#if defined (__ia64) || defined(__alpha) || defined (__x86_64__) || defined(__powerpc64__) || (defined(__mips__) && defined(__LP64__)) || defined (__aarch64__)
-// On 64 bit platforms, the "long" type is 64-bits. Override the
-// default 32-bit platform-specific format specifiers appropriately.
-# define ACE_UINT64_FORMAT_SPECIFIER_ASCII "%lu"
-# define ACE_SSIZE_T_FORMAT_SPECIFIER_ASCII "%ld"
-# define ACE_SIZE_T_FORMAT_SPECIFIER_ASCII "%lu"
-#endif /* __ia64 */
-
-#define ACE_SIZEOF_WCHAR 4
-
#if defined (__powerpc__) && !defined (ACE_SIZEOF_LONG_DOUBLE)
// 32bit PowerPC Linux uses 128bit long double
# define ACE_SIZEOF_LONG_DOUBLE 16
#endif
-#define ACE_LACKS_PTHREAD_SCOPE_PROCESS
-
#define ACE_LACKS_GETIPNODEBYADDR
#define ACE_LACKS_GETIPNODEBYNAME
-// Platform has POSIX terminal interface.
-#define ACE_HAS_TERMIOS
-
-// Linux implements sendfile().
-#define ACE_HAS_SENDFILE 1
-
-#define ACE_HAS_VOIDPTR_MMAP
-
#define ACE_HAS_ICMP_SUPPORT 1
-#define ACE_HAS_VASPRINTF
-
-// According to man pages Linux uses different (compared to UNIX systems) types
-// for setting IP_MULTICAST_TTL and IPV6_MULTICAST_LOOP / IP_MULTICAST_LOOP
-// in setsockopt/getsockopt.
-// In the current (circa 2012) kernel source however there is an explicit check
-// for IPV6_MULTICAST_LOOP being sizeof(int). Anything else is rejected so it must
-// not be a passed a bool, irrespective of what the man pages (still) say.
-// i.e. #define ACE_HAS_IPV6_MULTICAST_LOOP_AS_BOOL 1 is wrong
-#define ACE_HAS_IP_MULTICAST_TTL_AS_INT 1
-#define ACE_HAS_IP_MULTICAST_LOOP_AS_INT 1
-
#if defined (ACE_LACKS_NETWORKING)
# include "ace/config-posix-nonetworking.h"
#else
@@ -353,27 +139,6 @@
# define ACE_HAS_GETIFADDRS
#endif
-#if !defined (ACE_LACKS_LINUX_VERSION_H)
-# include <linux/version.h>
-#endif /* !ACE_LACKS_LINUX_VERSION_H */
-
-#if !defined (ACE_GETNAME_RETURNS_RANDOM_SIN_ZERO)
-// Detect if getsockname() and getpeername() returns random values in
-// the sockaddr_in::sin_zero field by evaluation of the kernel
-// version. Since version 2.5.47 this problem is fixed.
-# if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,47))
-# define ACE_GETNAME_RETURNS_RANDOM_SIN_ZERO 0
-# else
-# define ACE_GETNAME_RETURNS_RANDOM_SIN_ZERO 1
-# endif /* (LINUX_VERSION_CODE <= KERNEL_VERSION(2,5,47)) */
-#endif /* ACE_GETNAME_RETURNS_RANDOM_SIN_ZERO */
-
-#if !defined (ACE_HAS_EVENT_POLL) && !defined (ACE_HAS_DEV_POLL)
-# if (LINUX_VERSION_CODE > KERNEL_VERSION (2,6,0))
-# define ACE_HAS_EVENT_POLL
-# endif
-#endif
-
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,8))
# define ACE_HAS_SCHED_GETAFFINITY 1
# define ACE_HAS_SCHED_SETAFFINITY 1
@@ -384,21 +149,11 @@
// we have no choice.
// RHEL4 fails (2.6.9) while RHEL5 works (2.6.18)
#if !defined (ACE_LACKS_CONDATTR_SETCLOCK)
-# if !defined (ACE_LACKS_LINUX_VERSION_H)
-# include <linux/version.h>
-# endif /* !ACE_LACKS_LINUX_VERSION_H */
# if (LINUX_VERSION_CODE < KERNEL_VERSION (2,6,18))
# define ACE_LACKS_CONDATTR_SETCLOCK
# endif
#endif
-#define ACE_HAS_SVR4_DYNAMIC_LINKING
-#define ACE_HAS_AUTOMATIC_INIT_FINI
-#define ACE_HAS_RECURSIVE_MUTEXES
-#define ACE_HAS_THREAD_SPECIFIC_STORAGE
-#define ACE_HAS_RECURSIVE_THR_EXIT_SEMANTICS
-#define ACE_HAS_2_PARAM_ASCTIME_R_AND_CTIME_R
-#define ACE_HAS_REENTRANT_FUNCTIONS
#define ACE_HAS_MNTENT
// To support UCLIBC