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?

-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 (#94858): 
https://lists.openembedded.org/g/openembedded-devel/message/94858
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]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to