diff options
-rw-r--r-- | meta-oe/recipes-devtools/protobuf/protobuf/0001-Lower-init-prio-for-extension-attributes.patch | 79 | ||||
-rw-r--r-- | meta-oe/recipes-devtools/protobuf/protobuf_3.19.1.bb | 1 |
2 files changed, 80 insertions, 0 deletions
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..a1200e01c1 --- /dev/null +++ b/meta-oe/recipes-devtools/protobuf/protobuf/0001-Lower-init-prio-for-extension-attributes.patch | |||
@@ -0,0 +1,79 @@ | |||
1 | From 8ff34dbff1eac612326b492d0b2cb93901ad7e2b Mon Sep 17 00:00:00 2001 | ||
2 | From: Jani Nurminen <jani.nurminen@windriver.com> | ||
3 | Date: Fri, 24 Sep 2021 09:56:11 +0200 | ||
4 | Subject: [PATCH] Lower init prio for extension attributes | ||
5 | MIME-Version: 1.0 | ||
6 | Content-Type: text/plain; charset=UTF-8 | ||
7 | Content-Transfer-Encoding: 8bit | ||
8 | |||
9 | Added PROTOBUF_EXTENSION_ATTRIBUTE_INIT_PRIORITY in | ||
10 | code generation for extension attributes. | ||
11 | It has lower prio than PROTOBUF_ATTRIBUTE_INIT_PRIORITY to | ||
12 | ensure that extension attributes are initialized after | ||
13 | other attribute. | ||
14 | This is needed in some applications to avoid segmentation fault. | ||
15 | |||
16 | Reported by Karl-Herman Näslund. | ||
17 | |||
18 | Signed-off-by: Jani Nurminen <jani.nurminen@windriver.com> | ||
19 | |||
20 | Rebase on master | ||
21 | |||
22 | Signed-off-by: He Zhe <zhe.he@windriver.com> | ||
23 | --- | ||
24 | src/google/protobuf/compiler/cpp/cpp_extension.cc | 2 +- | ||
25 | src/google/protobuf/port_def.inc | 12 ++++++++++++ | ||
26 | src/google/protobuf/port_undef.inc | 1 + | ||
27 | 3 files changed, 14 insertions(+), 1 deletion(-) | ||
28 | |||
29 | diff --git a/src/google/protobuf/compiler/cpp/cpp_extension.cc b/src/google/protobuf/compiler/cpp/cpp_extension.cc | ||
30 | index 8604da5f2..984345ebe 100644 | ||
31 | --- a/src/google/protobuf/compiler/cpp/cpp_extension.cc | ||
32 | +++ b/src/google/protobuf/compiler/cpp/cpp_extension.cc | ||
33 | @@ -164,7 +164,7 @@ void ExtensionGenerator::GenerateDefinition(io::Printer* printer) { | ||
34 | } | ||
35 | |||
36 | format( | ||
37 | - "PROTOBUF_ATTRIBUTE_INIT_PRIORITY " | ||
38 | + "PROTOBUF_EXTENSION_ATTRIBUTE_INIT_PRIORITY " | ||
39 | "::$proto_ns$::internal::ExtensionIdentifier< $extendee$,\n" | ||
40 | " ::$proto_ns$::internal::$type_traits$, $field_type$, $packed$ >\n" | ||
41 | " $scoped_name$($constant_name$, $1$);\n", | ||
42 | diff --git a/src/google/protobuf/port_def.inc b/src/google/protobuf/port_def.inc | ||
43 | index 7e9119112..a5117090d 100644 | ||
44 | --- a/src/google/protobuf/port_def.inc | ||
45 | +++ b/src/google/protobuf/port_def.inc | ||
46 | @@ -614,6 +614,18 @@ | ||
47 | #define PROTOBUF_ATTRIBUTE_INIT_PRIORITY | ||
48 | #endif | ||
49 | |||
50 | +// Some embedded systems get a segmentation fault if extension attributes are | ||
51 | +// initialized with higher or equal priority as other attributes. This gives | ||
52 | +// extension attributes high priority, but lower than other attributes. | ||
53 | +#ifdef PROTOBUF_EXTENSION_ATTRIBUTE_INIT_PRIORITY | ||
54 | +#error PROTOBUF_EXTENSION_ATTRIBUTE_INIT_PRIORITY was previously defined | ||
55 | +#endif | ||
56 | +#if PROTOBUF_GNUC_MIN(3, 0) && (!defined(__APPLE__) || defined(__clang__)) && !((defined(sun) || defined(__sun)) && (defined(__SVR4) || defined(__svr4__))) | ||
57 | +#define PROTOBUF_EXTENSION_ATTRIBUTE_INIT_PRIORITY __attribute__((init_priority((103)))) | ||
58 | +#else | ||
59 | +#define PROTOBUF_EXTENSION_ATTRIBUTE_INIT_PRIORITY | ||
60 | +#endif | ||
61 | + | ||
62 | #ifdef PROTOBUF_PRAGMA_INIT_SEG | ||
63 | #error PROTOBUF_PRAGMA_INIT_SEG was previously defined | ||
64 | #endif | ||
65 | diff --git a/src/google/protobuf/port_undef.inc b/src/google/protobuf/port_undef.inc | ||
66 | index ccc5daf56..2b28f3a31 100644 | ||
67 | --- a/src/google/protobuf/port_undef.inc | ||
68 | +++ b/src/google/protobuf/port_undef.inc | ||
69 | @@ -83,6 +83,7 @@ | ||
70 | #undef PROTOBUF_HAVE_ATTRIBUTE_WEAK | ||
71 | #undef PROTOBUF_ATTRIBUTE_NO_DESTROY | ||
72 | #undef PROTOBUF_ATTRIBUTE_INIT_PRIORITY | ||
73 | +#undef PROTOBUF_EXTENSION_ATTRIBUTE_INIT_PRIORITY | ||
74 | #undef PROTOBUF_PRAGMA_INIT_SEG | ||
75 | #undef PROTOBUF_ASAN | ||
76 | #undef PROTOBUF_MSAN | ||
77 | -- | ||
78 | 2.26.2 | ||
79 | |||
diff --git a/meta-oe/recipes-devtools/protobuf/protobuf_3.19.1.bb b/meta-oe/recipes-devtools/protobuf/protobuf_3.19.1.bb index bff159590d..8491dbdf57 100644 --- a/meta-oe/recipes-devtools/protobuf/protobuf_3.19.1.bb +++ b/meta-oe/recipes-devtools/protobuf/protobuf_3.19.1.bb | |||
@@ -18,6 +18,7 @@ SRC_URI = "git://github.com/protocolbuffers/protobuf.git;branch=3.19.x;protocol= | |||
18 | file://0001-Makefile.am-include-descriptor.cc-when-building-libp.patch \ | 18 | file://0001-Makefile.am-include-descriptor.cc-when-building-libp.patch \ |
19 | file://0001-examples-Makefile-respect-CXX-LDFLAGS-variables-fix-.patch \ | 19 | file://0001-examples-Makefile-respect-CXX-LDFLAGS-variables-fix-.patch \ |
20 | file://0001-Fix-linking-error-with-ld-gold.patch \ | 20 | file://0001-Fix-linking-error-with-ld-gold.patch \ |
21 | file://0001-Lower-init-prio-for-extension-attributes.patch \ | ||
21 | " | 22 | " |
22 | SRC_URI:append:mips:toolchain-clang = " file://0001-Fix-build-on-mips-clang.patch " | 23 | SRC_URI:append:mips:toolchain-clang = " file://0001-Fix-build-on-mips-clang.patch " |
23 | SRC_URI:append:mipsel:toolchain-clang = " file://0001-Fix-build-on-mips-clang.patch " | 24 | SRC_URI:append:mipsel:toolchain-clang = " file://0001-Fix-build-on-mips-clang.patch " |