Index: third_party/protobuf/patches/04_uninline.patch |
diff --git a/third_party/protobuf/patches/04_uninline.patch b/third_party/protobuf/patches/04_uninline.patch |
new file mode 100644 |
index 0000000000000000000000000000000000000000..07f945a8d9dc459dbfa5e23a448399927444178a |
--- /dev/null |
+++ b/third_party/protobuf/patches/04_uninline.patch |
@@ -0,0 +1,81 @@ |
+diff --git a/third_party/protobuf/README.chromium b/third_party/protobuf/README.chromium |
+index 04d1a9b..015dd0f 100644 |
+--- a/third_party/protobuf/README.chromium |
++++ b/third_party/protobuf/README.chromium |
+@@ -29,6 +29,7 @@ Steps used to create the current version: |
+ generate_descriptor_proto.sh script in the protobuf root directory for a |
+ guide. Based on http://crrev.com/62331 and http://crrev.com/173228 . |
+ 03: Convert protobuf_lite to a component. Based on http://crrev.com/179806 . |
++ 04: Uninline various functions. Based on http://crrev.com/307332 . |
+ (3) Generate descriptor_pb2.py using something like the following steps. Make |
+ sure you've regenerated your buildfiles and will build protoc from the |
+ newly-modified sources above. |
+diff --git a/third_party/protobuf/src/google/protobuf/generated_message_util.cc b/third_party/protobuf/src/google/protobuf/generated_message_util.cc |
+index e8fb398..8b3d037 100644 |
+--- a/third_party/protobuf/src/google/protobuf/generated_message_util.cc |
++++ b/third_party/protobuf/src/google/protobuf/generated_message_util.cc |
+@@ -60,6 +60,11 @@ void InitEmptyString() { |
+ OnShutdown(&DeleteEmptyString); |
+ } |
+ |
++const ::std::string& GetEmptyString() { |
++ ::google::protobuf::GoogleOnceInit(&empty_string_once_init_, &InitEmptyString); |
++ return GetEmptyStringAlreadyInited(); |
++} |
++ |
+ int StringSpaceUsedExcludingSelf(const string& str) { |
+ const void* start = &str; |
+ const void* end = &str + 1; |
+diff --git a/third_party/protobuf/src/google/protobuf/generated_message_util.h b/third_party/protobuf/src/google/protobuf/generated_message_util.h |
+index 6357e27..ae8196b 100644 |
+--- a/third_party/protobuf/src/google/protobuf/generated_message_util.h |
++++ b/third_party/protobuf/src/google/protobuf/generated_message_util.h |
+@@ -84,10 +84,7 @@ LIBPROTOBUF_EXPORT inline const ::std::string& GetEmptyStringAlreadyInited() { |
+ assert(empty_string_ != NULL); |
+ return *empty_string_; |
+ } |
+-LIBPROTOBUF_EXPORT inline const ::std::string& GetEmptyString() { |
+- ::google::protobuf::GoogleOnceInit(&empty_string_once_init_, &InitEmptyString); |
+- return GetEmptyStringAlreadyInited(); |
+-} |
++LIBPROTOBUF_EXPORT const ::std::string& GetEmptyString(); |
+ |
+ // Defined in generated_message_reflection.cc -- not actually part of the lite |
+ // library. |
+diff --git a/third_party/protobuf/src/google/protobuf/stubs/once.cc b/third_party/protobuf/src/google/protobuf/stubs/once.cc |
+index 889c647..1d93ddf 100644 |
+--- a/third_party/protobuf/src/google/protobuf/stubs/once.cc |
++++ b/third_party/protobuf/src/google/protobuf/stubs/once.cc |
+@@ -93,6 +93,13 @@ void GoogleOnceInitImpl(ProtobufOnceType* once, Closure* closure) { |
+ } |
+ } |
+ |
++void GoogleOnceInit(ProtobufOnceType* once, void (*init_func)()) { |
++ if (internal::Acquire_Load(once) != ONCE_STATE_DONE) { |
++ internal::FunctionClosure0 func(init_func, false); |
++ GoogleOnceInitImpl(once, &func); |
++ } |
++} |
++ |
+ } // namespace protobuf |
+ } // namespace google |
+ |
+diff --git a/third_party/protobuf/src/google/protobuf/stubs/once.h b/third_party/protobuf/src/google/protobuf/stubs/once.h |
+index 1f082c3..9522b22 100644 |
+--- a/third_party/protobuf/src/google/protobuf/stubs/once.h |
++++ b/third_party/protobuf/src/google/protobuf/stubs/once.h |
+@@ -122,12 +122,8 @@ typedef internal::AtomicWord ProtobufOnceType; |
+ LIBPROTOBUF_EXPORT |
+ void GoogleOnceInitImpl(ProtobufOnceType* once, Closure* closure); |
+ |
+-inline void GoogleOnceInit(ProtobufOnceType* once, void (*init_func)()) { |
+- if (internal::Acquire_Load(once) != ONCE_STATE_DONE) { |
+- internal::FunctionClosure0 func(init_func, false); |
+- GoogleOnceInitImpl(once, &func); |
+- } |
+-} |
++LIBPROTOBUF_EXPORT |
++void GoogleOnceInit(ProtobufOnceType* once, void (*init_func)()); |
+ |
+ template <typename Arg> |
+ inline void GoogleOnceInit(ProtobufOnceType* once, void (*init_func)(Arg*), |