Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(229)

Unified Diff: third_party/protobuf/patches/0012-extract-globals.patch

Issue 2756543002: Statically link libprotobuf_lite on Linux component builds (Closed)
Patch Set: Extract all global data to globals.cc Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/protobuf/README.chromium ('k') | third_party/protobuf/src/google/protobuf/arena.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/protobuf/patches/0012-extract-globals.patch
diff --git a/third_party/protobuf/patches/0012-extract-globals.patch b/third_party/protobuf/patches/0012-extract-globals.patch
new file mode 100644
index 0000000000000000000000000000000000000000..f2c899a24df3578e60e7b8d9676eda4abdbf994e
--- /dev/null
+++ b/third_party/protobuf/patches/0012-extract-globals.patch
@@ -0,0 +1,844 @@
+diff -ru --new-file protobuf/src/google/protobuf/arena.cc protobuf2/src/google/protobuf/arena.cc
+--- protobuf/src/google/protobuf/arena.cc 2017-03-17 22:40:59.379153132 -0700
++++ protobuf2/src/google/protobuf/arena.cc 2017-03-17 22:40:52.667151339 -0700
+@@ -39,7 +39,6 @@
+ namespace protobuf {
+
+
+-google::protobuf::internal::SequenceNumber Arena::lifecycle_id_generator_;
+ #if defined(GOOGLE_PROTOBUF_NO_THREADLOCAL)
+ Arena::ThreadCache& Arena::thread_cache() {
+ static internal::ThreadLocalStorage<ThreadCache>* thread_cache_ =
+@@ -56,7 +55,7 @@
+ #endif
+
+ void Arena::Init() {
+- lifecycle_id_ = lifecycle_id_generator_.GetNext();
++ lifecycle_id_ = internal::cr_lifecycle_id_generator_.GetNext();
+ blocks_ = 0;
+ hint_ = 0;
+ owns_first_block_ = true;
+@@ -99,7 +98,7 @@
+
+ uint64 Arena::Reset() {
+ // Invalidate any ThreadCaches pointing to any blocks we just destroyed.
+- lifecycle_id_ = lifecycle_id_generator_.GetNext();
++ lifecycle_id_ = internal::cr_lifecycle_id_generator_.GetNext();
+ return ResetInternal();
+ }
+
+diff -ru --new-file protobuf/src/google/protobuf/arena.h protobuf2/src/google/protobuf/arena.h
+--- protobuf/src/google/protobuf/arena.h 2017-03-17 22:40:59.379153132 -0700
++++ protobuf2/src/google/protobuf/arena.h 2017-03-17 22:40:52.667151339 -0700
+@@ -70,6 +70,9 @@
+ template<typename Type>
+ class GenericTypeHandler; // repeated_field.h
+
++LIBPROTOBUF_EXPORT extern google::protobuf::internal::SequenceNumber
++ cr_lifecycle_id_generator_;
++
+ // Templated cleanup methods.
+ template<typename T> void arena_destruct_object(void* object) {
+ reinterpret_cast<T*>(object)->~T();
+@@ -552,7 +555,6 @@
+ };
+
+ static const size_t kHeaderSize = sizeof(Block);
+- static google::protobuf::internal::SequenceNumber lifecycle_id_generator_;
+ #if defined(GOOGLE_PROTOBUF_NO_THREADLOCAL)
+ // Android ndk does not support GOOGLE_THREAD_LOCAL keyword so we use a custom thread
+ // local storage class we implemented.
+diff -ru --new-file protobuf/src/google/protobuf/extension_set.cc protobuf2/src/google/protobuf/extension_set.cc
+--- protobuf/src/google/protobuf/extension_set.cc 2017-03-17 22:40:59.379153132 -0700
++++ protobuf2/src/google/protobuf/extension_set.cc 2017-03-17 22:40:52.667151339 -0700
+@@ -46,6 +46,12 @@
+ namespace protobuf {
+ namespace internal {
+
++// Registry stuff.
++typedef hash_map<pair<const MessageLite*, int>, ExtensionInfo>
++ ExtensionRegistry;
++extern ExtensionRegistry* cr_registry_;
++extern ProtobufOnceType cr_registry_init_;
++
+ namespace {
+
+ inline WireFormatLite::FieldType real_type(FieldType type) {
+@@ -75,19 +81,13 @@
+ return false;
+ }
+
+-// Registry stuff.
+-typedef hash_map<pair<const MessageLite*, int>,
+- ExtensionInfo> ExtensionRegistry;
+-ExtensionRegistry* registry_ = NULL;
+-GOOGLE_PROTOBUF_DECLARE_ONCE(registry_init_);
+-
+ void DeleteRegistry() {
+- delete registry_;
+- registry_ = NULL;
++ delete cr_registry_;
++ cr_registry_ = NULL;
+ }
+
+ void InitRegistry() {
+- registry_ = new ExtensionRegistry;
++ cr_registry_ = new ExtensionRegistry;
+ OnShutdown(&DeleteRegistry);
+ }
+
+@@ -95,9 +95,9 @@
+ // safety.
+ void Register(const MessageLite* containing_type,
+ int number, ExtensionInfo info) {
+- ::google::protobuf::GoogleOnceInit(&registry_init_, &InitRegistry);
++ ::google::protobuf::GoogleOnceInit(&cr_registry_init_, &InitRegistry);
+
+- if (!InsertIfNotPresent(registry_, std::make_pair(containing_type, number),
++ if (!InsertIfNotPresent(cr_registry_, std::make_pair(containing_type, number),
+ info)) {
+ GOOGLE_LOG(FATAL) << "Multiple extension registrations for type \""
+ << containing_type->GetTypeName()
+@@ -107,9 +107,10 @@
+
+ const ExtensionInfo* FindRegisteredExtension(
+ const MessageLite* containing_type, int number) {
+- return (registry_ == NULL)
++ return (cr_registry_ == NULL)
+ ? NULL
+- : FindOrNull(*registry_, std::make_pair(containing_type, number));
++ : FindOrNull(*cr_registry_,
++ std::make_pair(containing_type, number));
+ }
+
+ } // namespace
+@@ -1748,68 +1749,45 @@
+ // ==================================================================
+ // Default repeated field instances for iterator-compatible accessors
+
+-GOOGLE_PROTOBUF_DECLARE_ONCE(repeated_primitive_generic_type_traits_once_init_);
+-GOOGLE_PROTOBUF_DECLARE_ONCE(repeated_string_type_traits_once_init_);
+-GOOGLE_PROTOBUF_DECLARE_ONCE(repeated_message_generic_type_traits_once_init_);
+-
+ void RepeatedPrimitiveGenericTypeTraits::InitializeDefaultRepeatedFields() {
+- default_repeated_field_int32_ = new RepeatedField<int32>;
+- default_repeated_field_int64_ = new RepeatedField<int64>;
+- default_repeated_field_uint32_ = new RepeatedField<uint32>;
+- default_repeated_field_uint64_ = new RepeatedField<uint64>;
+- default_repeated_field_double_ = new RepeatedField<double>;
+- default_repeated_field_float_ = new RepeatedField<float>;
+- default_repeated_field_bool_ = new RepeatedField<bool>;
++ cr_default_repeated_field_int32_ = new RepeatedField<int32>;
++ cr_default_repeated_field_int64_ = new RepeatedField<int64>;
++ cr_default_repeated_field_uint32_ = new RepeatedField<uint32>;
++ cr_default_repeated_field_uint64_ = new RepeatedField<uint64>;
++ cr_default_repeated_field_double_ = new RepeatedField<double>;
++ cr_default_repeated_field_float_ = new RepeatedField<float>;
++ cr_default_repeated_field_bool_ = new RepeatedField<bool>;
+ OnShutdown(&DestroyDefaultRepeatedFields);
+ }
+
+ void RepeatedPrimitiveGenericTypeTraits::DestroyDefaultRepeatedFields() {
+- delete default_repeated_field_int32_;
+- delete default_repeated_field_int64_;
+- delete default_repeated_field_uint32_;
+- delete default_repeated_field_uint64_;
+- delete default_repeated_field_double_;
+- delete default_repeated_field_float_;
+- delete default_repeated_field_bool_;
++ delete cr_default_repeated_field_int32_;
++ delete cr_default_repeated_field_int64_;
++ delete cr_default_repeated_field_uint32_;
++ delete cr_default_repeated_field_uint64_;
++ delete cr_default_repeated_field_double_;
++ delete cr_default_repeated_field_float_;
++ delete cr_default_repeated_field_bool_;
+ }
+
+ void RepeatedStringTypeTraits::InitializeDefaultRepeatedFields() {
+- default_repeated_field_ = new RepeatedFieldType;
++ cr_default_repeated_field_ = new RepeatedFieldType;
+ OnShutdown(&DestroyDefaultRepeatedFields);
+ }
+
+ void RepeatedStringTypeTraits::DestroyDefaultRepeatedFields() {
+- delete default_repeated_field_;
++ delete cr_default_repeated_field_;
+ }
+
+ void RepeatedMessageGenericTypeTraits::InitializeDefaultRepeatedFields() {
+- default_repeated_field_ = new RepeatedFieldType;
++ cr_default_repeated_field_ = new RepeatedFieldType;
+ OnShutdown(&DestroyDefaultRepeatedFields);
+ }
+
+ void RepeatedMessageGenericTypeTraits::DestroyDefaultRepeatedFields() {
+- delete default_repeated_field_;
++ delete cr_default_repeated_field_;
+ }
+
+-const RepeatedField<int32>*
+-RepeatedPrimitiveGenericTypeTraits::default_repeated_field_int32_ = NULL;
+-const RepeatedField<int64>*
+-RepeatedPrimitiveGenericTypeTraits::default_repeated_field_int64_ = NULL;
+-const RepeatedField<uint32>*
+-RepeatedPrimitiveGenericTypeTraits::default_repeated_field_uint32_ = NULL;
+-const RepeatedField<uint64>*
+-RepeatedPrimitiveGenericTypeTraits::default_repeated_field_uint64_ = NULL;
+-const RepeatedField<double>*
+-RepeatedPrimitiveGenericTypeTraits::default_repeated_field_double_ = NULL;
+-const RepeatedField<float>*
+-RepeatedPrimitiveGenericTypeTraits::default_repeated_field_float_ = NULL;
+-const RepeatedField<bool>*
+-RepeatedPrimitiveGenericTypeTraits::default_repeated_field_bool_ = NULL;
+-const RepeatedStringTypeTraits::RepeatedFieldType*
+-RepeatedStringTypeTraits::default_repeated_field_ = NULL;
+-const RepeatedMessageGenericTypeTraits::RepeatedFieldType*
+-RepeatedMessageGenericTypeTraits::default_repeated_field_ = NULL;
+-
+ } // namespace internal
+ } // namespace protobuf
+ } // namespace google
+diff -ru --new-file protobuf/src/google/protobuf/extension_set.h protobuf2/src/google/protobuf/extension_set.h
+--- protobuf/src/google/protobuf/extension_set.h 2017-03-17 22:40:59.379153132 -0700
++++ protobuf2/src/google/protobuf/extension_set.h 2017-03-17 22:40:52.675151341 -0700
+@@ -731,13 +731,13 @@
+ template<typename Type> friend class RepeatedPrimitiveTypeTraits;
+ static void InitializeDefaultRepeatedFields();
+ static void DestroyDefaultRepeatedFields();
+- static const RepeatedField<int32>* default_repeated_field_int32_;
+- static const RepeatedField<int64>* default_repeated_field_int64_;
+- static const RepeatedField<uint32>* default_repeated_field_uint32_;
+- static const RepeatedField<uint64>* default_repeated_field_uint64_;
+- static const RepeatedField<double>* default_repeated_field_double_;
+- static const RepeatedField<float>* default_repeated_field_float_;
+- static const RepeatedField<bool>* default_repeated_field_bool_;
++ static const RepeatedField<int32>* cr_default_repeated_field_int32_;
++ static const RepeatedField<int64>* cr_default_repeated_field_int64_;
++ static const RepeatedField<uint32>* cr_default_repeated_field_uint32_;
++ static const RepeatedField<uint64>* cr_default_repeated_field_uint64_;
++ static const RepeatedField<double>* cr_default_repeated_field_double_;
++ static const RepeatedField<float>* cr_default_repeated_field_float_;
++ static const RepeatedField<bool>* cr_default_repeated_field_bool_;
+ };
+
+ #define PROTOBUF_DEFINE_PRIMITIVE_TYPE(TYPE, METHOD) \
+@@ -769,7 +769,7 @@
+ &repeated_primitive_generic_type_traits_once_init_, \
+ &RepeatedPrimitiveGenericTypeTraits::InitializeDefaultRepeatedFields); \
+ return RepeatedPrimitiveGenericTypeTraits:: \
+- default_repeated_field_##TYPE##_; \
++ cr_default_repeated_field_##TYPE##_; \
+ } \
+ template<> inline const RepeatedField<TYPE>& \
+ RepeatedPrimitiveTypeTraits<TYPE>::GetRepeated(int number, \
+@@ -821,7 +821,8 @@
+ }
+ };
+
+-LIBPROTOBUF_EXPORT extern ProtobufOnceType repeated_string_type_traits_once_init_;
++LIBPROTOBUF_EXPORT extern ProtobufOnceType
++ cr_repeated_string_type_traits_once_init_;
+
+ class LIBPROTOBUF_EXPORT RepeatedStringTypeTraits {
+ public:
+@@ -866,15 +867,16 @@
+ }
+
+ static const RepeatedFieldType* GetDefaultRepeatedField() {
+- ::google::protobuf::GoogleOnceInit(&repeated_string_type_traits_once_init_,
+- &InitializeDefaultRepeatedFields);
+- return default_repeated_field_;
++ ::google::protobuf::GoogleOnceInit(
++ &cr_repeated_string_type_traits_once_init_,
++ &InitializeDefaultRepeatedFields);
++ return cr_default_repeated_field_;
+ }
+
+ private:
+ static void InitializeDefaultRepeatedFields();
+ static void DestroyDefaultRepeatedFields();
+- static const RepeatedFieldType *default_repeated_field_;
++ static const RepeatedFieldType* cr_default_repeated_field_;
+ };
+
+ // -------------------------------------------------------------------
+@@ -1043,7 +1045,7 @@
+ template<typename Type> friend class RepeatedMessageTypeTraits;
+ static void InitializeDefaultRepeatedFields();
+ static void DestroyDefaultRepeatedFields();
+- static const RepeatedFieldType* default_repeated_field_;
++ static const RepeatedFieldType* cr_default_repeated_field_;
+ };
+
+ template<typename Type> inline
+@@ -1053,7 +1055,7 @@
+ &repeated_message_generic_type_traits_once_init_,
+ &RepeatedMessageGenericTypeTraits::InitializeDefaultRepeatedFields);
+ return reinterpret_cast<const RepeatedFieldType*>(
+- RepeatedMessageGenericTypeTraits::default_repeated_field_);
++ RepeatedMessageGenericTypeTraits::cr_default_repeated_field_);
+ }
+
+ // -------------------------------------------------------------------
+diff -ru --new-file protobuf/src/google/protobuf/generated_message_util.cc protobuf2/src/google/protobuf/generated_message_util.cc
+--- protobuf/src/google/protobuf/generated_message_util.cc 2017-03-17 22:40:59.379153132 -0700
++++ protobuf2/src/google/protobuf/generated_message_util.cc 2017-03-17 22:40:52.691151345 -0700
+@@ -48,20 +48,18 @@
+ return std::numeric_limits<double>::quiet_NaN();
+ }
+
+-const ::std::string* empty_string_;
+-GOOGLE_PROTOBUF_DECLARE_ONCE(empty_string_once_init_);
+-
+ void DeleteEmptyString() {
+- delete empty_string_;
++ delete cr_empty_string_;
+ }
+
+ void InitEmptyString() {
+- empty_string_ = new string;
++ cr_empty_string_ = new string;
+ OnShutdown(&DeleteEmptyString);
+ }
+
+ const ::std::string& GetEmptyString() {
+- ::google::protobuf::GoogleOnceInit(&empty_string_once_init_, &InitEmptyString);
++ ::google::protobuf::GoogleOnceInit(&cr_empty_string_once_init_,
++ &InitEmptyString);
+ return GetEmptyStringAlreadyInited();
+ }
+
+diff -ru --new-file protobuf/src/google/protobuf/generated_message_util.h protobuf2/src/google/protobuf/generated_message_util.h
+--- protobuf/src/google/protobuf/generated_message_util.h 2017-03-17 22:40:59.379153132 -0700
++++ protobuf2/src/google/protobuf/generated_message_util.h 2017-03-17 22:40:52.655151335 -0700
+@@ -77,14 +77,14 @@
+
+ // Default empty string object. Don't use the pointer directly. Instead, call
+ // GetEmptyString() to get the reference.
+-LIBPROTOBUF_EXPORT extern const ::std::string* empty_string_;
+-LIBPROTOBUF_EXPORT extern ProtobufOnceType empty_string_once_init_;
++LIBPROTOBUF_EXPORT extern const ::std::string* cr_empty_string_;
++LIBPROTOBUF_EXPORT extern ProtobufOnceType cr_empty_string_once_init_;
+ LIBPROTOBUF_EXPORT void InitEmptyString();
+
+
+ LIBPROTOBUF_EXPORT inline const ::std::string& GetEmptyStringAlreadyInited() {
+- assert(empty_string_ != NULL);
+- return *empty_string_;
++ assert(cr_empty_string_ != NULL);
++ return *cr_empty_string_;
+ }
+
+ LIBPROTOBUF_EXPORT const ::std::string& GetEmptyString();
+diff -ru --new-file protobuf/src/google/protobuf/globals.cc protobuf2/src/google/protobuf/globals.cc
+--- protobuf/src/google/protobuf/globals.cc 1969-12-31 16:00:00.000000000 -0800
++++ protobuf2/src/google/protobuf/globals.cc 2017-03-17 22:40:52.655151335 -0700
+@@ -0,0 +1,113 @@
++// Protocol Buffers - Google's data interchange format
++// Copyright 2017 Google Inc. All rights reserved.
++// https://developers.google.com/protocol-buffers/
++//
++// Redistribution and use in source and binary forms, with or without
++// modification, are permitted provided that the following conditions are
++// met:
++//
++// * Redistributions of source code must retain the above copyright
++// notice, this list of conditions and the following disclaimer.
++// * Redistributions in binary form must reproduce the above
++// copyright notice, this list of conditions and the following disclaimer
++// in the documentation and/or other materials provided with the
++// distribution.
++// * Neither the name of Google Inc. nor the names of its
++// contributors may be used to endorse or promote products derived from
++// this software without specific prior written permission.
++//
++// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
++// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
++// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
++// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
++// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
++// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
++// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
++// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
++// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
++// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++
++#include <google/protobuf/extension_set.h>
++#include <google/protobuf/generated_message_util.h>
++#include <google/protobuf/stubs/atomicops.h>
++#include <google/protobuf/stubs/hash.h>
++
++namespace google {
++namespace protobuf {
++namespace internal {
++
++SequenceNumber cr_lifecycle_id_generator_;
++
++const ::std::string* cr_empty_string_;
++GOOGLE_PROTOBUF_DECLARE_ONCE(cr_empty_string_once_init_);
++
++const RepeatedField<int32>*
++ RepeatedPrimitiveGenericTypeTraits::cr_default_repeated_field_int32_ = NULL;
++const RepeatedField<int64>*
++ RepeatedPrimitiveGenericTypeTraits::cr_default_repeated_field_int64_ = NULL;
++const RepeatedField<uint32>*
++ RepeatedPrimitiveGenericTypeTraits::cr_default_repeated_field_uint32_ =
++ NULL;
++const RepeatedField<uint64>*
++ RepeatedPrimitiveGenericTypeTraits::cr_default_repeated_field_uint64_ =
++ NULL;
++const RepeatedField<double>*
++ RepeatedPrimitiveGenericTypeTraits::cr_default_repeated_field_double_ =
++ NULL;
++const RepeatedField<float>*
++ RepeatedPrimitiveGenericTypeTraits::cr_default_repeated_field_float_ = NULL;
++const RepeatedField<bool>*
++ RepeatedPrimitiveGenericTypeTraits::cr_default_repeated_field_bool_ = NULL;
++const RepeatedStringTypeTraits::RepeatedFieldType*
++ RepeatedStringTypeTraits::cr_default_repeated_field_ = NULL;
++const RepeatedMessageGenericTypeTraits::RepeatedFieldType*
++ RepeatedMessageGenericTypeTraits::cr_default_repeated_field_ = NULL;
++
++LIBPROTOBUF_EXPORT vector<void (*)()>* cr_shutdown_functions = NULL;
++LIBPROTOBUF_EXPORT Mutex* cr_shutdown_functions_mutex = NULL;
++LIBPROTOBUF_EXPORT GOOGLE_PROTOBUF_DECLARE_ONCE(cr_shutdown_functions_init);
++
++LIBPROTOBUF_EXPORT LogHandler* cr_log_handler_ = NULL;
++LIBPROTOBUF_EXPORT int cr_log_silencer_count_ = 0;
++
++LIBPROTOBUF_EXPORT Mutex* cr_log_silencer_count_mutex_ = NULL;
++LIBPROTOBUF_EXPORT GOOGLE_PROTOBUF_DECLARE_ONCE(cr_log_silencer_count_init_);
++
++GOOGLE_PROTOBUF_DECLARE_ONCE(
++ cr_repeated_primitive_generic_type_traits_once_init_);
++GOOGLE_PROTOBUF_DECLARE_ONCE(cr_repeated_string_type_traits_once_init_);
++GOOGLE_PROTOBUF_DECLARE_ONCE(
++ cr_repeated_message_generic_type_traits_once_init_);
++
++LIBPROTOBUF_EXPORT hash_map<pair<const MessageLite*, int>, ExtensionInfo>*
++ cr_registry_ = NULL;
++LIBPROTOBUF_EXPORT GOOGLE_PROTOBUF_DECLARE_ONCE(cr_registry_init_);
++
++LIBPROTOBUF_EXPORT bool cr_module_initialized_ = false;
++struct InitDetector {
++ InitDetector() { cr_module_initialized_ = true; }
++};
++InitDetector cr_init_detector;
++
++#ifdef GOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_X86_GCC_H_
++// Set the flags so that code will run correctly and conservatively, so even
++// if we haven't been initialized yet, we're probably single threaded, and our
++// default values should hopefully be pretty safe.
++LIBPROTOBUF_EXPORT struct AtomicOps_x86CPUFeatureStruct
++ cr_AtomicOps_Internalx86CPUFeatures = {
++ false, // bug can't exist before process spawns multiple threads
++ false, // no SSE2
++};
++
++class AtomicOpsx86Initializer {
++ public:
++ AtomicOpsx86Initializer() { AtomicOps_Internalx86CPUFeaturesInit(); }
++};
++
++AtomicOpsx86Initializer cr_g_initer;
++#endif
++
++} // namespace internal
++} // namespace protobuf
++} // namespace google
+diff -ru --new-file protobuf/src/google/protobuf/io/coded_stream.cc protobuf2/src/google/protobuf/io/coded_stream.cc
+--- protobuf/src/google/protobuf/io/coded_stream.cc 2017-03-17 22:40:59.383153133 -0700
++++ protobuf2/src/google/protobuf/io/coded_stream.cc 2017-03-17 22:40:52.659151336 -0700
+@@ -83,7 +83,7 @@
+ }
+
+ // Static.
+-int CodedInputStream::default_recursion_limit_ = 100;
++int const CodedInputStream::default_recursion_limit_ = 100;
+
+
+ void CodedOutputStream::EnableAliasing(bool enabled) {
+diff -ru --new-file protobuf/src/google/protobuf/io/coded_stream.h protobuf2/src/google/protobuf/io/coded_stream.h
+--- protobuf/src/google/protobuf/io/coded_stream.h 2017-03-17 22:40:59.383153133 -0700
++++ protobuf2/src/google/protobuf/io/coded_stream.h 2017-03-17 22:40:52.659151336 -0700
+@@ -613,7 +613,7 @@
+
+ static const int kDefaultTotalBytesWarningThreshold = 32 << 20; // 32MB
+
+- static int default_recursion_limit_; // 100 by default.
++ static const int default_recursion_limit_; // 100 by default.
+ };
+
+ // Class which encodes and writes binary data which is composed of varint-
+diff -ru --new-file protobuf/src/google/protobuf/stubs/atomicops_internals_x86_gcc.cc protobuf2/src/google/protobuf/stubs/atomicops_internals_x86_gcc.cc
+--- protobuf/src/google/protobuf/stubs/atomicops_internals_x86_gcc.cc 2017-03-17 22:40:59.383153133 -0700
++++ protobuf2/src/google/protobuf/stubs/atomicops_internals_x86_gcc.cc 2017-03-17 22:40:52.671151340 -0700
+@@ -58,23 +58,13 @@
+ : "=a" (a), "=D" (b), "=c" (c), "=d" (d) : "a" (inp))
+ #endif
+
+-#if defined(cpuid) // initialize the struct only on x86
+-
+ namespace google {
+ namespace protobuf {
+ namespace internal {
+
+-// Set the flags so that code will run correctly and conservatively, so even
+-// if we haven't been initialized yet, we're probably single threaded, and our
+-// default values should hopefully be pretty safe.
+-struct AtomicOps_x86CPUFeatureStruct AtomicOps_Internalx86CPUFeatures = {
+- false, // bug can't exist before process spawns multiple threads
+- false, // no SSE2
+-};
+-
+-namespace {
++#if defined(cpuid) // initialize the struct only on x86
+
+-// Initialize the AtomicOps_Internalx86CPUFeatures struct.
++// Initialize the cr_AtomicOps_Internalx86CPUFeatures struct.
+ void AtomicOps_Internalx86CPUFeaturesInit() {
+ uint32_t eax;
+ uint32_t ebx;
+@@ -107,31 +97,20 @@
+ if (strcmp(vendor, "AuthenticAMD") == 0 && // AMD
+ family == 15 &&
+ 32 <= model && model <= 63) {
+- AtomicOps_Internalx86CPUFeatures.has_amd_lock_mb_bug = true;
++ cr_AtomicOps_Internalx86CPUFeatures.has_amd_lock_mb_bug = true;
+ } else {
+- AtomicOps_Internalx86CPUFeatures.has_amd_lock_mb_bug = false;
++ cr_AtomicOps_Internalx86CPUFeatures.has_amd_lock_mb_bug = false;
+ }
+
+ // edx bit 26 is SSE2 which we use to tell use whether we can use mfence
+- AtomicOps_Internalx86CPUFeatures.has_sse2 = ((edx >> 26) & 1);
++ cr_AtomicOps_Internalx86CPUFeatures.has_sse2 = ((edx >> 26) & 1);
+ }
+-
+-class AtomicOpsx86Initializer {
+- public:
+- AtomicOpsx86Initializer() {
+- AtomicOps_Internalx86CPUFeaturesInit();
+- }
+-};
+-
+-// A global to get use initialized on startup via static initialization :/
+-AtomicOpsx86Initializer g_initer;
+-
+-} // namespace
++#else
++void AtomicOps_Internalx86CPUFeaturesInit() {}
++#endif // __i386__
+
+ } // namespace internal
+ } // namespace protobuf
+ } // namespace google
+
+-#endif // __i386__
+-
+ #endif // GOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_X86_GCC_H_
+diff -ru --new-file protobuf/src/google/protobuf/stubs/atomicops_internals_x86_gcc.h protobuf2/src/google/protobuf/stubs/atomicops_internals_x86_gcc.h
+--- protobuf/src/google/protobuf/stubs/atomicops_internals_x86_gcc.h 2017-03-17 22:40:59.383153133 -0700
++++ protobuf2/src/google/protobuf/stubs/atomicops_internals_x86_gcc.h 2017-03-17 22:40:52.671151340 -0700
+@@ -46,7 +46,9 @@
+ // after acquire compare-and-swap.
+ bool has_sse2; // Processor has SSE2.
+ };
+-extern struct AtomicOps_x86CPUFeatureStruct AtomicOps_Internalx86CPUFeatures;
++extern struct AtomicOps_x86CPUFeatureStruct cr_AtomicOps_Internalx86CPUFeatures;
++
++void AtomicOps_Internalx86CPUFeaturesInit();
+
+ #define ATOMICOPS_COMPILER_BARRIER() __asm__ __volatile__("" : : : "memory")
+
+@@ -89,7 +91,7 @@
+ : "+r" (temp), "+m" (*ptr)
+ : : "memory");
+ // temp now holds the old value of *ptr
+- if (AtomicOps_Internalx86CPUFeatures.has_amd_lock_mb_bug) {
++ if (cr_AtomicOps_Internalx86CPUFeatures.has_amd_lock_mb_bug) {
+ __asm__ __volatile__("lfence" : : : "memory");
+ }
+ return temp + increment;
+@@ -99,7 +101,7 @@
+ Atomic32 old_value,
+ Atomic32 new_value) {
+ Atomic32 x = NoBarrier_CompareAndSwap(ptr, old_value, new_value);
+- if (AtomicOps_Internalx86CPUFeatures.has_amd_lock_mb_bug) {
++ if (cr_AtomicOps_Internalx86CPUFeatures.has_amd_lock_mb_bug) {
+ __asm__ __volatile__("lfence" : : : "memory");
+ }
+ return x;
+@@ -131,7 +133,7 @@
+ #else
+
+ inline void MemoryBarrier() {
+- if (AtomicOps_Internalx86CPUFeatures.has_sse2) {
++ if (cr_AtomicOps_Internalx86CPUFeatures.has_sse2) {
+ __asm__ __volatile__("mfence" : : : "memory");
+ } else { // mfence is faster but not present on PIII
+ Atomic32 x = 0;
+@@ -140,7 +142,7 @@
+ }
+
+ inline void Acquire_Store(volatile Atomic32* ptr, Atomic32 value) {
+- if (AtomicOps_Internalx86CPUFeatures.has_sse2) {
++ if (cr_AtomicOps_Internalx86CPUFeatures.has_sse2) {
+ *ptr = value;
+ __asm__ __volatile__("mfence" : : : "memory");
+ } else {
+@@ -213,7 +215,7 @@
+ : "+r" (temp), "+m" (*ptr)
+ : : "memory");
+ // temp now contains the previous value of *ptr
+- if (AtomicOps_Internalx86CPUFeatures.has_amd_lock_mb_bug) {
++ if (cr_AtomicOps_Internalx86CPUFeatures.has_amd_lock_mb_bug) {
+ __asm__ __volatile__("lfence" : : : "memory");
+ }
+ return temp + increment;
+@@ -270,7 +272,7 @@
+ Atomic64 old_value,
+ Atomic64 new_value) {
+ Atomic64 x = NoBarrier_CompareAndSwap(ptr, old_value, new_value);
+- if (AtomicOps_Internalx86CPUFeatures.has_amd_lock_mb_bug) {
++ if (cr_AtomicOps_Internalx86CPUFeatures.has_amd_lock_mb_bug) {
+ __asm__ __volatile__("lfence" : : : "memory");
+ }
+ return x;
+diff -ru --new-file protobuf/src/google/protobuf/stubs/common.cc protobuf2/src/google/protobuf/stubs/common.cc
+--- protobuf/src/google/protobuf/stubs/common.cc 2017-03-17 22:40:59.383153133 -0700
++++ protobuf2/src/google/protobuf/stubs/common.cc 2017-03-17 22:40:52.671151340 -0700
+@@ -116,7 +116,8 @@
+ if (level < GOOGLE_PROTOBUF_MIN_LOG_LEVEL) {
+ return;
+ }
+- static const char* level_names[] = {"INFO", "WARNING", "ERROR", "FATAL"};
++ static const char* const level_names[] = {"INFO", "WARNING", "ERROR",
++ "FATAL"};
+
+ static const int android_log_levels[] = {
+ ANDROID_LOG_INFO, // LOG(INFO),
+@@ -148,7 +149,8 @@
+ #else
+ void DefaultLogHandler(LogLevel level, const char* filename, int line,
+ const string& message) {
+- static const char* level_names[] = { "INFO", "WARNING", "ERROR", "FATAL" };
++ static const char* const level_names[] = {"INFO", "WARNING", "ERROR",
++ "FATAL"};
+
+ // We use fprintf() instead of cerr because we want this to work at static
+ // initialization time.
+@@ -163,22 +165,22 @@
+ // Nothing.
+ }
+
+-static LogHandler* log_handler_ = &DefaultLogHandler;
+-static int log_silencer_count_ = 0;
++extern LogHandler* cr_log_handler_;
++extern int cr_log_silencer_count_;
+
+-static Mutex* log_silencer_count_mutex_ = NULL;
+-GOOGLE_PROTOBUF_DECLARE_ONCE(log_silencer_count_init_);
++extern Mutex* cr_log_silencer_count_mutex_;
++extern ProtobufOnceType cr_log_silencer_count_init_;
+
+ void DeleteLogSilencerCount() {
+- delete log_silencer_count_mutex_;
+- log_silencer_count_mutex_ = NULL;
++ delete cr_log_silencer_count_mutex_;
++ cr_log_silencer_count_mutex_ = NULL;
+ }
+ void InitLogSilencerCount() {
+- log_silencer_count_mutex_ = new Mutex;
++ cr_log_silencer_count_mutex_ = new Mutex;
+ OnShutdown(&DeleteLogSilencerCount);
+ }
+ void InitLogSilencerCountOnce() {
+- GoogleOnceInit(&log_silencer_count_init_, &InitLogSilencerCount);
++ GoogleOnceInit(&cr_log_silencer_count_init_, &InitLogSilencerCount);
+ }
+
+ LogMessage& LogMessage::operator<<(const string& value) {
+@@ -246,12 +248,13 @@
+
+ if (level_ != LOGLEVEL_FATAL) {
+ InitLogSilencerCountOnce();
+- MutexLock lock(log_silencer_count_mutex_);
+- suppress = log_silencer_count_ > 0;
++ MutexLock lock(cr_log_silencer_count_mutex_);
++ suppress = cr_log_silencer_count_ > 0;
+ }
+
+ if (!suppress) {
+- log_handler_(level_, filename_, line_, message_);
++ (cr_log_handler_ ? cr_log_handler_ : DefaultLogHandler)(level_, filename_,
++ line_, message_);
+ }
+
+ if (level_ == LOGLEVEL_FATAL) {
+@@ -270,28 +273,29 @@
+ } // namespace internal
+
+ LogHandler* SetLogHandler(LogHandler* new_func) {
+- LogHandler* old = internal::log_handler_;
++ LogHandler* old = internal::cr_log_handler_ ? internal::cr_log_handler_
++ : internal::DefaultLogHandler;
+ if (old == &internal::NullLogHandler) {
+ old = NULL;
+ }
+ if (new_func == NULL) {
+- internal::log_handler_ = &internal::NullLogHandler;
++ internal::cr_log_handler_ = &internal::NullLogHandler;
+ } else {
+- internal::log_handler_ = new_func;
++ internal::cr_log_handler_ = new_func;
+ }
+ return old;
+ }
+
+ LogSilencer::LogSilencer() {
+ internal::InitLogSilencerCountOnce();
+- MutexLock lock(internal::log_silencer_count_mutex_);
+- ++internal::log_silencer_count_;
++ MutexLock lock(internal::cr_log_silencer_count_mutex_);
++ ++internal::cr_log_silencer_count_;
+ };
+
+ LogSilencer::~LogSilencer() {
+ internal::InitLogSilencerCountOnce();
+- MutexLock lock(internal::log_silencer_count_mutex_);
+- --internal::log_silencer_count_;
++ MutexLock lock(internal::cr_log_silencer_count_mutex_);
++ --internal::cr_log_silencer_count_;
+ };
+
+ // ===================================================================
+@@ -407,23 +411,23 @@
+ namespace internal {
+
+ typedef void OnShutdownFunc();
+-vector<void (*)()>* shutdown_functions = NULL;
+-Mutex* shutdown_functions_mutex = NULL;
+-GOOGLE_PROTOBUF_DECLARE_ONCE(shutdown_functions_init);
++extern vector<void (*)()>* cr_shutdown_functions;
++extern Mutex* cr_shutdown_functions_mutex;
++extern ProtobufOnceType cr_shutdown_functions_init;
+
+ void InitShutdownFunctions() {
+- shutdown_functions = new vector<void (*)()>;
+- shutdown_functions_mutex = new Mutex;
++ cr_shutdown_functions = new vector<void (*)()>;
++ cr_shutdown_functions_mutex = new Mutex;
+ }
+
+ inline void InitShutdownFunctionsOnce() {
+- GoogleOnceInit(&shutdown_functions_init, &InitShutdownFunctions);
++ GoogleOnceInit(&cr_shutdown_functions_init, &InitShutdownFunctions);
+ }
+
+ void OnShutdown(void (*func)()) {
+ InitShutdownFunctionsOnce();
+- MutexLock lock(shutdown_functions_mutex);
+- shutdown_functions->push_back(func);
++ MutexLock lock(cr_shutdown_functions_mutex);
++ cr_shutdown_functions->push_back(func);
+ }
+
+ } // namespace internal
+@@ -431,20 +435,20 @@
+ void ShutdownProtobufLibrary() {
+ internal::InitShutdownFunctionsOnce();
+
+- // We don't need to lock shutdown_functions_mutex because it's up to the
++ // We don't need to lock cr_shutdown_functions_mutex because it's up to the
+ // caller to make sure that no one is using the library before this is
+ // called.
+
+ // Make it safe to call this multiple times.
+- if (internal::shutdown_functions == NULL) return;
++ if (internal::cr_shutdown_functions == NULL) return;
+
+- for (int i = 0; i < internal::shutdown_functions->size(); i++) {
+- internal::shutdown_functions->at(i)();
++ for (int i = 0; i < internal::cr_shutdown_functions->size(); i++) {
++ internal::cr_shutdown_functions->at(i)();
+ }
+- delete internal::shutdown_functions;
+- internal::shutdown_functions = NULL;
+- delete internal::shutdown_functions_mutex;
+- internal::shutdown_functions_mutex = NULL;
++ delete internal::cr_shutdown_functions;
++ internal::cr_shutdown_functions = NULL;
++ delete internal::cr_shutdown_functions_mutex;
++ internal::cr_shutdown_functions_mutex = NULL;
+ }
+
+ #if PROTOBUF_USE_EXCEPTIONS
+diff -ru --new-file protobuf/src/google/protobuf/stubs/structurally_valid.cc protobuf2/src/google/protobuf/stubs/structurally_valid.cc
+--- protobuf/src/google/protobuf/stubs/structurally_valid.cc 2017-03-17 22:40:59.383153133 -0700
++++ protobuf2/src/google/protobuf/stubs/structurally_valid.cc 2017-03-17 22:40:52.675151341 -0700
+@@ -511,21 +511,10 @@
+ // UTF-8 strings. Since UTF-8 validation is only used for debugging
+ // anyway, we simply always return success if initialization hasn't
+ // occurred yet.
+-namespace {
+-
+-bool module_initialized_ = false;
+-
+-struct InitDetector {
+- InitDetector() {
+- module_initialized_ = true;
+- }
+-};
+-InitDetector init_detector;
+-
+-} // namespace
++extern bool cr_module_initialized_;
+
+ bool IsStructurallyValidUTF8(const char* buf, int len) {
+- if (!module_initialized_) return true;
++ if (!cr_module_initialized_) return true;
+
+ int bytes_consumed = 0;
+ UTF8GenericScanFastAscii(&utf8acceptnonsurrogates_obj,
+@@ -534,7 +523,7 @@
+ }
+
+ int UTF8SpnStructurallyValid(const StringPiece& str) {
+- if (!module_initialized_) return str.size();
++ if (!cr_module_initialized_) return str.size();
+
+ int bytes_consumed = 0;
+ UTF8GenericScanFastAscii(&utf8acceptnonsurrogates_obj,
+diff -ru --new-file protobuf/src/google/protobuf/stubs/strutil.cc protobuf2/src/google/protobuf/stubs/strutil.cc
+--- protobuf/src/google/protobuf/stubs/strutil.cc 2017-03-17 22:40:59.383153133 -0700
++++ protobuf2/src/google/protobuf/stubs/strutil.cc 2017-03-17 22:40:52.671151340 -0700
+@@ -528,7 +528,7 @@
+ // Assumes that non-printable characters are escaped using octal sequences, and
+ // that UTF-8 bytes are not handled specially.
+ static inline size_t CEscapedLength(StringPiece src) {
+- static char c_escaped_len[256] = {
++ static const char c_escaped_len[256] = {
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 4, 4, 2, 4, 4, // \t, \n, \r
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, // ", '
+@@ -891,7 +891,7 @@
+ char *FastHexToBuffer(int i, char* buffer) {
+ GOOGLE_CHECK(i >= 0) << "FastHexToBuffer() wants non-negative integers, not " << i;
+
+- static const char *hexdigits = "0123456789abcdef";
++ static const char hexdigits[] = "0123456789abcdef";
+ char *p = buffer + 21;
+ *p-- = '\0';
+ do {
+@@ -902,7 +902,7 @@
+ }
+
+ char *InternalFastHexToBuffer(uint64 value, char* buffer, int num_byte) {
+- static const char *hexdigits = "0123456789abcdef";
++ static const char hexdigits[] = "0123456789abcdef";
+ buffer[num_byte] = '\0';
+ for (int i = num_byte - 1; i >= 0; i--) {
+ #ifdef _M_X64
« no previous file with comments | « third_party/protobuf/README.chromium ('k') | third_party/protobuf/src/google/protobuf/arena.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698