diff options
author | Fred Hornsey <hornseyf@objectcomputing.com> | 2019-06-21 12:25:01 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-06-21 12:25:01 -0500 |
commit | b1dee1f113c794e8df239a4b164458db63ab8507 (patch) | |
tree | 791a15d2184e3f5c624542c0ebc6edc0fbaced93 | |
parent | 4a76c5d4c6606370ce3df6c34c5614c6f7393da2 (diff) | |
parent | d2eb67e35258d1a67a74bf8a4da5258fc568f9d2 (diff) | |
download | ATCD-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/NEWS | 3 | ||||
-rw-r--r-- | ACE/ace/Log_Msg.cpp | 21 | ||||
-rw-r--r-- | ACE/ace/OS_NS_Thread.cpp | 13 | ||||
-rw-r--r-- | ACE/ace/OS_NS_Thread.h | 20 | ||||
-rw-r--r-- | ACE/ace/OS_NS_Thread.inl | 7 | ||||
-rw-r--r-- | ACE/ace/config-android.h | 249 | ||||
-rw-r--r-- | ACE/ace/config-linux-common.h | 255 | ||||
-rw-r--r-- | ACE/ace/config-linux.h | 251 |
8 files changed, 341 insertions, 478 deletions
@@ -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 |