On 1/18/22 22:43, He Zhe wrote:
On 1/17/22 11:30 AM, He Zhe wrote:
On 1/15/22 10:22 PM, akuster808 wrote:
On 1/12/22 12:11 AM, He Zhe wrote:
The protobuf 3.15.2 suffers from the C++ "Static Initialization Fiasco"
issue. This patches makes the extension attributes have a higher
priority than the attributes, so there's no possibility of random
initialization orders.
Signed-off-by: Jani Nurminen <[email protected]>
Upstream-Status: Pending
Since this indicates "Pending", does this issue need to be fixed in
Master too?
Thanks for reminding. Just sent one for master.
This has been merged in master. Can it be merged in hardknott?
yes.
it is now queued.
thanks,
Armin
Thanks,
Zhe
Zhe
-armin
Signed-off-by: He Zhe <[email protected]>
---
...r-init-prio-for-extension-attributes.patch | 81 +++++++++++++++++++
.../protobuf/protobuf_3.15.2.bb | 1 +
2 files changed, 82 insertions(+)
create mode 100644
meta-oe/recipes-devtools/protobuf/protobuf/0001-Lower-init-prio-for-extension-attributes.patch
diff --git
a/meta-oe/recipes-devtools/protobuf/protobuf/0001-Lower-init-prio-for-extension-attributes.patch
b/meta-oe/recipes-devtools/protobuf/protobuf/0001-Lower-init-prio-for-extension-attributes.patch
new file mode 100644
index 0000000000..9f4fd71796
--- /dev/null
+++
b/meta-oe/recipes-devtools/protobuf/protobuf/0001-Lower-init-prio-for-extension-attributes.patch
@@ -0,0 +1,81 @@
+From 00362d12edf1b7fde723b041a4569dc659e65ad1 Mon Sep 17 00:00:00 2001
+From: Jani Nurminen <[email protected]>
+Date: Fri, 24 Sep 2021 09:56:11 +0200
+Subject: Lower init prio for extension attributes
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Added PROTOBUF_EXTENSION_ATTRIBUTE_INIT_PRIORITY in
+code generation for extension attributes.
+It has lower prio than PROTOBUF_ATTRIBUTE_INIT_PRIORITY to
+ensure that extension attributes are initialized after
+other attribute.
+This is needed in some applications to avoid segmentation fault.
+
+Reported by Karl-Herman Näslund.
+
+Signed-off-by: Jani Nurminen <[email protected]>
+
+Upstream-Status: Pending
+
+Signed-off-by: He Zhe <[email protected]>
+---
+ src/google/protobuf/compiler/cpp/cpp_extension.cc | 2 +-
+ src/google/protobuf/port_def.inc | 7 +++++++
+ src/google/protobuf/port_undef.inc | 1 +
+ 3 files changed, 9 insertions(+), 1 deletion(-)
+
+diff --git a/src/google/protobuf/compiler/cpp/cpp_extension.cc
b/src/google/protobuf/compiler/cpp/cpp_extension.cc
+index 3792db81a..cbec19d30 100644
+--- a/src/google/protobuf/compiler/cpp/cpp_extension.cc
++++ b/src/google/protobuf/compiler/cpp/cpp_extension.cc
+@@ -174,7 +174,7 @@ void ExtensionGenerator::GenerateDefinition(io::Printer*
printer) {
+ }
+
+ format(
+- "PROTOBUF_ATTRIBUTE_INIT_PRIORITY "
++ "PROTOBUF_EXTENSION_ATTRIBUTE_INIT_PRIORITY "
+ "::$proto_ns$::internal::ExtensionIdentifier< $extendee$,\n"
+ " ::$proto_ns$::internal::$type_traits$, $field_type$, $packed$ >\n"
+ " $scoped_name$($constant_name$, $1$);\n",
+diff --git a/src/google/protobuf/port_def.inc
b/src/google/protobuf/port_def.inc
+index ae9fef425..f1d203707 100644
+--- a/src/google/protobuf/port_def.inc
++++ b/src/google/protobuf/port_def.inc
+@@ -154,6 +154,9 @@
+ #ifdef PROTOBUF_ATTRIBUTE_INIT_PRIORITY
+ #error PROTOBUF_ATTRIBUTE_INIT_PRIORITY was previously defined
+ #endif
++#ifdef PROTOBUF_EXTENSION_ATTRIBUTE_INIT_PRIORITY
++#error PROTOBUF_EXTENSION_ATTRIBUTE_INIT_PRIORITY was previously defined
++#endif
+ #ifdef PROTOBUF_PRAGMA_INIT_SEG
+ #error PROTOBUF_PRAGMA_INIT_SEG was previously defined
+ #endif
+@@ -596,6 +599,10 @@
+ // Highest priority is 101. We use 102 to allow code that really wants to
+ // higher priority to still beat us.
+ #define PROTOBUF_ATTRIBUTE_INIT_PRIORITY __attribute__((init_priority((102))))
++// Some embedded systems get a segmentation fault if extension attributes are
++// initialized with higher or equal priority as other attributes. This gives
++// extension attributes high priority, but lower than other attributes.
++#define PROTOBUF_EXTENSION_ATTRIBUTE_INIT_PRIORITY
__attribute__((init_priority((103))))
+ #else
+ #define PROTOBUF_ATTRIBUTE_INIT_PRIORITY
+ #endif
+diff --git a/src/google/protobuf/port_undef.inc
b/src/google/protobuf/port_undef.inc
+index daef09bc4..d0c613b55 100644
+--- a/src/google/protobuf/port_undef.inc
++++ b/src/google/protobuf/port_undef.inc
+@@ -77,6 +77,7 @@
+ #undef PROTOBUF_ATTRIBUTE_WEAK
+ #undef PROTOBUF_ATTRIBUTE_NO_DESTROY
+ #undef PROTOBUF_ATTRIBUTE_INIT_PRIORITY
++#undef PROTOBUF_EXTENSION_ATTRIBUTE_INIT_PRIORITY
+ #undef PROTOBUF_PRAGMA_INIT_SEG
+
+ // Restore macro that may have been #undef'd in port_def.inc.
+--
+2.17.1
+
diff --git a/meta-oe/recipes-devtools/protobuf/protobuf_3.15.2.bb
b/meta-oe/recipes-devtools/protobuf/protobuf_3.15.2.bb
index 62c6ee0159..ac4e1ad84b 100644
--- a/meta-oe/recipes-devtools/protobuf/protobuf_3.15.2.bb
+++ b/meta-oe/recipes-devtools/protobuf/protobuf_3.15.2.bb
@@ -17,6 +17,7 @@ SRC_URI =
"git://github.com/protocolbuffers/protobuf.git;branch=master;protocol=
file://0001-protobuf-fix-configure-error.patch \
file://0001-Makefile.am-include-descriptor.cc-when-building-libp.patch \
file://0001-examples-Makefile-respect-CXX-LDFLAGS-variables-fix-.patch \
+ file://0001-Lower-init-prio-for-extension-attributes.patch \
"
S = "${WORKDIR}/git"
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#95132):
https://lists.openembedded.org/g/openembedded-devel/message/95132
Mute This Topic: https://lists.openembedded.org/mt/88369203/21656
Group Owner: [email protected]
Unsubscribe: https://lists.openembedded.org/g/openembedded-devel/unsub
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-