diff options
-rw-r--r-- | config/Make.rules.AIX | 3 | ||||
-rw-r--r-- | cpp/src/Ice/LoggerI.cpp | 7 | ||||
-rwxr-xr-x | cpp/src/IceSSL/Util.cpp | 5 |
3 files changed, 14 insertions, 1 deletions
diff --git a/config/Make.rules.AIX b/config/Make.rules.AIX index 9e8684ed5fd..e7bec6f9eae 100644 --- a/config/Make.rules.AIX +++ b/config/Make.rules.AIX @@ -106,7 +106,8 @@ ppc_ldflags = $(ppc_cppflags) ppc64_cppflags = -q64 ppc64_ldflags = $(ppc64_cppflags) -shared_cppflags = $(if $(filter-out program,$($1_target)),-qpic,) -qvisibility=hidden +shared_cppflags = $(if $(filter-out program,$($1_target)),-qpic -qvisibility=hidden,) +static_cppflags = -qfuncsect ifeq ($(COMPILER),xlC_r) # Used to suppress warnings in generated code diff --git a/cpp/src/Ice/LoggerI.cpp b/cpp/src/Ice/LoggerI.cpp index 44842207a3d..9552f9b0041 100644 --- a/cpp/src/Ice/LoggerI.cpp +++ b/cpp/src/Ice/LoggerI.cpp @@ -152,7 +152,14 @@ Ice::LoggerI::write(const string& message, bool indent) // If file size + message size exceeds max size we archive the log file, // but we do not archive empty files or truncate messages. // +#ifdef __IBMCPP__ + // xlC bug: without this work-around, we get a link error when compiling with + // optimization and -qvisibility=hidden + assert(_out.good()); + size_t sz = static_cast<size_t>(_out.rdbuf()->pubseekoff(0, _out.cur, _out.out)); +#else size_t sz = static_cast<size_t>(_out.tellp()); +#endif if(sz > 0 && sz + message.size() >= _sizeMax && _nextRetry <= IceUtil::Time::now()) { string basename = _file; diff --git a/cpp/src/IceSSL/Util.cpp b/cpp/src/IceSSL/Util.cpp index 294640565a5..b0216df5bc7 100755 --- a/cpp/src/IceSSL/Util.cpp +++ b/cpp/src/IceSSL/Util.cpp @@ -118,7 +118,12 @@ IceSSL::readFile(const string& file, vector<char>& buffer) } is.seekg(0, is.end); +#ifdef __IBMCPP__ + // xlC bug. See src/Ice/LoggerI.cpp + buffer.resize(static_cast<size_t>(is.rdbuf()->pubseekoff(0, is.cur, is.in))); +#else buffer.resize(static_cast<size_t>(is.tellg())); +#endif is.seekg(0, is.beg); if(!buffer.empty()) |